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.
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.
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
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().