掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
コンボボックスでクリックをキャッチするには? (ID:22197)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
完全な回答ではありませんがレスがつかないようなので、 COMBOLBOXをサブクラス化することで、クリックまではキャッチできます。 しかい ポップアップ を表示するとリストがロールアップしてしまうので、 そこから先が解りません。 type TForm1 = class(TForm) ComboBox1: TComboBox; procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private FComboDefaultProc: TWndMethod; hLBox : HWND; FLBoxDefaultProc : FARPROC; FLBoxProc : FARPROC; procedure ComboProc(var Message: TMessage); procedure ComboLBoxProc(var Message: TMessage); public end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); begin FComboDefaultProc := ComboBox1.WindowProc; ComboBox1.WindowProc:= ComboProc; end; procedure TForm1.FormDestroy(Sender: TObject); begin if (hLBox <> 0) then begin if Assigned(FLBoxDefaultProc) then SetWindowLong(hLBox, GWL_WNDPROC, Longint(FLBoxDefaultProc)); if Assigned(FLBoxProc) then FreeObjectInstance(FLBoxProc); end; ComboBox1.WindowProc:= FComboDefaultProc; end; procedure TForm1.ComboProc(var Message: TMessage); begin // COMBOLBOX をサブクラス化 if (Message.Msg = WM_CTLCOLORLISTBOX) and (hLBox = 0) then begin hLBox := Message.LParam; FLBoxProc := MakeObjectInstance(ComboLBoxProc); FLBoxDefaultProc:= FarProc(SetWindowLong(hLBox, GWL_WNDPROC, Longint(FLBoxProc)); end; FComboDefaultProc(Message); end; procedure TForm1.ComboLBoxProc(var Message: TMessage); begin with Message do begin case Msg of WM_CONTEXTMENU: { 目的の処理 }; WM_RBUTTONDOWN: { 目的の処理 }; WM_RBUTTONUP : { 目的の処理 }; end; Result:= CallWindowProc(FLBoxDefaultProc, hLBox, Msg, WParam, LParam); end; end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.