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;

 

Share this article!

Follow us!

Find more helpful articles: