Mega Code Archive

 
Categories / Delphi / VCL
 

Check if a PopUp Menu is open

Title: check if a PopUp Menu is open? { Using the WM_MENUSELECT message of the form won t work to check if the popup is open. Simply because the parent of the popup is not the form (check the popup method of TPopupMenu). A workaround is to use the api call yourself : } type TForm1 = class(TForm) {...} procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private IsMenuOpen: Boolean; procedure WMMENUSELECT(var msg: TWMMENUSELECT); message WM_MENUSELECT; end; {...} implementation {...} procedure TForm1.WMMENUSELECT(var msg: TWMMENUSELECT); begin inherited; IsMenuOpen := not ((msg.MenuFlag and $FFFF 0) and (msg.Menu = 0)); end; procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if Button = mbRight then with ClientToScreen(Point(X, Y)) do TrackPopupMenuEx(PopupMenu1.Handle, TPM_LEFTALIGN, X, Y, Self.Handle, nil); end;