Delphi: Balloon Form с fsStayOnTop не работает в Win7

У меня есть приложение, которое использует мою собственную форму всплывающей подсказки. Это не ограниченная форма типа fsStayOnTop.

Я показываю это с этим кодом:

ShowWindow(Handle, SW_SHOWNOACTIVATE);
Visible := True;

Сегодня я понял, что если я активирую другое приложение, то шар не появляется! Таким образом, он теряет свой стиль.

Среда: Win7/x64 Delphi 6 Professional

Что я могу с этим сделать?

Спасибо: дд

1 ответ

Решение

Что сработало для меня в прошлом, когда я боролся с формами "оставайся на вершине":

Form := TMyForm.Create(Self);
Application.NormalizeTopMosts;
SetWindowPos(Form.Handle, HWND_TOPMOST, 0, 0, 0, 0,
             SWP_NOACTIVATE + SWP_NOMOVE + SWP_NOSIZE);
Form.Show;

Попробуйте это вместо вашего ShowWindow вызов. Это остается поверх всех окон (вы действительно этого хотите?). Кроме того, он чувствует себя немного хакером, потому что он пропускает RestoreTopMosts вызов, который в документации сказано, что мы должны вызывать (так что это повлияет на другие окна в вашем приложении). Так что может быть лучшее решение.

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

Поместите это в событие OnCreate "Form B":

FormStyle:= fsStayOnTop;

но одного этого недостаточно...

Перетащите TApplicationEvents в свою "Форму Б"

В событии OnDeactivate для ApplicationEvents1 добавьте следующее:

SetForegroundWindow(Дескриптор);

Я слежу за небольшим окном статуса, пока моя основная форма обрабатывает данные с сайта. Красиво работает!

Другие вопросы по тегам