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

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

Заставка - ход загрузки программы


Страницы:   1 2

***_Diman_*** ©   (2005-08-08 12:05:00) 

Здраствуйте, Уважаемые!
Пишу прогу, прога загружается долго - грузит справочники. В этот момент ессно непонятно то ли прога сдохла то ли всё-таки работает, нужна в общем заставочка показывающая ход загрузки, индикатор живости программы. Пожалста подскажите как такое реализовать, лучше пните туда где пример лежит, очень нужно. Заранее спасибо.


Leonid Troyanovsky   (2005-08-09 12:49:00) [21]


> Игорь Шевченко ©   (09.08.05 12:39) [12]

> А я вот честно не понимаю, зачем нужен отдельный поток :)


Когда юзеру скучно он этой заставкой развлекается,
как, скажем, с окошком логона.
И когда заставка не перерисовывается или не реагирует
на его действия - он переживает.

Чего нам для юзера одного потока жалко? :)
Если уж и OpenDialog себе позволяет, не говоря уж о авишках.

--
Regards, LVT.


Игорь Шевченко   (2005-08-09 12:39:00) [22]

Юрий Зотов ©   (09.08.05 12:38) [11]

А я вот честно не понимаю, зачем нужен отдельный поток :)


Юрий Зотов   (2005-08-09 12:38:00) [23]

> TUser ©   (09.08.05 12:31) [9]

Обычно - да. Многие фирменные продукты (включая и саму Delphi) грешат плохой перерисовкой сплэша. Всегда обидно такое видеть. Ведь продукт действительно качественный, написан действительно профессионалами - ну что им стоило вытащить сплэш в отдельный поток? Для них это - тьфу, раз плюнуть, а впечатление о продукте было бы совсем другим. Ведь сплэш - это, можно сказать, визитная карточка, по ней складывается первое впечатление о качестве продукта.


Игорь Шевченко   (2005-08-09 12:34:00) [24]

Program Files\Borland\Delphi\Demos\Db\mastapp\mastapp.dpr


TUser   (2005-08-09 12:31:00) [25]

> Еще желательно, чтобы оно работало в отдельном потоке, иначе может плохо перерисовываться.

Вашими бы устами - да Delphi писать. И не только его - ПО-писатели обычно не желают грузить систему доп. потоком, и забивают на прорисовку.


Юрий Зотов   (2005-08-09 12:23:00) [26]

> msguns ©   (09.08.05 12:04) [7]

> возможно, овчинка выделки не стоит?

Не спорю, вполне возможно. Решать автору. Я исходил из того, что раз уж человек пишет на API, то для него все это не должно быть сложным.

> Главной формой надо сделать форму-заставку

И тогда при ее закрытии... приложение завершится. Чтобы этого не произошло, придется динамически переназначать свойство Application.MainForm, а оно ReadOnly. Поменять его все же можно (поскольку оно имеет прямой метод доступа по чтению), но прием этот, можно сказать, полухакерский. Я бы не рекомендовал.


msguns   (2005-08-09 12:04:00) [27]

>Юрий Зотов ©   (09.08.05 11:52) [6]

Это, конечно, профессиональное решение, но в данном случае, возможно, овчинка выделки не стоит ?

По сабжу. Главной формой надо сделать форму-заставку. Реальную Главную форму сделать в дизайне невидимой и в ее OnCreate отображать прцесс загрузки (прогресс бары, вспомогательные сообщения и т.д. на форме-заставке).
По окончании загрузки справочников показать Гл.форму и передать ей фокус.


Юрий Зотов   (2005-08-09 11:52:00) [28]

> Leonid Troyanovsky ©   (09.08.05 11:21) [5]

Кода там действительно копейки, но если уж делать сплэш, то есть прямой смысл делать его с хорошей картинкой - а вот она уже может весить совсем не копейки.

В общем, делал я когда-то именно такой сплэш - DLL получилась более 600 кб. Естественно, именно из-за картинки (24-битный битмап размером 500х400), самого кода там всего-то килобайт на 20.

Есть и второй довод за DLL - повторное использование. Фирменная картинка и стиль сплэша остаются теми же, а меняются только название и версия продукта (которые задаются окну сплэша самой программой в виде обычных текстовых параметры).


Leonid Troyanovsky   (2005-08-09 11:21:00) [29]


> Юрий Зотов ©   (09.08.05 10:16) [4]

> такое окно нужно только при загрузке программы, есть смысл
> поместить его в DLL. Еще желательно, чтобы оно работало
> в отдельном потоке, иначе может плохо перерисовываться.


Зачем dll? Там кода - копейки (если описание окна в ресурсе).
Зато ничего не потеряется (да и грузить, выгружать время требуется).

И вот еще, что желательно не потерять - это  фокус ввода после
окончания цикла обработки сообщений в этом потоке.
Т.е., SetForegroundWindow(Application.Handle).

--
Regards, LVT.


Юрий Зотов   (2005-08-09 10:16:00) [30]

Если нужно на API, то как быть? Очевидно, так и быть - написать на API окно с картинкой, всякими там копирайтами, прочими надписями и прогрессбаром (можно рисованным). Поскольку такое окно нужно только при загрузке программы, есть смысл поместить его в DLL. Еще желательно, чтобы оно работало в отдельном потоке, иначе может плохо перерисовываться.

Основная программа должна загрузить DLL и показать это окно, а в процессе загрузки периодически посылать ему сообщение, передавая в его параметрах процент готовности. Получив это сообщение, окно обновляет прогрессбар, а в конце загрузки основная программа закрывает окно и выгружает DLL.


***_Diman_***   (2005-08-09 10:01:00) [31]

нда. у меня загрузка в WM_CREATE происходит, сильно надо чтобы сразу грузились все справочники. пытался ещё окно создать и вытолкнуть его раньше основного (с каким-нить прогресс баром) - ни в какую. извиняйте что не уточнил что такая фича именно на апи нужна. как быть?


Slym   (2005-08-08 15:17:00) [32]

dmitry501 ©   (08.08.05 12:16) [1]
Сам то читал? Там только GUI...

Открывать ВСЕ справочники в момент загрузки приложения плохой тон... Все должно быть On demand!


dmitry501   (2005-08-08 12:16:00) [33]

http://delphiworld.narod.ru/base/create_splash.html


Страницы:   1 2

Наверх

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