Mega Code Archive

 
Categories / Delphi / Examples
 

Is popup menu open

Is popup menu 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 message: TWMMENUSELECT); message WM_MENUSELECT; procedure TForm1.WMMENUSELECT(var message: TWMMENUSELECT); begin inherited; IsMenuOpen := not ((message.MenuFlag and $FFFF > 0) and (message.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