Einzelne Zeilen in Listbox (Editbox) kolorieren ? ? ?
-
Hi,
ich habe schon seit langer Zeit ein Problem bei dem ich nicht weiter komme..
Ich will nur einzelne Zeilen in einer Listbox (oder Editbox) in verschiedenen Farben kolorieren.
D.h. z.B. eine Zeile in rot die ander in blau usw.
Kennt ihr da vielleicht eine Lösung.PS: In anderen Sprachen wie Dephi ist das ja auch so einfach, dann muss das doch auch mit C & WinAPI gehen oder nicht?
Ciao | Fred
-
Wünsche dir dass andere besser Nachrichten haben, aber:
Ich habe bisher nur bei einem Kollegen gesehen, dass er eine CListBox soweit umgemodelt hat, dass die Zeilen in unterschiedlichen Farben ausgegeben wurden. Ist aber echte Handarbeit. Da dieser Kollege auch in Recherche recht fit ist, musst du wohl selbst basteln. images/smiles/icon_sad.gif
Aber wie gesagt: Vielleicht hat er doch was übersehen.
-
Das ist ja echt sehr sehr schade images/smiles/icon_sad.gif images/smiles/icon_sad.gif images/smiles/icon_sad.gif
Verstehe echt nicht warum das so schwer ist..
Die Farben macht das ganze doch erst übersichtlich!Tja, wenn jemand mal ein Beispiel findet wie so etwas dennoch manuell geht, dann postet es bitte hier hin.
Cu | Fred
-
Nana, so schwer ist das nun auch nicht.
Man muss lediglich alles selber zeichnen:// Erstellen... hControl = CreateWindowEx(...,WS_VISIBLE|WS_CHILD|LBS_HASSTRINGS|LBS_OWNERDRAWFIXED,...); // Dann WM_DRAWITEM im Eltern-Fenster abfangen // in lParam verstecken sich die Infos über das was gezeichnet werden soll und zwar in Form von DRAWITEMSTRUCT case WM_DRAWITEM: { DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lp; if( dis->hwndItem == hControl ) { // Prüfen welche Listbox gezeichnet wird COLORREF bgColor; // Falls Eintrag selektiert dann roter Hintergrund, sonst grün if( dis->itemState & ODS_SELECTED ) bgColor = RGB(255,0,0); else bgColor = RGB(0,255,0); // Rechteck für Hintergrund zeichnen HBRUSH hbr = CreateSolidBrush(bgColor); FillRect(dis->hDC,&dis->rcItem,hbr); DeleteObject(hbr); // Den Text des Items nehmen und mit Textout darstellen char buf[100]; SendMessage(hControl,LB_GETTEXT,dis->itemID,(long)buf); SetBkColor(dis->hDC,bgColor); TextOut(dis->hDC, dis->rcItem.left, dis->rcItem.top, buf, strlen(buf)); } return 0; };
[ 12.10.2001: Beitrag editiert von: Dr. Greenthumb ]
-
Das meinte ich mit Handarbeit. images/smiles/icon_wink.gif
-
OK heißen Dank für den SourceCode.
Werde das ganze jetzt mal testen images/smiles/icon_wink.gif
Cu | Fred
-
da ich letztes mal dreimal fragen musste, ob man das bitte in die faq machen kann:
BITTE IN DIE FAQ
BITTE IN DIE FAQ
BITTE IN DIE FAQ