Text Serialisierung



  • Hi,

    ich serialisiere nun einen Text aus einer txt-Datei.
    Anzeigen lasse ich den Text in OnInitialUpdate() in der View.cpp.
    Funktioniert fast 100%-tig, bis auf:

    1.In der ersten Zeile meiner Textdatei wird das letzte Zeichen nicht angezeigt.
    2.Gehe ich im SDI auf Datei -> Öffnen, wird ordnungsgemäß der passende Dialog angezeigt. Klicke ich die Textdatei doppelt(oder markiere sie und gehe auf öffnen) wird der Dialog "Änderungen in Unbekannt speichern ?" angezeigt.
    Erst wenn nein geklickt wurde, wird der Text (bis auf das letzte Zeichen in der ersten Zeile) angezeigt
    😕 😕 😕

    Das kann doch nicht sein, alles läuft gut bis auf laden und anzeigen ! 😡 😞

    Hier der Code der Serialisierung:

    void CSDI_Weg_durchs_LabyrinthDoc::Serialize(CArchive& ar)
    {
    	if (ar.IsStoring())
    	{	
    		// ZU ERLEDIGEN: Hier Code zum Speichern einfügen
    		ar << cstrAusgabe;
    	}
    	else
    	{		
    		ar >> cstrAusgabe;
    	}
    
    	// Ein Aufruf der Basisklasse CRichEditDoc ermöglicht die Serialisierung
    	//  des Objekts COleClientItem des Container-Dokuments.
    	// ZU ERLEDIGEN: CRichEditDoc::m_bRTF = FALSE setzen, wenn Sie als Text serialisieren
    	CRichEditDoc::m_bRTF = FALSE;
    	CRichEditDoc::Serialize(ar);
    }
    

    Code im onInitialUpdate():

    void CSDI_Weg_durchs_LabyrinthView::OnInitialUpdate()
    {		
     		CSDI_Weg_durchs_LabyrinthDoc *pDoc = GetDocument ();
    
    		CRichEditCtrl& rCtrl = GetRichEditCtrl(); // Pointer auf das RichEditControl erstellen um dessen Funktionen zu nutzen
    		CHARFORMAT cfm;							  // Struktur die die Aktionen der Selektion enthält
    		CFont myFont;
    		myFont.CreatePointFont(150,"Terminal",NULL); // Font erstellen
    	  	rCtrl.SetFont(&myFont);
    
    		rCtrl.ReplaceSel(pDoc->cstrAusgabe);/**/
    		// rCtrl.SetSel(0,100);		
    		cfm.cbSize		= sizeof(CHARFORMAT);			// Funktionen
    		cfm.dwMask		= CFM_BOLD;						// des RichEditCONTROLS zur
    		cfm.dwEffects	= CFM_BOLD;						// formatierten Darstellung benutzen
      		rCtrl.SetSelectionCharFormat (cfm);				// Aktionen der Selektion ausführen
    
    	pDoc->UpdateAllViews (NULL);
    	// Druckränder festlegen (720 Twips = 1/2 Zoll).
    	SetMargins(CRect(720, 720, 720, 720));
    }
    

    Danke für eure Hilfe 🙂
    🙂
    ShadowEater



  • O.K. die sache mit dem sonderbaren Auftauchender Dialogbox "Änderungen in...",
    liegt daran dass ich

    rCtrl.SetFont(&myFont);
    

    in onInitialUpdate() aufrufe !
    Lasse ich es weg kommt auch kein Dialog.Aber ich brauche den anderen CharSet, weis jemand von euch in welcher Funktion ich die Einstellungen für das RTFView machen kann ohne dass dieser dämliche Dialog auftaucht ?

    Vielen Dank für eure Hilfe
    😉
    ShadowEater


  • Mod

    1. Ein CArchive liest keine normale Textdatei. Die ersten Zeichen bei einer Serialisierung eines CString ist die Länge! So geht das gar nicht. Deshlab fehlen die ersten Zeichen.
    2. Wenn das aktuelle Dokument den Status "modified" hat, dann wird vor dem neuen Laden natürlich gefragt ob der alte Inhalt gespeichert werden soll.
    Irgendwo wird überflüssigerweise SetModified aufgerufen. Breakpoint setzen und prüfen wo.



  • Danke Martin für Deine schnelle Antwort.

    1. Ein CArchive liest keine normale Textdatei. Die ersten Zeichen bei einer Serialisierung eines CString ist die Länge! So geht das gar nicht. Deshlab fehlen die ersten Zeichen.

    im von der IDE generierten Quellcode seteht aber dass m_bRTF auf FALSE zu setzen ist wenn Text serialisiert werden soll !!!

    // ZU ERLEDIGEN: CRichEditDoc::m_bRTF = FALSE setzen, wenn Sie als Text serialisieren

    Versteh ich da was falsch )

    Danke
    😉
    ShadowEater


  • Mod

    Ja! Das verstehst Du falsch. m_bRTF==TRUE bedeutet, dass die Daten im RTF Format gespeichert werden, andernfalls ohne Formatierung als Plain Text. Mit der Serialiserung hat das erstmal nichts zu tun!

    Zudem hast Du Serialize ja offensichtich überschrieben!


Anmelden zum Antworten