Items einer ComboBox farbig füllen



  • Hallio,
    ich würde gerne die einzelnen Zeilen meiner Combobox farbig füllen.
    Dazu habe ich mir folgenden Code erdacht:

    void __fastcall Tform_maps::ComboBox1DrawItem(TWinControl *Control,
          int Index, TRect &Rect, TOwnerDrawState State)
    {
      switch (Index) {
        case 0 :  Canvas->Brush->Color = clLime;    break;
        case 1 :  Canvas->Brush->Color = clRed;     break;
        case 2 :  Canvas->Brush->Color = clAqua;    break;
        case 3 :  Canvas->Brush->Color = clYellow;  break;
      }
      Canvas->FillRect(Rect);
    }
    

    Leider wird die Farbe nicht in den Zeilen der Combobox, sondern an Position (0|0) das Formulars gezeichnet. Laut Hilfe gibt mir der Parameter Rect das Rechteck zurück, in dem gezeichnet werden soll.
    hab ich etwas übersehen?

    MfG
    Stefan



  • Du musst schon das Canvas des Control verwenden und nicht der form

    (TWinControl *Control) auswerten



  • TWinControl hat aber anscheinend kein Canvas. Ein Typecast auf TComboBox tut auch nicht. Ich kann natürlich manuell den Namen der aufrufenden ComboBox angeben, aber ich möchte die Funktion ja allgemein halten. Gibt es hier kein "TObject *Sender" ?



  • klar geht ein cast auf die ComboBox

    TComboBox* pCBO = dynamic_cast<TComboBox*>(Control);
    if (pCBO) {
      pCBO->Canvas->FillRect(Rect);
    }
    


  • Hallo

    Zu beachten ist dabei noch das der Style der ComboBox muß auf csOwnerDraw... gesetzt sein muß

    bis bald
    akari


Anmelden zum Antworten