Сворачивание приложения Delphi с помощью всплывающего меню в реальном времени
Вопрос
Я пытаюсь запустить это по таймеру:
Application.Minimize;
ShowWindow( Application.handle, SW_HIDE );
Это было в коде всегда, и мы только что обнаружили, что оно не работает, когда у вас активно всплывающее меню, оно не сворачивает родительское окно MDI.
Я думаю, если я смогу закрыть всплывающее меню перед запуском этого кода, тогда все будет в порядке.Проблема в том, что этот код находится в родительском элементе MDI, и я понятия не имею, где находится текущее всплывающее меню.Не имеет значения, является ли это частью панели инструментов другой формы, панели инструментов этой формы, результатом щелчка правой кнопкой мыши или этой, казалось бы, бессмысленной клавиши рядом с пробелом.
Итак, есть ли способ скрыть активное всплывающее меню во всей моей программе?
Кроме того, если есть кусок кода получше, чем тот, который я использую для минимизации, который позволит обойти эту проблему, это тоже будет отличная информация.
Решение
Чтобы закрыть всплывающее меню, вы можете использовать
if GetCapture <> 0 then
SendMessage(GetCapture, WM_CANCELMODE, 0, 0);
в своем коде, прежде чем пытаться свернуть форму.