Как сделать так, чтобы форма всегда была наверху, даже если Windows 7 Flip 3D активирована

Я создаю приложение, которое должно отображать определенную форму всегда сверху (это запрос клиента), пока я использую SetWindowPos со значением HWND_TOPMOST, и это работает нормально, но когда функция Windows 7 Flip 3D активирована мое приложение не остается в топе.

Windows 7 Flip 3D

введите здесь описание изображения

Вопрос в том, как моя форма может оставаться поверх всех остальных окон, даже если Windows 7 Flip 3D активирован?


person Salvador    schedule 06.02.2012    source источник
comment
Любой взлом, который вы сделаете, несомненно, попадет на oldnewthing в качестве примера того, чего не следует делать. .   -  person Neil    schedule 07.02.2012
comment
Почему вы хотите это сделать? Вы хотите убедиться, что ваши пользователи тестируют вашу программу удаления?   -  person David Heffernan    schedule 07.02.2012
comment
@DavidHeffernan, это запрос клиента, потому что приложение отображает данные промышленной системы в реальном времени, которые должны всегда оставаться видимыми для пользователей.   -  person Salvador    schedule 07.02.2012
comment
В этом случае убийство таких вещей, как Flip3D, звучит как выход. Или запустить систему в режиме киоска.   -  person David Heffernan    schedule 07.02.2012
comment
@DavidHeffernan Я предлагаю эти варианты покупателю, но он отвергает эти предложения.   -  person Salvador    schedule 07.02.2012
comment
Ну, клиент всегда прав, я полагаю. ;-)   -  person David Heffernan    schedule 07.02.2012


Ответы (1)


Я сделал это некоторое время назад, используя DwmSetWindowAttribute функция, изменяющая DWMWA_FLIP3D_POLICY со значением DWMFLIP3D_EXCLUDEABOVE.

Попробуйте этот код

uses
  Winapi.DwmApi;

procedure TForm40.FormCreate(Sender: TObject);
var
  pvAttribute: Integer;
begin
  pvAttribute:= DWMFLIP3D_EXCLUDEABOVE;
  if DwmCompositionEnabled then
   DwmSetWindowAttribute(Handle, DWMWA_FLIP3D_POLICY, @pvAttribute, Sizeof(Integer));
end;

И это результат

введите здесь описание изображения

person RRUZ    schedule 06.02.2012
comment
Рэймонд Чен будет тебя ненавидеть. <грамм> - person EMBarbosa; 08.02.2012