Форум: "Основная";
Текущий архив: 2004.04.04;
Скачать: [xml.tar.bz2];
ВнизМодальное окно прячется за другое окно. Найти похожие ветки
← →
афвуд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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.031 c