Почему установка Params.WndParent позволяет вам Alt-Tab для приложения activex в IE - PullRequest
1 голос
/ 10 марта 2011

Я задал этот вопрос " Всплывающее диалоговое окно ActiveX скрывает IE из списка задач " и получил ответ, но не объяснение.

В основном мне пришлось установить Params.WndParent, новопрос у меня сейчас почему?Почему это решает проблему (потому что это делает)?

Ответы [ 2 ]

2 голосов
/ 10 марта 2011

В официальной документации о том, какие окна появляются на панели задач, содержится ответ на этот вопрос:

Оболочка создает кнопку на панели задач всякий раз, когда приложение создает окноэто не принадлежит.Чтобы убедиться, что кнопка окна находится на панели задач, создайте неизвестное окно с расширенным стилем WS_EX_APPWINDOW .Чтобы кнопка окна не помещалась на панель задач, создайте неизвестное окно с расширенным стилем WS_EX_TOOLWINDOW .В качестве альтернативы вы можете создать скрытое окно и сделать это скрытое окно владельцем вашего видимого окна.

Однако указанные там правила немного непрозрачны. Раймонд Чен резюмирует правила следующим образом:

Существуют некоторые основные правила, по которым окна переходят на панель задач.Вкратце:

  • Если установлен расширенный стиль WS_EX_APPWINDOW, то он будет отображаться (когда он виден).
  • Если окно является неиспользуемым окном верхнего уровня, то оно будет отображаться(когда виден).
  • В противном случае он не отображается.

Установка WndParent в CreateParams в связанном вопросе означает, что окно больше не является верхнимокно высокого уровня становится собственным окном верхнего уровня.Спасибо за Сертака и Роба за то, что поправили меня.

0 голосов
/ 09 июля 2011

Под капотом метода VCL Delphi ShowModal перечисляет все видимые окна потоков и отключает все из них (перед показом всплывающего окна модального окна).IE6 ActiveX контейнер не делает ничего, чтобы предотвратить подобные манипуляции с собственными окнами.Элементы управления ActiveX очень небезопасны в IE6, они делают то, что хотят.Таким образом, мы получаем только несколько отключенных окон IE и одно активное всплывающее окно на экране.Но если окно отключено, его нельзя выбрать в списке задач.Также ваше всплывающее окно имеет свойство bsToolwindow (или WS_EX_TOOLWINDOW, изначально в Windows API), которое говорит, что оно не должно быть видно в списке задач ( Alt - Tab переключение, панель задач Explorer).В результате у нас вообще нет окон из IE, которые можно активировать с помощью Alt - Tab .

Это относится только к окнам, у которых нет родителя.,Для элементов управления Delphi ActiveX формы по умолчанию не имеют родителя (кроме основной формы).Когда вы назначаете родителя для своей Формы и не используете метод ShowModal (в используемом методе answer Show) вы предотвращаете эту ситуацию.В этом случае окна IE не изменяют свои исходные свойства.

...