ポップアップメニューの外でマウスアップでポップアップメニューを消すには?


めがね屋  2008-08-29 08:45:39  No: 31699

お世話になります。フォームのマウスダウンイベントでポップアップメニューを表示させ、ポップアップメニューの外でマウスアップしたときにポップアップメニューを消す方法教えてください。


忘れてる  2008-08-31 03:42:02  No: 31700

真琴:「MouseDownでPopupMenuを出した時は MouseUpイベントが起きないの?」
春子:「そうね、だから MouseUpイベントで消せないというコトかな?」
真琴:「ハルコさん、じゃぁ、MouseHookしたらウマクいくンじゃない?」
春子:「まぁ、その手もあるけど…、それでやってみたら? マコト」
真琴:「それなら…こんなカンジでどうかなぁ?」

var
  HookHandle: HHOOK;

function MouseHook(Code: Integer; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall;
begin
  if (Code >= 0)and(Code = HC_ACTION) then begin
   if {(WParam = WM_LBUTTONUP)or}(WParam = WM_RBUTTONUP) then begin
    if HookHandle <> 0 then begin
     UnHookWindowsHookEx(HookHandle);
     HookHandle := 0;
     keybd_event(VK_ESCAPE, 0, 0, 0);
     keybd_event(VK_ESCAPE, 0, KEYEVENTF_KEYUP, 0);
    end;
   end;
  end;
  result := CallNextHookEx(HookHandle, Code, WParam, LParam);
end;

procedure TForm1.WmRButtonDown(var Msg: TMessage);
var P: TPoint;
begin
  inherited;
  if HookHandle = 0 then
   HookHandle := SetWindowsHookEx(WH_MOUSE, MouseHook, 0, GetCurrentThreadID);
  P := ClientToScreen(Point(Msg.LparamLo, Msg.LparamHi));
  PopupMenu1.Popup(P.X, P.Y);
end;

真琴:「うん、OK、RButtonDownでPopupして、外でのMouseUpでメニューが消えるヨ」
春子:「マコト、忘れてる、これだけじゃぁメニュー項目を選択しても無効になっちゃうでしょ?」
真琴:「あっ、そっか、MouseUpした場所の判定を忘れてた^^;」
春子:「そうよ、それがなくちゃね、…話違うけど、あれも忘れてるよ」
真琴:「え? ナンだっけ…」
春子:「もう一度バンの整備してってマサルさんに念を押さなきゃ、エンストしないように」
真琴:「でも、アタシにはドコが悪いか分からないし、やっぱり途中で止まると思うけど^^;」
春子:「それでも行くの? ディズニーランドへ」
真琴:「クルマを押すのも夏のイイ思い出になるよ」
春子:「アタシはそんな思い出はお断り、ユウコちゃんだってそうよ」
真琴:「だから、このコトはユウコには内緒、言わないでネ? ハルコさん」
春子:「言わないけど、アタシはゼッタイ行かないからね」
真琴:「でも、結局ハルコさんも一緒に行くコトになるンだから^^;」


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

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






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