![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Визуализация длительной загрузки
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-форма, то доп.поток здесь теряет всяческий смысл.