オーナー描画項目を描画する

提供: RAD Studio
移動先: 案内検索

コントロールの利用:インデックス への移動

オーナー描画コントロールをアプリケーションで描画または再描画しなければならないとき,オペレーティングシステムは,コントロールに表示されている項目ごとに項目を描画するイベントを生成します。対象となるコントロールによって,項目の描画イベントを項目の一部として受け取る場合があります。

オーナー描画コントロールの各項目を描画するには,このコントロールの項目を描画するイベントに対して,イベントハンドラを定義します。

一般に,オーナー描画イベントの名前は次のどちらかから始まります。

  • OnDrawOnDrawItemOnDrawCell など)
  • OnCustomDrawOnCustomDrawItem など)
  • OnAdvancedCustomDrawOnAdvancedCustomDrawItem など)

項目描画イベントは,描画する項目と描画領域の長方形をパラメータとして持っています。さらに,項目にフォーカスがあるかどうかなど,項目の状態を示すパラメータも持ちます。アプリケーションはイベントを処理して,指定の長方形に適切な項目を描画します。

たとえば次のコードは,タブにビットマップと文字列をどのように描画するかを示しています。このハンドラをリストボックスの OnDrawItem イベントとして定義します。

procedure TFMForm.DriveTabSetDrawTab(Sender: TObject; TabCanvas: TCanvas;
  R: TRect; Index: Integer; Selected: Boolean);
var
  Bitmap: TBitmap;
begin
  Bitmap := TBitmap(DriveTabSet.Tabs.Objects[Index]);
  with TabCanvas do
  begin
 	 Draw(R.Left, R.Top + 4, Bitmap);  { ビットマップを描画する }
 	 TextOut(R.Left + 2 + Bitmap.Width,  { キストの位置を決める }
   	 R.Top + 2, DriveTabSet.Tabs[Index]);  { テキストがビットマップの右に描画されるようにするビットマップ }
  end;
end;
void __fastcall TForm1::ListBox1DrawItem(TWinControl *Control, int Index,
  TRect &Rect, TOwnerDrawState State)
  TBitmap *Bitmap = (TBitmap *)ListBox1->Items->Objects[Index];
  ListBox1->Canvas->Draw(R.Left, R.Top + 2, Bitmap); // ビットマップを描画
  ListBox1->Canvas->TextOut(R.Left + Bitmap->Width + 2, R.Top + 2,
    ListBox1->Items->Strings[Index]);        // その右にテキストを書き込む
}