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.


Anmelden zum Antworten