![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Здравствуйте, уважаемые любители и профессионалы.
У меня есть задача создать логоокно перед запуском основного окна, в котором бы отображался процесс загрузки основного окна (там длительные по времени процессы). Есть ли у вас какой-то готовый паттерн? Сейчас я делаю вот так (упрощенно) Код:
|
#2
|
|||
|
|||
![]() Канечна не прорисовывается, ибо прерисовка основана на сообщениях, а до Application.Run обработчик сообщений приложения просто еще не запущен. Тебе надо вручную вызывать Repaint для обновления.
|
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
T232006 (21.02.2024)
|
#3
|
|||
|
|||
![]() Repaint не помог, но если в потоке поставить Application.ProcessMessages, тогда работает. Только обязательно после закрытия этого окна нужно остановить поток, иначе будет происходить хаос.
Еще можно убрать synchronize и тоже будет всё работать Последний раз редактировалось T232006, 21.02.2024 в 11:31. |
#4
|
|||
|
|||
![]() Проблема в том как у вас организован процесс загрузки данных. Добавьте в процедуру загрузки вызовы Application.ProcessMessages.
|
#5
|
|||
|
|||
![]() Если Repaint не помог, значит надо Invalidate вызвать.
Собственно, просто не помню какой из них работает через сообщения, а который делает прямое обновление. Собственно, проблема понятна из описания почему не обновляется. Еще пара замечаний по коду. Форму надо показывать через Show, не через ShowModal. sleep вообще-то блокирует все нафиг, не помню как он работает внутри потока. Лучше использовать System.Classes.TThread.Sleep Вообще, я делал такие формы немного подругому. Во первых, из создание, показ, обновление и удаление делалось в файле проекта. Во вторых, форма показывалась через Show, но была без заголовка и Topmost (что бы пользователь видел ее но не мог закрыть). В третьих, надо вешать курсор ожидания. А в остальном - все то же самое. Вот так все работает: Код:
понятно, что для простоты я все поместил в файл проекта и сделал просто заглушку для процедуры загрузки. по хорошему, все надо вынести в соотв. модули и здесь только вызвать один метод. Последний раз редактировалось lmikle, 22.02.2024 в 00:05. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
T232006 (03.03.2024)
|