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  = 
    }
    

Anmelden zum Antworten