Как вывести окно на передний план после события DDE? - PullRequest
2 голосов
/ 07 марта 2009

При событии DDE моя программа загружает файл и должна появиться на переднем плане. Я использовал

show;

Кажется, что он работает так же, как тогда, когда я спрятал окно.

Итак, я добавил

bringtofront;

Опять же, это работало, если оно было скрыто, закрыто, свернуто или в области значков, но не было, если оно было открыто просто под другим окном.

Я даже пробовал какие-то хакерские штуки вроде

windowstate:=wsminimized;
windowstate:=wsnormal;

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

Ответы [ 2 ]

2 голосов
/ 07 марта 2009

Вы пробовали SetForegroundWindow и / или SetActiveWindow? Также см. MSDN info на эту тему.

1 голос
/ 07 марта 2009

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

Итак, если вы сами являетесь приложением переднего плана, вы можете установить SetForegroundWindow в другое приложение, и все будет красиво. Если вы не используете приложение на переднем плане, скорее всего, единственное, что может произойти, это то, что кнопка панели задач начнет мигать.

Просто, чтобы добавить некоторую путаницу, точное поведение зависит от версии Windows, поэтому то, что происходит, зависит от того, какой тип Windows вы используете - они долго возились с этим: -).

...