Ownerdraw TCombobox
-
Hallo,
ich versuche gerade im C++ Builder die Farben meiner ComboBoxen zu customizen.
Ich habe bereits die Hintergrundfarbe des Status odSelected und odFocused angepasst, sowie das FocusRect entfernt.
Nun möchte ich aber noch, dass der Textbereich der Combobox einen anderen Hintergrund bekommt als der Dropownbereich. Aktuell wird dieser immer mit der Farbe des Status odFocused eingefärbt wenn ich ein Item auswähle.
Hier mein aktueller Code:
void __fastcall TForm2::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { //eliminiate artifacts ComboBox1->Canvas->FillRect(Rect); //Color odSelected if (State.Contains(odSelected)) { ComboBox1->Canvas->Brush->Color = clLime; ComboBox1->Canvas->Font->Color = clBlack; ComboBox1->Canvas->FillRect(Rect); } ComboBox1->Canvas->TextOutW(Rect.Left,Rect.Top, ComboBox1->Items->Strings[Index]); //Color odFocused if (State.Contains(odFocused)) { ComboBox1->Canvas->Brush->Color = clRed; ComboBox1->Canvas->Font->Color = clWhite; ComboBox1->Canvas->FillRect(Rect); ComboBox1->Canvas->TextOutW(Rect.Left,Rect.Top, ComboBox1->Items->Strings[Index]); // Remove FocusRect (XOR) ComboBox1->Canvas->DrawFocusRect(Rect); } }
Vielen Dank und schöne Grüße,
Thomas
-
Hallo,
ich mach das so:if(State.Contains(odSelected) == true) // Menübalken { ComboBox1->Canvas->Brush->Color = ComboBox1->Canvas->Font->Color = } else if(State.Contains(odComboBoxEdit) == true) // Eingabefeld { ComboBox1->Canvas->Brush->Color = ComboBox1->Canvas->Font->Color = } else if(State.Contains(odSelected) == false && // Dropdown-Liste State.Contains(odComboBoxEdit) == false) { ComboBox1->Canvas->Brush->Color = ComboBox1->Canvas->Font->Color = }