FAQ-Verbesserung
-
Betrifft: FAQ-Eintrag (ListBox - farbige Einträge)
Der Code dort ist nicht schön. Vor allem an einer Stelle undefiniert, denn LBColors[3-Index] existiert nicht für Index == 0. Der Code
// Hintergrund zeichnen ListBox1->Canvas->FillRect(Rect);ist zudem überflüssig, da das Rechteck eh mit der in ListBox1->Canvas->Brush->Color angegebenen Farbe gefüllt wird. Mein Verbessrungsvorschlag wäre
TColor LBTextColors[3] = {clWhite, clLime, clBlack}; TColor LBBrushColors[3] = {clBlue, clBlack, clWhite}; void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index, TRect &Rect, TOwnerDrawState State) { if(State.Contains(odSelected)) { ListBox1->Canvas->Brush->Color = clYellow; // Hintergrundfarbe ListBox1->Canvas->Font->Color = clRed; // Textfarbe } else { ListBox1->Canvas->Brush->Color = LBBrushColors[Index]; // dito ListBox1->Canvas->Font->Color = LBTextColors[Index]; } // Text zeichnen ListBox1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, ListBox1->Items->Strings[Index]); if(State.Contains(odFocused)) ListBox1->Canvas->DrawFocusRect(Rect); }Es ist noch zu bemerken, dass das Zeichnen des FocusRects letzteres gerade NICHT erscheinen lässt. Beim Weglassen dieses Codes wird das FocusRect gezeichnet.