![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Заставка - ход загрузки программы
***_Diman_*** © (2005-08-08 12:05:00)Здраствуйте, Уважаемые!
Пишу прогу, прога загружается долго - грузит справочники. В этот момент ессно непонятно то ли прога сдохла то ли всё-таки работает, нужна в общем заставочка показывающая ход загрузки, индикатор живости программы. Пожалста подскажите как такое реализовать, лучше пните туда где пример лежит, очень нужно. Заранее спасибо.
Игорь Шевченко (2005-08-10 12:21:00) [1]Любите Demos - источник кода.
Ольга (2005-08-10 10:42:00) [2]
> заставка должна быть по возможности самой простецкой
> ни у кого примерчика нету?
Вот самый примитив. Привожу его только для того, чтобы показать, что там смотреть нечего - никаких закидонов. Main - главная форма, FirstForm - заставка.
procedure TMain.FormCreate(Sender: TObject);
begin
FirstForm:=TFirstForm.create(application);
FirstForm.Caption:='Электронный журнал v'+versionNumber;
FirstForm.StaticText1.Caption:=' инициация параметров ...';
FirstForm.Show;
application.ProcessMessages;
FirstForm.StaticText1.Caption:=' связь с SQL сервером ...';
FirstForm.StaticText1.Repaint;
...
FirstForm.StaticText1.Caption:=' загрузка графиков ...';
FirstForm.StaticText1.Repaint;
...
FirstForm.Close;
end;
dmitry501 (2005-08-10 07:51:00) [3]***_Diman_*** (10.08.05 7:48) [30]
Ну вот... Написали аж 30 постов, а ты опять все сначала.... :)
***_Diman_*** (2005-08-10 07:48:00) [4]ни у кого примерчика нету? или хотя бы порядок действий вкраце - что за чем следует
***_Diman_*** (2005-08-09 15:50:00) [5]кстати небольшой аддон - прога для КПК (снова я со своими проблемами!) а там МНОГО чего нельзя... например отвратно рисуется графика, а как подшивать к проге ресурсы (банальная вещь!) я так и не понял - компилер для ARMV ресурсы в упор не видит... ну и чёрт с ним конечно. так что заставка должна быть по возможности самой простецкой - лишь бы оператор видел что прога ЖИВА, и кое-чего сообщает (типа справочник такой-то загружен и т.п.)
***_Diman_*** (2005-08-09 15:41:00) [6]>Юрий Зотов
dll не пойдёт. насчёт знания апи - прогу пишу но некоторые тонкости не всегда понимаю. регистрирую окна, в т.ч. и заставочное, окно судя по всему конечно создаётся :) а вот где именно вытолкнуть его наверх? в WndProc? и чем? SetForegroundWindow? на чистом апи редко доводилось воять, тем более окна, в основном только функционал программ - сами алгоритмы.
den303 (2005-08-09 14:46:00) [7]Я в своё время делал отдельную программу-сплэш, которая запускала основную прогу и обменивалась с ней сообщениями для отображения загрузки ПрогрессБаром. Потом основная прога, загрузившись, отсылала сообщение о закрытии сплэш-проги. Кстати говоря, и номер версии от главной проги к сплэшу уходил через сообщения
Eraser (2005-08-09 14:43:00) [8]Вообще для не больших проектов, которые грузятся довольно быстро (есть исключения) я протиник сплэшов, особенно если он видим не только в процессе загрузки, а по таймеру, определённый "зашитый" интервал времени.
Eraser (2005-08-09 14:41:00) [9]Юрий Зотов © (09.08.05 11:52) [6]
Кода там действительно копейки, но если уж делать сплэш, то есть прямой смысл делать его с хорошей картинкой - а вот она уже может весить совсем не копейки.
В общем, делал я когда-то именно такой сплэш - DLL получилась более 600 кб. Естественно, именно из-за картинки (24-битный битмап размером 500х400), самого кода там всего-то килобайт на 20.
Для большого проекта, который распространяется на CD 600 Кб не критично, а вот для шароварщиков - лишние 600 Кб серьёзные затраты.
Тут ради экономии места можно картинку ZLib'ом сжать, а при загрузке - разжимать и загружать в TImage.
ANB (2005-08-09 14:35:00) [10]А еще можно Create главной формы перекрыть. Тоже работает.
Юрий Зотов (2005-08-09 13:26:00) [11]> Игорь Шевченко © (09.08.05 13:14) [22]
> инициализация от его действий быстрее не выполнится.
Не выполнится, факт. Но... снова см. [11]. Я ни в коем случае не ставлю себя на одну доску с MS или Borland, но и не считаю, что должен следовать их плохим (ИМХО) примерам.
Считаю, что должен следовать их хорошим примерам (благо, что таких предостаточно). Еще считаю, что качество должно быть. И максимальным. И везде, даже в мелочах.
Вот такая позиция. Можно с ней соглашаться, можно не соглашаться, но спорить по этому поводу смысла, видимо, нет.
Игорь Шевченко (2005-08-09 13:14:00) [12]Юрий Зотов © (09.08.05 13:06) [21]
Так мы с тобой об этом в прошлый понедельник говорили :)
Просто я не сильно склонен каждый раз умножать сущности, раз инициализация длится столько, сколько она длится по объективным причинам, то пользователь хоть что может делать - хоть хелпом водить по сплэшу, хоть еще чем, все одно ему ждать надо будет, инициализация от его действий быстрее не выполнится.
Юрий Зотов (2005-08-09 13:06:00) [13]> Игорь Шевченко © (09.08.05 12:52) [15]
> С другой стороны, если процесс инициализации настолько долог,
> что пользователь успевает заскучать, то, наверное имеет смысл
> пересмотреть процесс инициализации? Например не
> инициализировать все сразу :)
Инициализация eE-enterprise может длиться и полминуты, и даже намного более (зависит от производительности и загруженности сети, а уж при удаленном соединении с сервером через модем... сам понимаешь). При этом инициализируется только то, без чего ну никак не обойтись. Пересматривать уже нечего.
В основном, по этой причине и был написан такой сплэш. Песня, а не заставка получилась.
Юрий Зотов (2005-08-09 12:57:00) [14]> Игорь Шевченко © (09.08.05 12:55) [17]
См. [11]. Добавить к этому мне нечего.
Leonid Troyanovsky (2005-08-09 12:56:00) [15]
> Игорь Шевченко © (09.08.05 12:52) [15]
> Leonid Troyanovsky © (09.08.05 12:49) [13]
>
> А как заставка должна реагировать на действия пользователя
> ? :)
Ну, хотя бы, таскаться мышкой, или чем-то, что у него в руках.
--
Regards, LVT.
Игорь Шевченко (2005-08-09 12:55:00) [16]Юрий Зотов © (09.08.05 12:50) [14]
Вот если те же действия проделать с Word, Excel или Visual C, то поведение сплэша такое же, как и в Delphi. Я бы не сильно утверждал, что эти программы писали непрофессионалы.
TUser (2005-08-09 12:55:00) [17]> Юрий Зотов © (09.08.05 12:38) [11]
Не знаю - по мне лишь бы работало, а красиво ли оно отрисовывается не столь важно. Не думаю, что Delphi менее популярна, чем VS из-за неперерисовки сплеша :)
Leonid Troyanovsky (2005-08-09 12:53:00) [18]
> Юрий Зотов © (09.08.05 12:23) [8]
> > Главной формой надо сделать форму-заставку
>
> И тогда при ее закрытии... приложение завершится. Чтобы
> этого не произошло, придется динамически переназначать свойство
> Application.MainForm, а оно ReadOnly. Поменять его
Заставку, конечно, не надо делать главной.
Т.е., достаточно TFormSplash.Create(nil)
--
Regards, LVT.
Игорь Шевченко (2005-08-09 12:52:00) [19]Leonid Troyanovsky © (09.08.05 12:49) [13]
А как заставка должна реагировать на действия пользователя ? :)
С другой стороны, если процесс инициализации настолько долог, что пользователь успевает заскучать, то, наверное имеет смысл пересмотреть процесс инициализации ? Например не инициализировать все сразу :)
Юрий Зотов (2005-08-09 12:50:00) [20]> Игорь Шевченко © (09.08.05 12:39) [12]
Запусти, например, справку. Потом запусти, например, Delphi - появится сплэш. Пока идет загрузка Delphi, повози окном справки по окну сплэша и посмотри, как идет его перерисовка. Кому как, а мне такое ОЧЕНЬ не нравится.
Вот зачем нужен отдельный поток - для качества. Даже в мелочах. Тем более, что этот поток, в общем-то, почти ничего и не делает, дополнительной нагрузки на CPU практически нет, загрузка программы практически не тормозится.