![]() |
![]() ![]() ![]() ![]() |
|
Проверить открыто ли контекстное менюDelphi , Компоненты и Классы , МенюПроверить открыто ли контекстное меню
Оформил: DeeCo
{
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;
Код, предоставленный ниже, проверяет, открыта ли контекстное меню или нет. Процедура Следующий шаг:
Проверка на то, открыто ли меню или нет, выполняется на основе двух условий:
Если оба условия В процедуре Этот код предоставляет работу-around для проблемы, связанной с использованием сообщения В статье описано решение проблемы проверки открытия контекстного меню в приложении Delphi с помощью сообщения WM_MENUSELECT и вызова API-вызовом TrackPopupMenuEx. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||