Zunächst deklarieren wir ein (globales) Array für TColor-Werte und
füllen es mit anzuzeigenden Farben:
// Array mit Farbwerten deklarieren
// und initialisieren:
TColor ComboColors[] = {
clBlack, clMaroon, clGreen, clOlive,
clNavy, clPurple, clTeal, clGray,
clSilver, clRed, clLime, clYellow,
clBlue, clFuchsia, clAqua, clWhite };
Damit die ComboBox für jede der 16 Farben einen Eintrag erzeugt, füllen
wir sie z.B. im OnShow-Eventhandler des Formulars mit 16 leeren Items:
//---------------------------------------------------------------------------
// OnShow-Eventhandler des Formulars
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormShow(TObject *Sender)
{
// ComboBox mit 16 leeren Einträgen füllen
for(int ilIndex = 0; ilIndex < 16; ilIndex++)
ComboBox1->Items->Add("");
// ComboBox1->ItemIndex = 0;
// ComboBox1Click(NULL);
}
Nun muss eine eigene Routine dafür sorgen, dass die ComboBox-Einträge als farbige Rechtecke
erscheinen. Diese wird in der Behandlungsroutine des OnDrawItem-Ereignisses der ComboBox
untergebracht:
//---------------------------------------------------------------------------
// OnDrawItem-Eventhandler der ComboBox
//---------------------------------------------------------------------------
void __fastcall TfrmMain::ComboBox1DrawItem(TWinControl *Control,
int Index, TRect &Rect, TOwnerDrawState State)
{
// Sender-Zeiger casten:
TComboBox* pComboBox = dynamic_cast<TComboBox*>(Control);
if(pComboBox)
{
TRect rPaintRect;
rPaintRect.Top = Rect.Top+2;
rPaintRect.Bottom = Rect.Bottom-2;
rPaintRect.Left = Rect.Left+2;
rPaintRect.Right = Rect.Right-2;
// Markierungsrechteck füllen:
pComboBox -> Canvas -> FillRect(Rect);
// Umriss der Farb-Rechtecke zeichnen:
pComboBox -> Canvas -> Pen ->Color = clWindowText;
pComboBox -> Canvas -> Rectangle(rPaintRect.Left, rPaintRect.Top,
rPaintRect.Right, rPaintRect.Bottom);
// Farbiges Rechteck ausgeben:
pComboBox -> Canvas -> Brush ->Color = ComboColors[Index];
InflateRect(&rPaintRect, -1, -1);
pComboBox -> Canvas -> FillRect(rPaintRect);
}
}
Die in der ComboBox ausgewählte Farbe kann nun mit Hilfe der Anweisung
ComboColors[ComboBox1->ItemIndex] ausgelesen werden:
//---------------------------------------------------------------------------
// OnClick-Eventhandler der ComboBox
//---------------------------------------------------------------------------
void __fastcall TfrmMain::ComboBox1Click(TObject *Sender)
{
// Dem Shape neue Farbe zuweisen:
if(ComboBox1->ItemIndex >= 0)
Shape1->Brush->Color = ComboColors[ComboBox1->ItemIndex];
}
//---------------------------------------------------------------------------
|