{
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);
begininherited;
IsMenuOpen := not ((msg.MenuFlag and $FFFF > 0) and
(msg.Menu = 0));
end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
beginif Button = mbRight thenwith ClientToScreen(Point(X, Y)) do
TrackPopupMenuEx(PopupMenu1.Handle, TPM_LEFTALIGN, X, Y,
Self.Handle, nil);
end;
Если Вас заинтересовала или понравилась информация по разработке на Delph - "Проверить открыто ли контекстное меню", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу: Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!