Как вывести окно на передний план после события DDE?
Вопрос
В случае DDE моя программа загружает файл и должна появиться на переднем плане. Я использовал
show;
Кажется, это работает только тогда, когда я спрятал окно.
Итак, я добавил
bringtofront;
Опять же, это сработало, если оно было скрыто, закрыто, свернуто или в области значков, но не было, если оно было открыто просто под другим окном.
Я даже попробовал некоторые хакерские штуки вроде
windowstate:=wsminimized;
windowstate:=wsnormal;
чтобы попытаться заставить его показать, но безрезультатно. Я знаю, что код работает, поскольку у меня есть распечатки по обе стороны этого блока, и нет никаких условных выражений, в которых он мог бы застрять.
Решение
Вы пробовали SetForegroundWindow и / или SetActiveWindow? См. Также информацию MSDN по этой теме.
Другие советы
SetForegroundWindow не всегда будет работать. На самом деле, в наши дни это вряд ли сработает, потому что приложения не должны захватывать фокус, они могут только отдать его. MS в течение лет пыталась предотвратить кражу приложениями фокуса ввода. Прочитайте комментарии к этой записи блога от Раймонда Чена для некоторой истории.
Итак, если вы сами являетесь приложением переднего плана, вы можете установить SetForegroundWindow в другое приложение, и все будет замечательно. Если вы не используете приложение на переднем плане, вероятнее всего, единственное, что может произойти, - кнопка панели задач начнет мигать.
Просто, чтобы добавить некоторую путаницу, точное поведение зависит от версии Windows, поэтому то, что происходит, зависит от того, какой тип Windows вы используете - они долго возились с этим: -). р>