ポップアップを消すには?

解決


ポッパー  2005-11-11 19:22:48  No: 18618

アイコントレイにアイコンを置くコンポーネント
を使っています(Delphi Q&A 150選 より)

起動時フォームを開かず、アイコン上で操作します。
左クリックでフォームを表示、右クリックで設定、終了の選択用
ポップアップを表示しています。

問題は、ポップアップを表示し、設定、終了のどちらかを
選択しなければポップアップが閉じないのですが
消えるようにするにはどうすればよいでしょうか?

消えるタイミングを一定時間後とするにするには、
タイマーをつかって消すしかないのでしょうが、
他のプログラムに操作が移動した場合に消すには
どうすればよいのか教えてください。


ん?  2005-11-11 19:38:27  No: 18619

SetForegroundWindow(Application.Handle);
とかかな?


ポッパー  2005-11-11 19:54:45  No: 18620

使い方がわからないので
SetForegroundWindow  を調べてみました。
これって、フォーカスを最前列にもってくるだけの
機能じゃないでしょうか?
FormStyle = faStayOnTop と同じ機能ではありませんか?

アイコンをクリックして、ポップアップメニューを表示すると
そのポップアップの選択項目を選択しないと
ポップアップメニューの表示が消えないので
他のアプリがアクティブになった場合に、このポップアップが
自動的に消えるようにする方法が知りたいのです。

PopupMenu: TPopupMenu を使用しています。
PopupMenu.OnDeActive イベントがあれば
問題ないと思うのですが、見当たりません。


ん?  2005-11-11 22:01:44  No: 18621

メニューをポップアップしている直前に入れてください。

必要部分だけ抜粋すると、こんな感じ
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 は常に最前面です。


ポッパー  2005-11-11 22:37:24  No: 18622

フォームの Create イベントのところに入れていました。

さて、
元が、Delphi3 Q&A 150選 のコンポーネントなもんで
直前というわけにはいきませんが
RBtnPopupMenu イベントに入れてやると消えるようになりました。
どうも、ご親切にありがとうございました。

また、何かありましたら、よろしくお願い申します。


ポッパー  2005-11-11 22:38:08  No: 18623

解決しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加