Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.05.2024, 22:03
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
Восклицание Экран загрузки зависает

Мужики всем привет, тише лет тут не был но знаю что тут мне всегда рады.



Вот такая задача стоит - программа запускаеться с задержкой потому что вовремя создания MainForm происходит много разных проверок.

И что бы пользователь 1000 раз его не запускал думая что она не запустилась решил добавить экран загрузки (Splash screen).

Думал делов то расплюнуть в не тут то было - дело в том что инициализация программы на дельфи происходит в одном потоке.

И если создать окно SplashForm раньше MainForm-a, окно загрузки хоть и отображаеться раньше времени но оно зависает потому что в том же потоке всеравно грузиться MainForm приложения.


Пытался по всякому запустить окно приветствия в отдельном потоке между Инициализацией и Запуском. Ничего не вышло.

У кого какие идеи как решить эту задачу?
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #2  
Старый 09.05.2024, 00:32
Аватар для Verevkin
Verevkin Verevkin вне форума
Прохожий
 
Регистрация: 22.06.2015
Сообщения: 43
Версия Delphi: 3...XE12
Репутация: -50
По умолчанию

Текст писал голосовым вводом? Зачем в нём столько ошибок?
Цитата:
У кого какие идеи как решить эту задачу?
а) создать и показать окно-заставку;
б) запустить процесс инициализации, который будет обновлять прогресс на окне-заставке;
ц) закрыть и удалить окно-заставку;
д) создать главное окно.
__________________
Хей-хей-хей! Только не ходите в мой сарай, лады?..
Ответить с цитированием
Этот пользователь сказал Спасибо Verevkin за это полезное сообщение:
Electronic_Arts (09.05.2024)
  #3  
Старый 09.05.2024, 08:23
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Пару месяцев назад отвечал на подобный вопрос.
Пример кода вот в этой теме:
https://delphisources.ru/forum/showthread.php?t=30790
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Electronic_Arts (09.05.2024)
  #4  
Старый 09.05.2024, 14:11
Аватар для Electronic_Arts
Electronic_Arts Electronic_Arts вне форума
Местный
 
Регистрация: 13.07.2006
Адрес: на земле
Сообщения: 562
Версия Delphi: Delphi 11
Репутация: 18
По умолчанию

Цитата:
Сообщение от Verevkin
Текст писал голосовым вводом? Зачем в нём столько ошибок?
а) создать и показать окно-заставку;
б) запустить процесс инициализации, который будет обновлять прогресс на окне-заставке;
ц) закрыть и удалить окно-заставку
Цитата:
Сообщение от Verevkin
д) создать главное окно.
Извиняюсь было час ночи решил по быстрому накидать текст и пойти поспать.
Тут проблема в том что, даже если Splashscreen это статичная картинка стоит навести на негокурсор - видно что она зависла. Я вот хочу побороть именно этот недуг.

Цитата:
Сообщение от lmikle
Пару месяцев назад отвечал на подобный вопрос.
Пример кода вот в этой теме:
https://delphisources.ru/forum/showthread.php?t=30790

Добрый день дорогой друг.
Ваш пример хорош тем что принудительно происходит репейт и окно обновляется сам и положение прогрессбара меняется - но минус этого метода в том что ты замедляешь загрузку процедурой sleep которую я стараюсь даже в микроконтроллерах избегать. Эта процедуру создали чтобы когда нужно можно было движение планеты остановить .

Пока как временное решение задачи я решил использовать статичную картинку как экран загрузки чтобы клиент понял программа запускается. Но то что оно зависает как то напрягает.
__________________
Нет ничего не возможного. Вопрос только во времени...
Ответить с цитированием
  #5  
Старый 09.05.2024, 15:40
Аватар для Verevkin
Verevkin Verevkin вне форума
Прохожий
 
Регистрация: 22.06.2015
Сообщения: 43
Версия Delphi: 3...XE12
Репутация: -50
По умолчанию

Инициализацию сделай отдельным тредом, который и будет обновлять прогресс на заставке. По его завершению удали заставку, а затем создай главное окно и покажи его.
__________________
Хей-хей-хей! Только не ходите в мой сарай, лады?..
Ответить с цитированием
Этот пользователь сказал Спасибо Verevkin за это полезное сообщение:
Electronic_Arts (09.05.2024)
  #6  
Старый 09.05.2024, 21:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Ваш пример хорош тем что принудительно происходит репейт и окно обновляется сам и положение прогрессбара меняется - но минус этого метода в том что ты замедляешь загрузку процедурой sleep которую я стараюсь даже в микроконтроллерах избегать. Эта процедуру создали чтобы когда нужно можно было движение планеты остановить .

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

Да sleep там просто для того, что бы обновление не происходило моментально, в то не успеешь увидеть изменение прогресс бара. Это же просто пример. На самом деле там вместо sleep должен быть твой код инициализации/загрузки ресурсов. Тут просто демонстрация как создавать splach screen, как его обновлять, и как уничтожать по окончанию. С точки зрения обновления, пусть тебе надо загрузить 5 справочников. У тебя есть 5 процедур загрузки. Ты их перечисляешь в массиве и код работает. Когда появится 6ой справочник, то просто добавляешь процедуру его загрузки в массив, а код остается все тем же. Как я и написал, в примере весть код помещен в файл проекта просто для нагдядности, по идее и массив, и сами процедуры инициализации должны быть в отдельных модулях.

Да, и еще один момент. Все эти действия инициализации происходят до старта процедуры обработки сообщений, так что все равно будет впечатление, что программа зависла. Поэтому там и ручной старт отрисовки при изменеии прогресс бара и поэтому "вешается" курсор ожидания.

Последний раз редактировалось lmikle, 09.05.2024 в 21:10.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Electronic_Arts (09.05.2024)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:28.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter