アイコントレイにアイコンを置くコンポーネント
を使っています(Delphi Q&A 150選 より)
起動時フォームを開かず、アイコン上で操作します。
左クリックでフォームを表示、右クリックで設定、終了の選択用
ポップアップを表示しています。
問題は、ポップアップを表示し、設定、終了のどちらかを
選択しなければポップアップが閉じないのですが
消えるようにするにはどうすればよいでしょうか?
消えるタイミングを一定時間後とするにするには、
タイマーをつかって消すしかないのでしょうが、
他のプログラムに操作が移動した場合に消すには
どうすればよいのか教えてください。
SetForegroundWindow(Application.Handle);
とかかな?
使い方がわからないので
SetForegroundWindow を調べてみました。
これって、フォーカスを最前列にもってくるだけの
機能じゃないでしょうか?
FormStyle = faStayOnTop と同じ機能ではありませんか?
アイコンをクリックして、ポップアップメニューを表示すると
そのポップアップの選択項目を選択しないと
ポップアップメニューの表示が消えないので
他のアプリがアクティブになった場合に、このポップアップが
自動的に消えるようにする方法が知りたいのです。
PopupMenu: TPopupMenu を使用しています。
PopupMenu.OnDeActive イベントがあれば
問題ないと思うのですが、見当たりません。
メニューをポップアップしている直前に入れてください。
必要部分だけ抜粋すると、こんな感じ
var
cursorpos: TPoint;
begin
GetCursorPos(cursorpos);
SetForegroundWindow(Application.Handle);
//こっちだったかも
//SetForegroundWindow(Form1.Handle);
Application.ProcessMessages;
PopupMenu.Popup(cursorpos.X, cursorpos.Y);
end;
これで、自動で消えます。
ちなみに、SetForegroundWindowは、前面に出すだけで(Win2000以降、動作が変更されましたが)、
FormStyle = faStayOnTop とは、まったく異なります。
faStayOnTop は常に最前面です。
フォームの Create イベントのところに入れていました。
さて、
元が、Delphi3 Q&A 150選 のコンポーネントなもんで
直前というわけにはいきませんが
RBtnPopupMenu イベントに入れてやると消えるようになりました。
どうも、ご親切にありがとうございました。
また、何かありましたら、よろしくお願い申します。
解決しました。
ツイート | ![]() |