チェックボックスのラベルではなく、ボックス部分の色を変えたいんですが、どうすればよいのでしょうか??
編集 削除多分自前で作ったほうがいいと思います。
自前で作っても簡単にできると思いますよ
ピーマコ : 「これで CheckBoxの色変えられますよ♪」
なかざわ : 「ほ〜… で、これをどっから呼び出すねん」
procedure ColorCheckBox(Sender: TObject);
var
DC : HDC;
BR : HBRUSH;
PN : HPEN;
CL : COLORREF;
begin
with TCheckBox(Sender) do begin
DC := GetDC(Handle);
if Checked then CL := $00ffff else CL := $ffff00; // BOX内の背景色
BR := CreateSolidBrush(CL);
PN := CreatePen(PS_SOLID, 1, $cc00ee); // チェックマークの色
SelectObject(DC, BR);
SelectObject(DC, PN);
FillRect(DC, Rect(2, 4, 11, 13), BR);
if Checked then begin
MoveToEx(DC, 3, 7, nil);
LineTo(DC, 5, 9); LineTo(DC, 9, 5);
LineTo(DC, 9, 7); LineTo(DC, 5, 11); LineTo(DC, 3, 9);
LineTo(DC, 3, 8); LineTo(DC, 5, 10); LineTo(DC, 9, 6);
end;
DeleteObject(BR);
DeleteObject(PN);
ReleaseDC(Handle, DC);
end;
end;
ピーマコ : 「CheckBoxの OnMouseUpイベントがいいと思いますけど。ほらうまくいくでしょ♪」
オジャマ : 「うわぁ〜、黄色の背景でピンクのチェックマークですか〜可愛いですけどハデですよね(^^ゞ」
ピーマコ : 「ハハハ…わたしのシュミですぅ」
procedure TForm1.CheckBox1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
ColorCheckBox(CheckBox1);
end;
オジャマ : 「あれ?フォーカスが別のコントロールに移ったら CheckBoxの色が元に戻っちゃいましたよ」
ピーマコ : 「ハハハ(^^;…それもわたしのシュミで…(^^;;…」
なかざわ : 「なにが"わたしのシュミ"や、サブクラス使わんかい」
ピーマコ : 「えっサブクラス? ナンのことでしょ?」
オジャマ : 「MESSAGEを横取りするんですよね」
なかざわ : 「そやな。CheckBoxをサブクラス化して、WM_PAINT、WM_LBUTTONUPのメッセージが来たら、デフォルト処理の後で ColorCheckBox(CheckBox1); 呼べばエエんよ」
procedure TForm1.FormCreate(Sender: TObject);
begin
OrgnProc1 := CheckBox1.WindowProc;
CheckBox1.WindowProc := ChkBoxScWndProc1;
end;
procedure TForm1.ChkBoxScWndProc1(var Msg: TMessage);
begin
OrgnProc1(Msg);
case Msg.Msg of
WM_PAINT, WM_LBUTTONDOWN, WM_LBUTTONUP : ColorCheckBox(CheckBox1);
end;
end;
ピーマコ : 「MESSAGEの横取りですか〜、ナルホド…そうしてみたら色が元に戻ったりしないですねぇ」
なかざわ : 「…オカシイな〜?」
オジャマ : 「ン?ナカザワさん、何かさがしものですか〜?」
なかざわ : 「ここに置いといたケーキどこいったんやろ、オジャマ知らんか〜?」
ピーマコ : 「あっそれワタシが横取りしちゃいましたぁ。ゴチソウさまですぅ♪」
なかざわ : 「ナンやて!おまえが犯人か」
ピーマコ : 「犯人だなんて、そんなぁ…、それ食べてナカザワさん太ったらいけないからぁ…、ワタシが犠牲になってあげたんですよぉ〜だから感謝してくださいね♪」
なかざわ : 「……(+_+)」