...draw a color picking Combo Box?

Author: Rafael Giusti

Category: VCL

{
  IMPORTANT: This code won't run if you don't
  change the ComboBox or ListBox's property
  "Style" to csOwnerDrawVariable.

  WICHTIG: Die Eigenschaft "Style" der ComboBox muss auf
  csOwnerDrawVariable gesetzt werden, damit der Code
  funktioniert
}

const
  
COLOR_NUM = 15;
  ColorConst: array [0..COLOR_NUM] of TColor = (clBlack,
    clMaroon, clGreen, clOlive, clNavy,
    clPurple, clTeal, clGray, clSilver, clRed,
    clLime, clYellow, clBlue, clFuchsia,
    clAqua, clWhite);
  ColorNames: array [0..COLOR_NUM] of string = ('Black',
    'Maroon', 'Green', 'Olive', 'Navy',
    'Purple', 'Teal', 'Gray', 'Silver', 'Red',
    'Lime', 'Yellow', 'Blue', 'Fuchsia',
    'Aqua', 'White');

implementation

{...}

procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer; Rect: TRect;
  State: TOwnerDrawState);
begin
  with 
(Control as TComboBox).Canvas do
  begin
    
FillRect(Rect);
    TextOut(30, Rect.Top,
      ComboBox1.Items[Index]);
    Pen.Color   := clBlack;
    Brush.Color := ColorConst[Index];
    Rectangle(Rect.Left + 2, Rect.Top + 2, 24,
      Rect.Top + 15);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  
i: Integer;
begin
  for 
i := Low(ColorNames) to High(ColorNames) do
    
ComboBox1.Items.Add(ColorNames[i]);
end;

 

printed from
www.swissdelphicenter.ch
developers knowledge base