Text zeilenweise ausgeben mit SetWindowText()



  • Ok, hier ein kleines Beispiel:

    CString Inhalt;
    CRichEditCtrl* pRichEdit = (CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT1);
    
    if (pRichEdit)
    {
        Inhalt.Format("Das ist ein Beispiel!\n");
    
        pRichEdit->SetSel(-1,-1);                   // ans Ende vom RichEdit-Control
        pRichEdit->ReplaceSel(Inhalt.GetBuffer());   // Text setzen
    }
    

    Vielleicht hilft das ja.



  • Hi,

    versuch es doch mal hiermit

    XX.SetSel(XX.GetWindowTextLength(),XX.GetWindowTextLength());
    XX.ReplaceSel(strText + "\r\n");
    

    bei mir hat es so geklappt ein einer CEdit, da es bei CRichEditCtrl die Funktionen ebenfalls gibt könnte es gehen

    Gruss Mutche



  • Paul_C. schrieb:

    Ok, hier ein kleines Beispiel:

    CString Inhalt;
    CRichEditCtrl* pRichEdit = (CRichEditCtrl*) GetDlgItem(IDC_RICHEDIT1);
    
    if (pRichEdit)
    {
        Inhalt.Format("Das ist ein Beispiel!\n");
     
        pRichEdit->SetSel(-1,-1);                   // ans Ende vom RichEdit-Control
        pRichEdit->ReplaceSel(Inhalt.GetBuffer());   // Text setzen
    }
    

    Vielleicht hilft das ja.

    Habe es versucht bei mir zu integrieren:

    CRichEditCtrl &rCtrl = GetRichEditCtrl();
    	CDC* pDC=GetDC();
    	// Ausgabe des Ergebnis Files auf Bildschirm
    	CString strZeile;   // Auszudruckende Zeile
        CFont* pOldFont = (CFont*) pDC->SelectObject(&m_fontView);	// Schrift dem Gerätekontext zuordnen
        for (long i = 0; i < m_pDoc->m_strarrInhalt.GetSize(); i++)  // Ausdruck aller Zeilen
    	{
    		strZeile=m_pDoc->m_strarrInhalt[i];
    		//
    		// Formatierungen herausnehmen
    		if(!strZeile.IsEmpty())
    		{
    			strZeile.Delete(0,1); // 1. Spalte löschen
    		}
    		strZeile.Format(strZeile,"\n");
    		rCtrl.SetSel(-1,-1);
    		rCtrl.ReplaceSel(strZeile.GetBuffer());
        }
        pDC->SelectObject(pOldFont); // Zurücksetzen der Schrift
    

    Der Text wird jetzt auch komplett ausgegeben, nur leider nicht zeilenweise. 😕
    Eine Idee?



  • In deinem Fall kannst du

    strZeile.Format(strZeile,"\n");
    

    mit

    strZeile += "\n";
    

    ersetzen. Die erste Schreibweise kenne ich nicht. 🙂

    Ansonsten musst du darauf achten, dass dein RichEditCtrl auf "Multiline = True" gesetzt ist.



  • Paul_C. schrieb:

    In deinem Fall kannst du

    strZeile.Format(strZeile,"\n");
    

    mit

    strZeile += "\n";
    

    ersetzen. Die erste Schreibweise kenne ich nicht. 🙂

    Ansonsten musst du darauf achten, dass dein RichEditCtrl auf "Multiline = True" gesetzt ist.

    Habe die Änderung vorgenommen und der Text wird anscheinend zeilenweise ausgegeben.
    Leider wird die Darstellung "unleserlich", wenn ich das Fenster scrolle.
    Kann es daran liegen, dass ich den Code in der OnUpdate()-Funktion ingebaut habe?
    Wie kann ich mein RichEditCtrl auf "Multiline = True" überprüfen bzw. setzen?



  • Mit der OnUpdate()-Funktion könntest du Recht haben. Kann ich leider nichts zu sagen.
    Um zu schauen, ob dein RichEditCtrl Multiline aktiviert hat, kannst du entweder in der Ressourcen-Ansicht bei den Eigenschaften nachschauen, oder aber, du setzt den 'Style' auf ES_MULTILINE. Dazu nutzt du die Funktion ModifyStyleEx().
    😉



  • Paul_C. schrieb:

    Um zu schauen, ob dein RichEditCtrl Multiline aktiviert hat, kannst du entweder in der Ressourcen-Ansicht bei den Eigenschaften nachschauen, oder aber, du setzt den 'Style' auf ES_MULTILINE. Dazu nutzt du die Funktion ModifyStyleEx().
    😉

    In der Ressourcen-Ansicht kann ich nicht nachschauen, da ich ein RichEditView-Projekt habe, in dem ja die Fenster dynamisch erzeugt werden.
    Wie benutzt man ModifyStyleEx()?



  • Also, wenn du dein RichEditCtrl mit Hilfe von Create() erstellst, dann nimm CreateEx() und dann als Style ES_MULTILINE.
    Ansonsten einfach dein RichEditCtrl-Obejkt nutzen.
    In meinem Fall sieht das dann so aus:

    m_pRichEdit->ModifyStyleEx(0,ES_MULTILINE);
    

    Der erste Parameter ('0') gibt an, dass du kein Style entfernen möchtest.
    Der zweite Parameter (ES_MULTILINE) gibt an, dass du diesen Style hinzufügen möchtest.



  • Paul_C. schrieb:

    m_pRichEdit->ModifyStyleEx(0,ES_MULTILINE);
    

    Habe es auch so gemacht. Es ändert leider nichts an der Darstellung.
    Es werden zunächst nur ein paar Zeilen vom Ende ausgegeben. Erst wenn ich das Ausgabefenster scrolle, erst dann wird der Rest angezeigt, nur leider total unleserlich. Während des Scrollens wird der Text verschoben, so dass das komplette Fenster mit dem Text ausgefüllt wird. 😕



  • Dann ist das wahrscheinlich doch eine "Nebenwirkung" der OnUpdate()-Funktion.
    Kenn mich wie gesagt leider nicht damit aus.
    Du könntest ja eventuell auprobieren, dies woandershin zu schreiben.



  • Mein Code sieht jetzt so aus:

    CRichEditCtrl &rCtrl = GetRichEditCtrl();
    	CDC* pDC=GetDC();
    	// Ausgabe des Ergebnis Files auf Bildschirm
    	CString strZeile;   // Auszudruckende Zeile
        CFont* pOldFont = (CFont*) pDC->SelectObject(&m_fontView);	// Schrift dem Gerätekontext zuordnen
    	//GetRichEditCtrl().LockWindowUpdate();
        for (long i = 0; i < m_pDoc->m_strarrInhalt.GetSize(); i++)  // Ausdruck aller Zeilen
    	{
    		strZeile=m_pDoc->m_strarrInhalt[i];
    		//
    		// Formatierungen herausnehmen
    		if(!strZeile.IsEmpty())
    		{
    			strZeile.Delete(0,1); // 1. Spalte löschen
    		}
    		strZeile += "\n";
    		rCtrl.ModifyStyleEx(0,ES_MULTILINE);
    		rCtrl.SetSel(-1,-1);
    		rCtrl.ReplaceSel(strZeile.GetBuffer());
        }
       pDC->SelectObject(pOldFont); // Zurücksetzen der Schrift
    

    Zum Darstellungsfehler:
    Ich musste das bestehende Programm von CEditView in CRichEditView anpassen. Dabei hatte ich den obigen Code in der OnDraw-Funktion. Da diese ja in CRichEditView nicht funktioniert musst ich den Code verschieben. Habe ihn nun in OnUpdate und in OnInitialUpdate. Keine Ahnung ob das richtig ist?
    Gibt es eine Funktion in CRichEditView die der OnDraw-Funktion des CEditView entspricht?



  • Auch da muss ich leider passen. Ich beschäftige mich hauptsächlich mit dialogfeldbasierenden Anwendungen.



  • Trotzdem, danke für deine Hilfe.
    Werde dann mal eine neuen Thread aufmachen.

    Gruß.



  • Kein Problem. 😉
    Viel Erfolg.


Anmelden zum Antworten