[C++Builder]コンボボックスの項目のフォントや色を変更する

コンボボックスの項目のフォントや色をカスタマイズして表示するには、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]);
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください