2016-06-13 3 views
4

私はCoolTrayIconPopupMenuのプロジェクトを持っていて、無効なものはAutoPopupです。 私はPopupMenuの位置を決めて、ユーザーに表示したいと思います。 位置は問題ありませんが、ユーザーがクリックしたりESCボタンを押すとメニューが閉じることはありません。 Activeのようなプロパティが見つかりませんでした。このプロパティは、メニューを使用するかどうかに役立ちます。ここでdelphiでカスタム配置されたPopupMenuを閉じる方法は?

私はメニューを配置:

procedure TForm1.CoolTrayIcon1MouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
var 
    pnt: TPoint; yy:integer; 
begin 

GetCursorPos(pnt); 
yy:=pnt.y; yy:=yy-500; 

if (Button=mbRight) then begin 
    PopupMenu1.Popup(pnt.X, yy); 
end; 

end; 

私はそれが必要な場合は、メニューを閉じるに管理できる方法は?

+0

ユーザーがキーボードを使用してメニューを表示しようとするとどうなりますか? –

+0

右クリックでメニューを開く必要がありますが、どうすれば閉じることができますか? :D – roll

+0

コンテキストメニューは、ユーザーが要求したときに開く必要があります。おそらく、マウスの右ボタンをクリックします。あるいは、キーボードを使うこともできます。右手の左にあるキーCTRLキー。 –

答えて

8

これは、ここで議論されている既知の問題です:あなたは、次のようにPopup()への呼び出しをラップする必要が

PRB: Menus for Notification Icons Do Not Work Correctly

このコードで
SetForegroundWindow(Handle); 
PopupMenu1.Popup(pnt.X, yy); 
PostMessage(Handle, WM_NULL, 0, 0); 

Handleは、ウィンドウハンドルです通知アイコンに関連付けられたフォームの

+0

Cooool、ありがとう、それはそれで動作します。 – roll

+0

私にとってはうまくいきません。実際、メニューはEscキーで閉じられますが、メニューをポップアップした後、アプリケーションは完全に死んでしまいます。メインフォームには何もアクセスできません。私はトレイアイコンHWNDはプライベートなものであり、メインフォームのHWNDではないと言います。 –

+1

ここでうまく動作します。そして、これを行う他の投稿や他のコードの無数の例があります。だからあなたは何か間違ったことをしたか、あるいは欠けている重要な細部があると思います。 –

関連する問題