いつもこのメーリングリストを参考にさせていただいております。
鈴木と言います。お知恵をお借りしたく投稿します。
現在、TTrayIconコンポーネントを使用したVCLアプリを作成しています。
TTrayIconの仕様らしく、アイコンをマウスで右クリックしたときにしかポップアップメニューを開くことができません。
マウスの左ボタンでもポップアップメニューを表示したいのですが、何か良い方法はないでしょうか。
現状では、TCustomTrayIconのソース(Vcl.ExtCtrls.pas)のポップアップメニューを表示する処理を真似て、OnMouseUpイベントハンドラで次の様に書いて動作させています。
procedure TMainFrm.TrayIcon1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
SetForegroundWindow(Application.Handle);
Application.ProcessMessages;
LClickPMenu.AutoPopup := False;
LClickPMenu.PopupComponent := Owner;
LClickPMenu.Popup(X,Y);
end
end;
TCustomTrayIconのソースコードでは、WM_SYSTEM_TRAY_MESSAGEとWM_RBUTTONUPメッセージを組み合わせて処理していました。
単純にTTrayIconコンポーネントに対して、マウスの左ボタンを離した時に、SendMessageなどで、右ボタンが離されたメッセージを送信すれば良いかと思ったのですが、Handleプロパティがないため、SendMessageを呼び出せません。また、TControlクラスの派生でもないのでPerformも使えませんでした。
このようなウィンドウハンドルを持たないコンポーネントへメッセージを送るのにはどのようにするのが良いでしょうか。
一応目的の動作は達成しているのですが、何かもっと簡単な方法があるのでは無いかと思い質問させていただきました。
何か良いアイディアがありましたらよろしくお願いします。
[開発環境]
Delphi 10 Seatle
Windows 10 Pro 64bit
MLホームページ:
http://www.freeml.com/delphi-users
----------------------------------------------------------------------
■即戦力人材と企業をつなぐ転職サイト■
ビズリーチに【無料登録】すると・・・
・一流企業の求人情報を閲覧できます
・ヘッドハンターからスカウトが届きます
ビズリーチ【無料登録】ページはこちら
http://ad.freeml.com/cgi-bin/sa.cgi?id=pFXq2
------------------------------------------------------[freeml byGMO]--