Сворачивание приложения Delphi с помощью всплывающего меню в реальном времени

StackOverflow https://stackoverflow.com/questions/1862597

  •  16-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь запустить это по таймеру:

Application.Minimize;
ShowWindow( Application.handle, SW_HIDE );

Это было в коде всегда, и мы только что обнаружили, что оно не работает, когда у вас активно всплывающее меню, оно не сворачивает родительское окно MDI.

Я думаю, если я смогу закрыть всплывающее меню перед запуском этого кода, тогда все будет в порядке.Проблема в том, что этот код находится в родительском элементе MDI, и я понятия не имею, где находится текущее всплывающее меню.Не имеет значения, является ли это частью панели инструментов другой формы, панели инструментов этой формы, результатом щелчка правой кнопкой мыши или этой, казалось бы, бессмысленной клавиши рядом с пробелом.

Итак, есть ли способ скрыть активное всплывающее меню во всей моей программе?

Кроме того, если есть кусок кода получше, чем тот, который я использую для минимизации, который позволит обойти эту проблему, это тоже будет отличная информация.

Это было полезно?

Решение

Чтобы закрыть всплывающее меню, вы можете использовать

  if GetCapture <> 0 then
    SendMessage(GetCapture, WM_CANCELMODE, 0, 0);

в своем коде, прежде чем пытаться свернуть форму.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top