Home » Tipps & Tricks » Komponenten » TListBox/TComboBox » Eine Farbcombobox realisieren

Eine Farbcombobox realisieren

Eine komfortable Auswahl-Möglichkeit für Farben sucht man in älteren Delphi-Versionen in der Komponentenleiste vergebens. Dieser Artikel zeigt, wie Sie eine Farbcombobox realisieren können.Deklarieren Sie zunächst folgendes Array:

const
FarbArray : array [0..15] of TColor = (clBlack,clMaroon, clGreen, clOlive,
                                      clNavy, clPurple, clTeal, clGray,
                                      clSilver, clRed, clLime, clYellow,
                                      clBlue, clFuchsia, clAqua, clWhite);

Schreiben Sie in das OnDrawItem-Ereignis Ihrer Combobox folgendes. Setzen Sie die Eigenschaft Style der Combobox zuvor auf csOwnerDrawFixed oder csOwnerDrawVariable damit das Ereignis ausgelöst wird.

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
  Rect: TRect; State: TOwnerDrawState);
const
  cBrushColors: array [Boolean] of TColor = (clWindow, clHighlight);
  cPenColors: array [Boolean] of TColor = (clWindowText, clHighlightText);
begin
  Assert(Control is TCombobox);

  with (Control as TComboBox).Canvas do
  begin
    // Hintergrund und Text Farbe bestimmen, anschließend den Hintergrund löschen
    Brush.Color := cBrushColors[(OdSelected in State) or (OdFocused in State)];
    Font.Color := cPenColors[(OdSelected in State) or (OdFocused in State)];
    FillRect(Rect);

    Rect.Right := 30;
    Textout(Rect.Right + 5, Rect.Top + 1, (Control as TComboBox).Items[Index]);
 
    // Jetzt gleichen wir das Rect für die Farbbox an
    // und anschließend zeichen wir diese ...
    InflateRect(Rect, 0, -2);
    OffsetRect(Rect, 2, 0);
    Brush.Style := bsClear;
    Brush.Color := FarbArray[Index];
    Rectangle(Rect);
  end;
end;

Füllen Sie die Items-Eigenschaft mit folgenden Farbwerten:

Schwarz
Braun
Grün
Hellbraun
Dunkelblau
Lila
Dunkelgr ün
Grau
Silber
Rot
Hellgrün
Gelb
Blau
Pink
Hellblau
Weiß