ComboBox Hintergrund Farben
-
Hi,
ich habe ein kleines Problem http://www.c-plusplus.net/forum/viewtopic-var-t-is-39191.html diesen Beitrag aus der FAQ auf die ComboBox zu übertragen.
Die Items meiner ComboBox sind die zahlen von 0 bis 4 jeder der Zahlen in der ComboBox soll eine andere Hintergrundfarbe haben. Aber wie stell ich das an?
Mein Quelltext:
void __fastcall TForm1::ComboBox8DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { TColor LBColors[5] = {clWhite, clRed, clGreen, clYellow, clBlack}; ComboBox8->Items->CommaText = "0,1,2,3,4"; if(State.Contains(odSelected)) { ComboBox8->Canvas->Brush->Color = LBColors[Index]; // Hintergrundfarbe ComboBox8->Canvas->Font->Color = LBColors[3-Index]; // Textfarbe } else { ComboBox8->Canvas->Brush->Color = LBColors[3-Index]; // dito ComboBox8->Canvas->Font->Color = LBColors[Index]; } // Hintergrund zeichnen ComboBox8->Canvas->FillRect(Rect); // Text zeichnen ComboBox8->Canvas->TextRect(Rect, Rect.Left, Rect.Top,ComboBox8->Items->Strings[Index]); if(State.Contains(odFocused)) ComboBox8->Canvas->DrawFocusRect(Rect); }
Ich hoffe mir kann jemand helfen.
-
hast du den Style der ComboBox auf csOwnerDrawFixed oder csOwnerDrawVariable gesetzt?
warum setzt du jedesmal den Inhalt der Box neu (Zeile 5)?
-
ehmm ja Zeile 5 ist quatsch stimmt.
Und genau das ist escsOwnerDrawVariable
So geht das (ohne Nervigen fabwechsel bei MausOver)
Danke Linnea
void __fastcall TForm1::ComboBox8DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { TColor LBColors[5] = {clWhite, clRed, clYellow, clGreen, clBlack}; ComboBox8->Canvas->Brush->Color = LBColors[Index]; // dito ComboBox8->Canvas->Font->Color = LBColors[5]; // Hintergrund zeichnen ComboBox8->Canvas->FillRect(Rect); // Text zeichnen ComboBox8->Canvas->TextRect(Rect, Rect.Left, Rect.Top,ComboBox8->Items->Strings[Index]); if(State.Contains(odFocused)) ComboBox8->Canvas->DrawFocusRect(Rect); }