2015-03-12 3 views
0

Я поддерживаю настольное приложение Windows, которое постоянно удаляет фокус из его видимых окон (а также из других приложений на рабочем столе). Это явно ошибка, и я хочу ее исправить, но приложение устарело (Borland C++ Builder 6), а его код очень обширен. Я пытаюсь проследить FormActivate и FormDeactivate событиях, но каждый из них происходит только один раз: FormActivate после показа и FormDeactivate при закрытии окна.отслеживание фокуса и потеря формы в приложении VCL

Возможно ли программно отслеживать изменения фокуса в формах VCL?

+0

Иногда очень неприятная ошибка в очень старой программе - это просто то, что нужно, чтобы мотивировать силы, которые нужно выкинуть или полностью переделать, но вы, вероятно, не сможете это использовать. Вы посмотрели на «обходные пути» или такие инструменты, которые позволяют вам перехватывать вызовы Windows, введя код для повторного маршрута? – Les

+0

Спасибо. (1) Не было бы ничего, что я хотел бы больше, чем выбросить этот старый код, но теперь он безнадежен (я борюсь со следующим выпуском), но скоро я это сделаю. (2) Объемы, которые я не знал, похоже, выполняют эту работу, но я боюсь, что денег и времени недостаточно (чтобы заставить его сотрудничать с базой VCL?). Я надеялся, что будет гораздо более простой трюк. Так что я собираюсь попытаться «зацепить» «WindowProc» сейчас ... – Wolf

ответ

0

Событие TForm::OnActivate инициируется, когда форма изначально показана, и когда фокус перемещен в другую форму в том же процессе приложения, а затем обратно.

Событие TForm::OnDeactivate запускается, когда форма скрыта, и когда фокус перемещается в другую форму в рамках одного и того же процесса подачи заявки.

Когда фокус переходит на другой процесс, а затем обратно в ваш процесс, события TForm::OnActivate и TForm::OnDeactivate НЕ запускаются. Вместо этого запускаются события TApplication::OnActivate и TApplication::OnDeactivate.

+0

Спасибо за ответ. * 'TApplication :: OnActivate и TApplication :: запускаются события OnDeactivate' * - да, в некоторых случаях. Но если фокус изменяется в одном приложении, это приводит к тому, что WM_ACTIVATE передается в 'WindowProc', который я обнаружил, подключив событие с тем же именем. – Wolf