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 es ➡ csOwnerDrawVariable

    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);
    }
    

Anmelden zum Antworten