Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Визуализация длительной загрузки


Ega23 ©   (2006-07-27 18:04:00) 

Программа достаточно долго (секунд 20-30) грузится. Из БД читается куча параметров, идёт инициализация и т.п.
Хочется сделать что-нибудь, типа сплэш-формы с отображением статуса загрузки (в текстовом виде):
- Загрузка модели из БД
- Инициализация графики
и т.п.

Вижу это так: есть поток, в котором, собственно, сплэш-форма; есть критическая секция, которую поток опрашивает. Если находит новый текст - кладёт на сплэш-форму.
Из основного потока, по мере инициализации данных, идёт отписка сообщений через ту же крит.секцию.

Правильной дорогой иду, или можно проще сделать?


Ega23   (2006-07-28 09:16:00) [1]

Тьфу, ничего мне не надо. Это я туплю с утра "нипадецки".

Большое спасибо всем откликнувшимся.


Ega23   (2006-07-28 09:15:00) [2]


> кно, созданное, например, средствами "чистого WinAPI".


Дайте ссылку какую-нить, где подробно почитать об этом можно. А то я с чистым API практически дел не имел никогда.
Или пример кода, я по нему сам разберусь.


@!!ex   (2006-07-28 09:13:00) [3]

В таких случаях просто создавал окно. Средствами WinAPI.
И перерисовывал его в какие то ключевые участви загрузки с новым текстом.


Сергей М.   (2006-07-28 09:08:00) [4]


> если "не форма VCL", то что?


Окно, созданное, например, средствами "чистого WinAPI".


Ega23   (2006-07-28 09:04:00) [5]


> Есть поток, в котором сплэш-окно (не форма VCL).


Вот это хотелось бы по-подробнее. Конкретно - если "не форма VCL", то что?


Юрий Зотов   (2006-07-27 23:25:00) [6]

> Ega23 ©   (27.07.06 18:04)  

Еще момент - есть смысл поместить-сплэш окно и его поток в DLL. Поскольку после запуска основного окна они уже не будут нужны.


Юрий Зотов   (2006-07-27 23:09:00) [7]

> Ega23 ©   (27.07.06 18:04)  

1. Есть поток, в котором сплэш-окно (не форма VCL). Это обеспечит и нормальную работу окна, и его перерисовку "без задержек".

2. Основной поток по мере загрузки шлет сплэш-окну сообщение, передавая через него текст. Получив его, сплэш-окно отображает этот текст в какой-то своей области.

3. По окончании загрузки основной поток убивает сплэш-окно и его поток.


Desdechado   (2006-07-27 18:15:00) [8]

здесь тупо в лоб, но вроде должно дышать
 oMsgConnect:=MessageWait(rc_ConnectMsg);
 Application.CreateForm(TMyDataModule, MyDataModule);
 Application.ProcessMessages;
 if oMsgConnect<>nil then
   oMsgConnect.Release;
 if not Application.Terminated then
   Application.CreateForm(TfrmMain, frmMain);
 Application.ProcessMessages;
 if not Application.Terminated then
   Application.ShowMainForm:=True;
 Application.Run;


Ega23   (2006-07-27 18:14:00) [9]

А как лучше?


Сергей М.   (2006-07-27 18:11:00) [10]

Если сплэш-форма - это VCL-форма, то доп.поток здесь теряет всяческий смысл.


Наверх

Титульная страница Поиск, карта сайта Написать письмо