|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Экран загрузки зависает
Мужики всем привет, тише лет тут не был но знаю что тут мне всегда рады.
Вот такая задача стоит - программа запускаеться с задержкой потому что вовремя создания MainForm происходит много разных проверок. И что бы пользователь 1000 раз его не запускал думая что она не запустилась решил добавить экран загрузки (Splash screen). Думал делов то расплюнуть в не тут то было - дело в том что инициализация программы на дельфи происходит в одном потоке. И если создать окно SplashForm раньше MainForm-a, окно загрузки хоть и отображаеться раньше времени но оно зависает потому что в том же потоке всеравно грузиться MainForm приложения. Пытался по всякому запустить окно приветствия в отдельном потоке между Инициализацией и Запуском. Ничего не вышло. У кого какие идеи как решить эту задачу? Нет ничего не возможного. Вопрос только во времени... |
#2
|
||||
|
||||
Текст писал голосовым вводом? Зачем в нём столько ошибок?
Цитата:
б) запустить процесс инициализации, который будет обновлять прогресс на окне-заставке; ц) закрыть и удалить окно-заставку; д) создать главное окно. Хей-хей-хей! Только не ходите в мой сарай, лады?.. |
Этот пользователь сказал Спасибо Verevkin за это полезное сообщение: | ||
Electronic_Arts (09.05.2024)
|
#3
|
|||
|
|||
Пару месяцев назад отвечал на подобный вопрос.
Пример кода вот в этой теме: https://delphisources.ru/forum/showthread.php?t=30790 |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Electronic_Arts (09.05.2024)
|
#4
|
||||
|
||||
Цитата:
Цитата:
Тут проблема в том что, даже если Splashscreen это статичная картинка стоит навести на негокурсор - видно что она зависла. Я вот хочу побороть именно этот недуг. Цитата:
Добрый день дорогой друг. Ваш пример хорош тем что принудительно происходит репейт и окно обновляется сам и положение прогрессбара меняется - но минус этого метода в том что ты замедляешь загрузку процедурой sleep которую я стараюсь даже в микроконтроллерах избегать. Эта процедуру создали чтобы когда нужно можно было движение планеты остановить . Пока как временное решение задачи я решил использовать статичную картинку как экран загрузки чтобы клиент понял программа запускается. Но то что оно зависает как то напрягает. Нет ничего не возможного. Вопрос только во времени... |
#5
|
||||
|
||||
Инициализацию сделай отдельным тредом, который и будет обновлять прогресс на заставке. По его завершению удали заставку, а затем создай главное окно и покажи его.
Хей-хей-хей! Только не ходите в мой сарай, лады?.. |
Этот пользователь сказал Спасибо Verevkin за это полезное сообщение: | ||
Electronic_Arts (09.05.2024)
|
#6
|
|||
|
|||
Цитата:
Да sleep там просто для того, что бы обновление не происходило моментально, в то не успеешь увидеть изменение прогресс бара. Это же просто пример. На самом деле там вместо sleep должен быть твой код инициализации/загрузки ресурсов. Тут просто демонстрация как создавать splach screen, как его обновлять, и как уничтожать по окончанию. С точки зрения обновления, пусть тебе надо загрузить 5 справочников. У тебя есть 5 процедур загрузки. Ты их перечисляешь в массиве и код работает. Когда появится 6ой справочник, то просто добавляешь процедуру его загрузки в массив, а код остается все тем же. Как я и написал, в примере весть код помещен в файл проекта просто для нагдядности, по идее и массив, и сами процедуры инициализации должны быть в отдельных модулях. Да, и еще один момент. Все эти действия инициализации происходят до старта процедуры обработки сообщений, так что все равно будет впечатление, что программа зависла. Поэтому там и ручной старт отрисовки при изменеии прогресс бара и поэтому "вешается" курсор ожидания. Последний раз редактировалось lmikle, 09.05.2024 в 21:10. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Electronic_Arts (09.05.2024)
|