Edit (kein RichEdit) control Textfarbe für Zeile ändern



  • Hallo Zusammen,

    ich habe ein edit-Feld (kein RichEdit) in dem ich permanent verschiedene Infos ausgebe. D.h. es werden permanent Zeilen (Infos) ausgegeben bzw. angehängt und automatisch weiter gescrollt. Eine Info ist immer nur eine Zeile lang. Jetzt möchte ich manche Infos in einer anderen Farbe haben. Im nachfolgenden Beispiel möchte ich z.B. immer wenn die Zeile "Fehler..." ausgeben wird dass die Schrift dieser Zeile in rot ausgegeben wird. Die Farbe der anderen Zeilen (es sind ja mehrere Zeilen im edit-Feld sichtbar) soll sich dabei aber nicht ändern.

    ------Edit-Feld-Ausgabe ----
    mach nix...
    mach nix...
    mach nix...
    Fehler.....

    ----------------------------

    Bisher habe ich es so probiert, aber in diesem Fall wird immer die Farbe aller sichbaren Zeilen ( auf rot geändert 😞

    if((HWND)lParam==hwndEdit2)
    {
      if(fehlertext == 1){SetTextColor((HDC)wParam,RGB(255,0,0));}
    }return 0;
    

    Wer kann weiterhelfen? Vielen Dank im voraus, gruss rommi



  • RichEdit



  • Also so wie ich das sehe, gibt es für ein Edit-Control kein Ownerdraw und kein Customdraw. Also wirst du wohl die Edit-Controll subclasen müssen und WM_PAINT komplett selbern ausführen DrawText und DrawTextex sind dann die Funktionen mit denen du arbeiten kannst. Eine nicht ganz leicht Sache würde ich sagen.
    Möglicherweise wäre es sinnvoller, als Ausgabe einen Listview im Reportstyle zu verwenden, dort kannst du den farbigen Text recht einfach mit Ownerdraw oder Customdraw (<-wäre die Funktion meiner Wahl) realisieren.



  • richedit EM_SETSEL, EM_SETCHARFORMAT



  • Danke an Alle!

    @guggstdu:
    Hast du mal ein funktionierendes Beispiel für mich? Benötige eigentlich nur ein Textfeld in meinem Hauptfenster wo ich die Infos ausgeben kann und bei Bedarf bestimmte Infozeilen in einer anderen Farbe. Mehr muss dat Dingens garnicht können (zumindest vorerst lol). Oder is es doch besser mit dem RichEdit-Feld(funzt das überhaupt noch unter Win98?)zu arbeiten. Am liebsten wäre mir ne relative unkomplizierte (so wenig Code wie möglich) Lösung die auch noch auf älteren OS-Version (ab Win 98) funktionieren..

    Liebe Grüsse, rommi



  • Da sollte was drin stehen:
    http://winapi.foosyerdoos.org.uk/info/user_cntrls.php

    Du musst ja auch so deinem Compiler mitteilen das er Code für
    ältere Windows erstellen soll.

    MfG f.-th.



  • rommi schrieb:

    Danke an Alle!

    @guggstdu:
    Hast du mal ein funktionierendes Beispiel für mich? Benötige eigentlich nur ein Textfeld in meinem Hauptfenster wo ich die Infos ausgeben kann und bei Bedarf bestimmte Infozeilen in einer anderen Farbe. Mehr muss dat Dingens garnicht können (zumindest vorerst lol). Oder is es doch besser mit dem RichEdit-Feld(funzt das überhaupt noch unter Win98?)zu arbeiten. Am liebsten wäre mir ne relative unkomplizierte (so wenig Code wie möglich) Lösung die auch noch auf älteren OS-Version (ab Win 98) funktionieren..

    Liebe Grüsse, rommi

    Was verstehst du unter Codebeispiel? Der Ablauf für Listview wäre folgender: Listview erstellen, Items einfügen, dann den Event NM_CUSTOMDRAW auswerten und selbern zeichen. Code sollte in etwa so gestrickt sein:

    Eventhandler

    case NM_CUSTOMDRAW:
    		return CustomDraw_Listview(hWnd, lParam);
    

    Customdrawfunktion

    int CustomDraw_Listview(HWND hWnd, LPARAM lParam){
    
    	LPNMLVCUSTOMDRAW		cd;
    
    	cd = (LPNMLVCUSTOMDRAW)lParam;
    	switch(cd->nmcd.dwDrawStage){
    		case CDDS_PREPAINT:
    			return CDRF_NOTIFYITEMDRAW;
    		case CDDS_ITEMPREPAINT:
    			return CDRF_NOTIFYSUBITEMDRAW;
    		case CDDS_SUBITEM | CDDS_ITEMPREPAINT:{
    			HDC			hDC;
    			COLORREF		Text = irgendwas, TextBk = irgendwas;
    
    			hDC = cd->nmcd.hdc;
    			SetBkColor(hDC, TextBk);
    			SetTextColor(hDC, Text);
    			:
    			:
    			:
    			und
    			soweiter
    			und
    			sofort
    			:
    			:
    			:
    			:
    		}
    	}
    	return CDRF_DODEFAULT;
    }
    

    Ansonsten zu Richedit kann ich dir nur sagen, das klappt auch unter Win9x, nur hab ich Richedit noch nie einsetzen müsee, haher kann ich dir diesbezüglich keine Ratschläge geben. Achja wenn du nach CDDS_*** googels solltest du volständigen Code finden, ich wollte dir nur nicht alle Zeilen aus meiner Application rauskiopieren.


Anmelden zum Antworten