Проблема FormStyle=fsStayOnTop

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Проблема FormStyle=fsStayOnTop

Сообщение rtn » 09.01.2015 15:12:02

При переключении между приложениями периодически (довольно часто) Формы с FormStyle=fsStayOnTop остаются сверху другого активного приложения а не исчезают вместе с главной формой.
Lazarus 1.2.6 Windows 7 и Win XP
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Проблема FormStyle=fsStayOnTop

Сообщение GAMER » 09.01.2015 23:31:16

Что значит "не исчезают вместе с главной формой"?
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Проблема FormStyle=fsStayOnTop

Сообщение rtn » 10.01.2015 01:02:26

Постараюсь поподробнее :) :
Простой проект:
-Главная форма Form1 на ней Button1.
-Еще одна форма Form2 c FormStyle=fsStayOnTop для наглядности с меньшим размером
-
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Show;
end;

При запуске после нажатия Button1 видим Form1 и Form2
Сейчас переключаясь на другие программы Alt-Tab или щелкая по панели задач
-должно быть:
Окно другого приложения выходит на передний план, Form1 и Form2 уходят на задний.
-по факту:
Form1 гарантировано уходит, а Form2 зачастую висит на переднем плане неактивной перед сторонним приложением.
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Проблема FormStyle=fsStayOnTop

Сообщение Ism » 10.01.2015 04:13:13

rtn писал(а):Form1 гарантировано уходит, а Form2 зачастую висит на переднем плане неактивной перед сторонним приложением.

Вообщето смысл stayontop именно в этом, оставаться наверху
Зачем вообще использовать это свойство ?
Ism
энтузиаст
 
Сообщения: 908
Зарегистрирован: 06.04.2007 17:36:08

Re: Проблема FormStyle=fsStayOnTop

Сообщение rtn » 10.01.2015 05:10:16

Оставаться наверху перед чужим приложением должна форма с FormStyle=fsSystemStayOnTop.
Проблема заключается в том, что форма с FormStyle=fsStayOnTop иногда случайным образом ведет себя как FormStyle=fsSystemStayOnTop.
Вот еще нашел:
Lazarus_0.9.30_release_notes:
TCustomForm.FormStyle added fsSystemStayOnTop.Meaning is same as with fsStayOnTop except that fsStayOnTop is form on app top, so when application deactivates fsStayOnTop is not on top of other application(s), fsSystemStayOnTop is always on top.
То-есть баг имеет место быть.
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Проблема FormStyle=fsStayOnTop

Сообщение vitaly_l » 10.01.2015 11:12:04

У меня такой баг отсутствует. Form2.Show при fsStayOnTop - работает как надо.
Попробуйте ShowModal; Тоже такой баг выскакивает? Если ответ да... то:
лучше переустановить лазарус - последнюю версию.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Проблема FormStyle=fsStayOnTop

Сообщение GAMER » 10.01.2015 18:35:13

Подтверждаю баг, хотя он достаточно редко себя проявляет. До сих пор не удалось его воспроизвести у себя принудительно. Возникает спонтанно.
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Проблема FormStyle=fsStayOnTop

Сообщение rtn » 10.01.2015 21:54:31

