コンボボックスの項目のフォントや色をカスタマイズして表示するには、TComboBoxのDrawItemイベントを使用します。
コンボボックスOnDrawItemイベントは、Styleプロパティが「csOwnerDrawFixed」か「csOwnerDrawVariable」の場合にのみ発生します。
ComboBox1->Style = csOwnerDrawFixed;
サンプルコードです。
フォームにコンボボックス(TComboBox)を配置します。
フォームのコンストラクタで、コンボボックスの項目を設定します。
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
//OnDrawItem イベントは,Style プロパティが csOwnerDrawFixed か csOwnerDrawVariable の場合にのみ発生します。
ComboBox1->Style = csOwnerDrawFixed;
//コンボボックスの要素を設定する
ComboBox1->Items->Clear();
for (int i = 0; i < Screen->Fonts->Count; ++i)
{
ComboBox1->Items->Add(Screen->Fonts->Strings[i]);
}
}
コンボボックスのOnDrawItemイベントを追加します。
//オーナー描画コンボボックス内の項目を表示する必要がある場合に発生します。
void __fastcall TForm1::ComboBox1DrawItem(TWinControl *Control, int Index, TRect &Rect,
TOwnerDrawState State)
{
//フォントの色
//奇数番目の時は「赤」、偶数番目の時は「青」
switch (Index % 2) {
case 0:
ComboBox1->Canvas->Font->Color = clRed;
break;
case 1:
ComboBox1->Canvas->Font->Color = clBlue;
break;
}
//フォント名
ComboBox1->Canvas->Font->Name = ComboBox1->Items->Strings[Index];
ComboBox1->Canvas->FillRect(Rect);
ComboBox1->Canvas->TextOut(Rect.Left, Rect.Top, ComboBox1->Items->Strings[Index]);
}