チェックボックスのボックスの色替え


ほとちゃん  2004-06-11 18:49:03  No: 9388  IP: [192.*.*.*]

チェックボックスのラベルではなく、ボックス部分の色を変えたいんですが、どうすればよいのでしょうか??

編集    削除
LupinⅢ  URL  2004-06-11 21:51:02  No: 9389  IP: [192.*.*.*]

多分自前で作ったほうがいいと思います。
自前で作っても簡単にできると思いますよ

編集    削除
HPW  2004-06-12 19:53:18  No: 9390  IP: [192.*.*.*]

ピーマコ : 「これで 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の横取りですか〜、ナルホド…そうしてみたら色が元に戻ったりしないですねぇ」
なかざわ : 「…オカシイな〜?」
オジャマ : 「ン?ナカザワさん、何かさがしものですか〜?」
なかざわ : 「ここに置いといたケーキどこいったんやろ、オジャマ知らんか〜?」
ピーマコ : 「あっそれワタシが横取りしちゃいましたぁ。ゴチソウさまですぅ♪」
なかざわ : 「ナンやて!おまえが犯人か」
ピーマコ : 「犯人だなんて、そんなぁ…、それ食べてナカザワさん太ったらいけないからぁ…、ワタシが犠牲になってあげたんですよぉ〜だから感謝してくださいね♪」
なかざわ : 「……(+_+)」

編集    削除