Пробовал дома воспроизвести (Win 7):
Открыл Word, развернул на весь экран, запустил проект с пресловутыми Form1, Form2.
Щелкал в панели задач Документ1-project1-Документ1-project1... рука устала все корректно.
Щелкнул в панели задач project1 а затем по экрану с Word и ... вот она неактивная вверху висящая никому сейчас не нужная Form2 над активным вордом.
На работе с WinXp этот баг происходит при любом переключении между приложениями почти в половине случаев.
Пробовал SetWindowPos(self.Handle,HWND_TOPMOST... при FormStyle=fsNormal результат тот-же.
Может быть кто-то из продвинутых форумчан сможет сформулировать и отправить баг репорт?

Ну и после двух суток мучений кажется нашел костыль: Form2.FormStyle=fsNormal
в исходном коде проекта Form2.PopupParent:=Form1; Form2 ведет себя как fsStayOnTop и без багов. :D

Добавлено спустя 19 часов 23 минуты 4 секунды:
К сожалению костыль оказался кривой. Появился новый легко воспроизводимый баг (win7):
1. При открытой Form2 (Form2.PopupParent:=Form1) сворачиваем Form1 (Form2 естественно сворачивается вместе с ней)
2. Развернем проект (обе формы вновь видны)
3. Закрываем крестиком Form2
4. Сворачиваем Form1 и снова развернем.....
Видна "закрытая" наполовину прорисованная Form2 (TLabel не прорисованы, TEdit видны и даже получают фокус). Form2 причем уже ни как не закрыть, ни крестиком, ни программно.

Помогите доделать проект (две недели с дельфи переделывал). Основное окно занимает большую часть экрана и множество мелких с дополнительной информацией(fsStayOnTop), которые не должны прятаться за главную форму. Пользователь может в любой момент переключиться в браузер, офис и пр, а потом вернуться к моему приложению, формы должны располагаться как были. В связи с вышеперечисленными багами я не могу это реализовать. Мысли кончились :cry:
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Проблема FormStyle=fsStayOnTop

Сообщение vitaly_l » 11.01.2015 18:18:29

repaint формы пробовали при активации / деактивации?
Сделайте принудительный hide при деактивации программы и принудительный repaint и/или refresh.
Возможно с таким костылём будет Вам счастье... :oops:

Добавлено спустя 3 минуты 21 секунду:
Скорее всего баг не в форме, а в компонентах на ней...
У меня было подобное с чем-то вроде TPanel - весь форум перетряс, решения так и не нашли.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Проблема FormStyle=fsStayOnTop

Сообщение rtn » 11.01.2015 19:29:42

То что Form2 наполовину прорисована, это я просто ситуацию обрисовал, репаинт ей не нужен. Я вообще ее в п.3 закрыл, ее не должно быть вообще. Пустая Form2 без компонентов то-же появляется из небытия. Принудительное Hide, close, visible:=false на эту фантомную форму не действуют.

Добавлено спустя 14 минут 19 секунд:
подобную Form2 можно убрать в application.OnRestore написав следущий бред:
if form2.Visible=false then
begin
form2.Visible:=true;
form2.Visible:=false;
end;
Но тогда при восстановлении приложения будут мерцать все подобные формы
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Проблема FormStyle=fsStayOnTop

Сообщение vitaly_l » 11.01.2015 20:57:34

Репаинт Form1, а не Form2. Form1 перекрывает баг?
Она не перерисовывается, соответственно её и нужно обновить, чтобы исчезла остаточная картинка от Form2.

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: Проблема FormStyle=fsStayOnTop

Сообщение rtn » 11.01.2015 21:48:20

Нет, да и думаю и не должно было. Это не остатки Form2 на канве Form1, это почти полноценная форма без возможности закрытия. Form2 после манипуляций описаных 3 постами выше получает некий странный статус. Как будто ее некий приватный FVisible устанавливается в false и Hide, close и пр. не действуют, что верно, но по факту она видна. В любом случае спасибо за помощь.

Добавлено спустя 21 час 19 минут 41 секунду:
Уф..., по проблеме с формами с PopupParent:=... отправил свой первый баг репорт с моим то английским :oops:
http://bugs.freepascal.org/view.php?id=27295
rtn
новенький
 
Сообщения: 15
Зарегистрирован: 09.01.2015 13:59:38
Откуда: Архангельск

Re: Проблема FormStyle=fsStayOnTop

Сообщение GAMER » 14.01.2015 13:40:21

Пишут, что
I cannot reproduce (Lazarus 1.5 r47338 FPC 2.6.4 i386-win32-win32/win64).
Аватара пользователя
GAMER
энтузиаст
 
Сообщения: 627
Зарегистрирован: 06.08.2008 13:41:07
Откуда: Ужгород-Днепр, Украина

Re: Проблема FormStyle=fsStayOnTop

Сообщение Padre_Mortius » 14.01.2015 22:45:36

rtn, а если попробовать руками создавать вторую форму? Переделанный пример.
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: Проблема FormStyle=fsStayOnTop

Сообщение pupsik » 15.01.2015 00:11:32

Есть просто форма, а есть ApplicationProperties (компонент). По идее это одно и тоже (с маленькими нюансами), оказалось нет...

Решил сделать тест:

1. Есть две формы: одна главная, вторая со св-вом FormStyle=fsStayOnTop. Проделал описанные действия и ... баг проявляется.
2. При баге приложение считает себя активным. И поэтому второе окно остается сверху. Хотя основное скрыто... (Тупо написал код проверки активности приложения, воопщем - пальцем в небо :lol: )
3. А вот компонент не считает себя столь разумным и считает что формы не "видно". (Аналогичная проверка...)
4. Используя св-ва Activate и Deactivate компонента и св-ва доченей формы Hide и Show получил "обход" бага.
5. Можно доковырятся почему такое "поведение". Но это другая долгая и скучная история. И завязана на странных буковках :)
6. Как вариант: использовать компонент ApplicationProperties и скрывать или отображать формы.

п.с.
тест был на ХП, дык что возможно и не сработает.
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 238

Рейтинг@Mail.ru
cron