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