Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.04;
Скачать: CL | DM;

Вниз

Модальное окно прячется за другое окно.   Найти похожие ветки 

 
афвуд2   (2004-03-16 18:09) [0]

Наверно некоторые встречались с непонятным поведением модального окна. Иногда, при потере фокуса приложением, оно(модальное окно) оказывается ниже окна, вызвавшего его. Причём приклада ни на что не реагирует - ну это понятно - окно то модальное(т.е. пока его не закроешь ничего нельзя сделать), а оно не видно, т.е. ни закрыть его и вообще ничего нельзя сделать. Лечится свёртыванием приложения и обратно развёртыванием. Хотелось бы вылечить это на уровне Delphi. Никто не знает способа?


 
Suntechnic ©   (2004-03-16 20:43) [1]

Приложение многопоточное?


 
Sergey Masloff   (2004-03-16 21:11) [2]

Suntechnic ©   (16.03.04 20:43) [1]
>Приложение многопоточное?
Да нет. Обычное. Случается такой глючок хотя и редко.

афвуд2   (16.03.04 18:09)  
А ты разверни на весь экран какое-нибудь постороннее окно и потом сверни его. Модальное вылезет ;-)


 
Suntechnic ©   (2004-03-16 21:17) [3]

>Sergey Masloff   (16.03.04 21:11)
Я почему спросил то.... Такой глюк обычно вылазит когда модальное окно было создано не в основном GUI потоке. Такая проблема в принципе решается через AttachThreadInput, но лучше пересматривать логику программы.

Ну а если всё в одном потоке.... поробуй ALT-TAB.


 
Sergey Masloff   (2004-03-16 21:30) [4]

Suntechnic ©   (16.03.04 21:17) [3]
Я не знаю то это или нет но я пару раз с этим сталкивался. У меня при запуске программы (естественно после создания всего что нужно) была попытка соединения с сервером. Это делалось в отдельном потоке правда. И в случае неудачи этот поток посылал главному Message WM_USER + XXX чтобы главный поток показал юзеру диалог настройки соединения. Так вот иногда этот диалог действительно оказывался ЗА главным окном и помогало закрыть другим приложением (вобщем инвалидировать) мое окно и диалог "всплывал". Происходил глюк КРАЙНЕ редко но имел место быть. А когда у меня дошли руки до него он затаился. Вот уже 2 года, больше тысячи установок - вроде юзеры не жаловались ;-)


 
Suntechnic ©   (2004-03-16 22:01) [5]

>Sergey Masloff   (16.03.04 21:30)
...И в случае неудачи этот поток посылал главному Message WM_USER + XXX


А как посылал? Если через SendMessage, то это именно случай описанный Suntechnic ©   (16.03.04 21:17) [3]. Ведь SendMessage, не ставит сообщение в поток, а вызывает оконную процедуру прямо, т.е. вызов процедуры и как следствие создание окна происходит в доп. потоке.


 
Sergey Masloff   (2004-03-16 22:21) [6]

Suntechnic ©   (16.03.04 22:01) [5]
Не-а. Post конечно.


 
Sergey Masloff   (2004-03-16 22:29) [7]

Suntechnic ©   (16.03.04 22:01) [5]
Слушай, не поленился залез в исходники. Мой же комментарий: обязательно Post чтобы не было ошибки с пропаданием окна.
так что ты прав а у меня память дырявая...


 
афвуд ©   (2004-03-18 18:01) [8]

Есть дополнения к проблеме:
У меня это модальное окно долго открывается(ну там просто ещё много чего делается - выполнение запроса прямо во время открытия окошка - маразм конечно, но мне этого не избежать - можете мне поверить :)) ) и если в этот момент юзер тыкает мышкой по другому окну... модальное окошко прячется.


 
Suntechnic ©   (2004-03-18 18:37) [9]

>афвуд ©
У меня это модальное окно долго открывается(ну там просто ещё много чего делается - выполнение запроса прямо во время открытия окошка - маразм конечно...

Это точно замечено.

... но мне этого не избежать - можете мне поверить :))

Не верим :) Практически любое действие, которое требует некоторого времени, можно вынести в дополнительный поток.

и если в этот момент юзер тыкает мышкой по другому окну... модальное окошко прячется

Трудно по столь скупым объяснением понять что происходит, но я могу поиграть в Нострадамуса....

- Если модальное окно и длительное действие находятся в доп. потоке, тогда см. дискуссию выше.
- Если всё-таки всё находится в одном потоке, тогда окошко никуда не прячется, оно просто не перерисовывается.


 
Гаврила   (2004-03-18 18:46) [10]

первая проблема (без дополнения в посте [8]) - это проблема Билли и операционки, и никакими средствами delphi не вылечится, имхо.

По дополнению к проблеме, присоединяюсь к выше выступавшим товарищам - не верю


 
Defunct ©   (2004-03-18 18:56) [11]

афвуд ©   (18.03.04 18:01) [8]

Модальное окно надо делать со стилем fsStayOnTop


 
афвуд ©   (2004-03-19 12:19) [12]

Ну ок. Расскажу почему нельзя. У меня прога - Дизайнер пользовательских интерфейсов. Что-то типа Delphi - но без программирования(команды типа "Открыть окно", "Выполнить процедуру"(на сервере Oracle)). В общем долго рассказывать. Факт в том, что При открытии окна юзер может навешать много всяких запросов и всего другого. И выводить в отдельный поток нельзя, т.к. прямо в открытом окошке надо увидеть результаты запроса.

Про fsStayOnTop - юзеры ставили это свойство окнам. Не помогло.



Страницы: 1 вся ветка

Текущий архив: 2004.04.04;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.217 c
11-1058000796
DSP
2003-07-12 13:06
2004.04.04
IPX-kol данные передать


3-1078230822
sergt
2004-03-02 15:33
2004.04.04
Выгрузка результата запроса в переменную


3-1078464326
Masha Streltsova
2004-03-05 08:25
2004.04.04
Как вставить combobox в dbgrid?


3-1078676634
Volodya_
2004-03-07 19:23
2004.04.04
Filter


14-1078850059
satron
2004-03-09 19:34
2004.04.04
Где скачать компонент ?