2009-03-07 8 views
2

В случае DDE моя программа загружает файл и должна появиться на переднем плане. я использовалКак мне принести свое окно на фронт после события DDE?

show; 

Это только кажется, работает, как тогда, когда я скрыл окно.

Так я добавил

bringtofront; 

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

Я даже пробовал некоторые Hacky такие вещи, как

windowstate:=wsminimized; 
windowstate:=wsnormal; 

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

ответ

1

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

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

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

+0

Программа, отправляющая событие DDE, должна сотрудничать, вызывая AllowSetForegroundWindow. Я ожидаю, что Explorer сделает это, но другие программы, вероятно, пренебрегают этой детальностью. –

+0

Это тоже хорошо. Мне действительно не нравится, когда другие программы захватывают фокус. – Kibbee