RichEdit



  • Sers,
    Ich habe ein Textfeld (Edit) nun möchte ich aber Farbe ins Spiel bringen und daher dachte ich mir benutz doch einfach ein RichEdit. Nur sobald ich ein Richedit auf meinen Dialog plaziere (Resourceneditor) wird mein kompletter Dialog nicht mehr angezeigt, was mach ich falsch?

    cu para
    😃



  • du mußt die Rich-Edit DLL erst mit LoadLibrary() in deinen Prozess laden! Ich glaub die DLL heisst riched32.dll. gibt glaub ich 3 verschiedene versionen davon



  • danke!



  • Könnte mir bitte jemand sagen was hieran falsch ist?

    // function to add a text
    void utilAppendTextToWindow(HWND hWnd, char *szText, COLORREF crTextColor)
    {
        // private
        char *szOldText;
        char *szNewText;
        int tl;
    
        CHARFORMAT cf;
    
        // get len of text
        tl = GetWindowTextLength(hWnd);
    
        // allocate
        szOldText = new char[tl+2];
        szNewText = new char[tl+strlen(szText)+2];
    
        // get old text
        GetWindowText(hWnd, szOldText, tl+2);
    
        // append
        wsprintf(szNewText, "%s%s", szOldText, szText);
        SetWindowText(hWnd, szNewText);
    
        // fill struct
        cf.cbSize = sizeof(CHARFORMAT);
        cf.dwEffects &= ~CFE_AUTOCOLOR;
        cf.dwMask = CFM_COLOR;
        cf.crTextColor = crTextColor;
        cf.yHeight = 32;
        strcpy( cf.szFaceName, "Arial");
    
        // select last text inserted
        tl = GetWindowTextLength(hWnd);
        SendMessage(hWnd, EM_SETSEL, (WPARAM)(tl-strlen(szText)), (LPARAM)tl);
    
        // set color
        SendMessage(hWnd, EM_SETCHARFORMAT ,SCF_SELECTION, (LPARAM)&cf);
    
        // set cusor to end of text
        SendMessage(hWnd, EM_SCROLL, SB_PAGEDOWN, 0); 
    }
    

    Aufgerufen wird die Funktion so:

    utilAppendTextToWindow(GetDlgItem(hMainWnd, ID_TXT_TEXT), "> ", RGB(255, 0, 0));
            utilAppendTextToWindow(GetDlgItem(hMainWnd, ID_TXT_TEXT), szSendText, RGB(0, 0, 0));
            utilAppendTextToWindow(GetDlgItem(hMainWnd, ID_TXT_TEXT), "\r\n", RGB(0, 0, 0));
    

    Aber es erscheint alles in der roten Farbe.
    Was ist falsch?

    danke
    cu para
    😃



  • Der farbige Text der schon dasteht wird nämlich irgentwie überschrieben, also mit der Farbe.



  • Wenn ich den Text mit GetText auslese wird in der Variable szOldText die Farbe ja nicht gespeicher. Und wenn ich den Text dann mit SetText wieder dran hänge ist es wieder farblos.

    Wie kann ich das jetzt machen?!



  • SO habs jetzt:

    // function to add a text
    void utilAppendTextToWindow(HWND hWnd, char *szText, COLORREF crTextColor)
    {
        // private
        int tl;
        CHARFORMAT cf;
    
        tl = GetWindowTextLength(hWnd);
    
        // add new text
        SendMessage(hWnd, EM_SETSEL, tl, tl);
        SendMessage(hWnd, EM_REPLACESEL, FALSE, (LPARAM)szText);
    
        // fill struct
        memset( &cf, 0, sizeof(CHARFORMAT) );
    
        cf.cbSize = sizeof(CHARFORMAT);
        cf.dwMask = CFM_COLOR;
        cf.crTextColor = crTextColor;
    
        // select last text inserted
        tl = GetWindowTextLength(hWnd);
        SetFocus(hWnd);
        SendMessage(hWnd, EM_SETSEL, (WPARAM)(tl-strlen(szText)), (LPARAM)tl);
    
        // set color
        SendMessage(hWnd, EM_SETCHARFORMAT ,SCF_SELECTION, (LPARAM)&cf);
    
        // set cusor to end of text
        SendMessage(hWnd, EM_SCROLL, SB_PAGEDOWN, 0); 
    }
    

    [ Dieser Beitrag wurde am 25.12.2002 um 17:33 Uhr von paranoiac.org editiert. ]


Anmelden zum Antworten