Wykrycie zamknięcia popmenu

0

Jak wykryć zamknięcie popmenu i odpowiednio na to zdarzenie zareagować.

Może jest jakiś komunikat od tego, bo raczej to nie możliwe że coś co się tworzy nie da się wykryć zmknięcia.

0

Mam taki pomysł:

globalnie zmienną:

var
  PMenuClose: boolean;

PopupMenu ma zdarzenie OnPopup..
W nim:

procedure TForm1.PopupMenu7Popup(Sender: TObject);
begin
  PMenuClose:=True;
end;

i później w zdarzeniach aplikacji OnKeyPress, OnMouseDown trzeba wykryć zdarzenia kliknięcia myszki i wciśnięcia klawiszy Esc, Enter i Alt (one zamykają PopupMenu).

Tą procedurę wrzuć do OnKeyPress i OnMouseDown i poprzekazuj parametry

procedure jakas(parametry);
begin
  if (PMenuClose) and (// i tu naciśnięty jeden z klawiszy klawiatury lub myszki) then begin
  //tu masz jakieś polecenia, które się wykonają jak się zamknie
  PMenuClose:=false;
end;

To tylko taki pomysł... Oczywiście teorytyczny

Pzdr

0

Też z tym problemem walczyłem i:<BR>
Teoretycznie można wykorzystać komunikaty WM_ENTERMENULOOP i WM_EXITMENULOOP ale było by to zbyt "łatwe" i trzeba kombinować. Właściwie nie wiem dlaczego TPopupMenu "zjada te komunikaty" ale można to ominąć wywołując menu za pomocą funkcji TrackPopupMenuEx(...):

//dla TForm1
   procedure WMEnterMenuLoop(var Msg: TWMEnterMenuLoop);message WM_ENTERMENULOOP;
   procedure WMExitMenuLoop(var Msg: TWMExitMenuLoop);message WM_EXITMENULOOP;
//...
procedure TForm1.WMEnterMenuLoop(var Msg: TWMEnterMenuLoop);
begin
  if Msg.IsTrackPopupMenu then
    Caption:='Entered Popup Menu'
  else
    Caption:='Entered Main Menu';
end;

procedure TForm1.WMExitMenuLoop(var Msg: TWMExitMenuLoop);
begin
  if Msg.IsTrackPopupMenu then
    Caption:='Exited Popup Menu'
  else
    Caption:='Exited Main Menu';
end;

//"gdzieś nie wiadomo gdzie" -żartuje, można rozważyć OnContextPopup
TrackPopupMenuEx(PopupMenu1.Handle,0,Mouse.CursorPos.X,Mouse.CursorPos.Y,Handle,nil);

Uff, teraz kominikaty są wywoływane. Może komuś się przyda. na pewno warto zerknać do kodu TPopupMenu.Popup().

1 użytkowników online, w tym zalogowanych: 0, gości: 1