//塗りつぶしを選択するコンボボックス
//テキストの左に模様見本を表示
procedure TForm1.FormCreate(Sender: TObject);
begin
//本来は設計時に追加してください。ここから..
with ComboBox1 do begin
Width :=150;
//オーナードローに
Style :=csOwnerDrawFixed;
ItemHeight :=20;
Items.Add('bsSolid');
Items.Add('bsClear');
Items.Add('bsHorizontal');
Items.Add('bsVertical');
Items.Add('bsFDiagonal');
Items.Add('bsBDiagonal');
Items.Add('bsCross');
Items.Add('bsDiagCross');
ItemIndex :=0;
end; //with ここまで
end;
procedure TForm1.ComboBox1DrawItem(Control: TWinControl; Index: Integer;
Rect: TRect; State: TOwnerDrawState);
var
CB :TComboBox;
begin
CB :=Control as TComboBox; //型キャスト
with CB.Canvas do begin
FillRect(Rect);
Pen.Color :=clBlack;
Brush.Color :=clGray;
case index of
0:Brush.Style :=bsSolid;
1:Brush.Style :=bsClear;
2:Brush.Style :=bsHorizontal;
3:Brush.Style :=bsVertical;
4:Brush.Style :=bsFDiagonal;
5:Brush.Style :=bsBDiagonal;
6:Brush.Style :=bsCross;
7:Brush.Style :=bsDiagCross;
end;
if (odSelected in State) or (odFocused in State) then
Canvas.Font.Color :=clWhite
else
Canvas.Font.Color :=clBlack;
//模様の四角形を描く
Rectangle(Rect.Left+2 ,Rect.Top+1 ,Rect.Left+30 ,Rect.Bottom-1);
//テキスト描画時には背景を透明に
Brush.Style :=bsClear;
//テキスト描画
Textout(Rect.Left+34 ,Rect.Top+2,CB.Items[Index]);
end; //with
end; |