Вопросы и ответы

Дата: 2000-06-02 00:00:00

Иногда всплывающее меню моего приложения system tray не исчезает когда оно теряет фокус. Как закрыть его?

При показе всплывающего меню установите foreground window, затем пошлите сообщение WM_NULL после показа меню.

procedure TForm1.WndProc(var Msg : TMessage);
var
p : TPoint;
begin
case Msg.Msg of
    WM_USER + 1:
    case Msg.lParam of
    WM_RBUTTONDOWN: begin
    SetForegroundWindow(Handle);
    GetCursorPos(p);
    PopupMenu1.Popup(p.x, p.y);
    PostMessage(Handle, WM_NULL, 0, 0);
    end;
    end;
end;
inherited;
end;


Источник: Дельфи. Вокруг да около.