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(Дескриптор);
Я слежу за небольшим окном статуса, пока моя основная форма обрабатывает данные с сайта. Красиво работает!