掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VBでいうとこのマウスアウトイベントを実現するためには? (ID:17989)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Panel上のコンポーネントに対するCM_MOUSEENTER,CM_MOUSELEAVE メッセージは、PanelのWndProcで処理する必要があるみたいですね。 オリジナルのPanelコンポーネントを作る以外に、次のような方法 もあります。 type TForm1 = class(TForm) Panel1: TPanel; CheckBox1: TCheckBox; // <= Panel1上に配置 procedure FormCreate(Sender: TObject); private { Private 宣言 } FOrgPanelWndProc : TWndMethod; procedure PanelWndProc(var Message : TMessage); public { Public 宣言 } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin // Panel1標準のWindowProc(=WndProc)を保存する FOrgPanelWndProc := Panel1.WindowProc; // Panel1標準のWindowProc(=WndProc)をPanelWndProcに置き換える Panel1.WindowProc := PanelWndProc; end; procedure TForm1.PanelWndProc(var Message : TMessage); var Sender : TObject; begin case Message.Msg of CM_MOUSEENTER: begin Sender := TObject(Message.LParam); if Sender = CheckBox1 then begin // マウスカーソルがCheckBox1に入ったときの処理 // ↓とりあえず、フォントを太字に... if not (fsBold in CheckBox1.Font.Style) then CheckBox1.Font.Style := [fsBold]; end; end; CM_MOUSELEAVE: begin Sender := TObject(Message.LParam); if Sender = CheckBox1 then begin // マウスカーソルがCheckBox1から出たときの処理 // ↓とりあえず、フォントを標準に... if fsBold in CheckBox1.Font.Style then CheckBox1.Font.Style := []; end; end end; // 保存しておいた標準のWndProcを呼び出す。 FOrgPanelWndProc(Message); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.