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

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

прогресс при загрузке программы [D7, WinXP]


Страницы:   1 2

Maxim_S~~ ©   (2004-12-09 11:51:00) 

Как реализовать это?
До того как происходит mainForm.create проходит время
и в процессе создания формы,
время - немалое, но где ловить проценты, или хотя бы шаги - непонятно.
жду ваших идей.


Maxim_S~~   (2004-12-09 16:41:00) [21]

что мне делать с тем что дал Erik?

Erik1 ©   (09.12.04 13:26) [16]


Maxim_S~~   (2004-12-09 14:35:00) [22]

уважемый Erik!

что за зверь attrib holder?

как можно трогать компоненты, если они ещё не созданы?


Maxim_S~~   (2004-12-09 14:05:00) [23]

ты поди у каких-то ibExpress-компонентов на этой форме выставил в дизайн-тайме св-во Active = True ?

нет, я в своём уме.


Digitman   (2004-12-09 13:26:00) [24]


> ах да, у меня ещё ibExpress компонентов штук тридцать


вот они, вероятно, и "гадят" всю картину в целом

ты поди у каких-то ibExpress-компонентов на этой форме выставил в дизайн-тайме св-во Active = True ?


Erik1   (2004-12-09 13:26:00) [25]

Вот тебе вырезка из кода:
procedure TAttribHolder.Notification(AComponent: TComponent;
 Operation: TOperation);
var
 I: Integer;
 Component: TComponent;
begin
 inherited Notification(AComponent, Operation);
 if not (csDestroying in ComponentState) and (Operation = opRemove) and
   (fAttribute <> nil) then
   for I := fAttribute.Count - 1 downto 0 do begin
     Component := TComponent(fAttribute[i].fComps.Ctrl);
     if Component = AComponent then fAttribute.Delete(i);
   end;
end;

procedure TAttribHolder.SetNotification;
var
 I: Integer;
 Component: TComponent;
begin
 for I := fAttribute.Count - 1 downto 0 do begin
   Component := TComponent(fAttribute[i].fComps.Ctrl);
   if Component <> nil then Component.FreeNotification(Self);
 end;
end;


Maxim_S~~   (2004-12-09 13:11:00) [26]

Erik1 ©   (09.12.04 12:54) [12]

где ты вычитал эту инфу?
я ничего этого не знаю, я вообще как слепой котёнок,
выращенный на книгах вроде Архангельского,
где ничего глубокого нет

TUser ©   (09.12.04 12:56) [13]
bpl ускорит загрузку?
да, но тогда программа будет весить позорно мало,
она и так маленькая.

Александр Иванов ©   (09.12.04 12:57) [14]
форм несколько, но перегружена одна,
как я уже говорил полофина тормозов до создания главной формы,
вторая половина в процессе


Александр Иванов   (2004-12-09 12:57:00) [27]

Если много форм, то простой вариант, "привязать" прогресс к созданию форм и на заставке отображать их из кода проекта.


TUser   (2004-12-09 12:56:00) [28]


> что ж делать-то?
> на медленных машинах прога грузится минуту.

Поставь splash. Delphi на медленных машинах вообще минуты 3 грузится. + Стоит подумать об использовании dll/bpl


Maxim_S~~   (2004-12-09 12:54:00) [29]

ах да, у меня ещё ibExpress компонентов штук тридцать....

что ж делать-то?
на медленных машинах прога грузится минуту.


Erik1   (2004-12-09 12:54:00) [30]

Все очень запущено, любой компонент взаимодействует с формой как с контейнером. При создании и удалении он посылает ей Notify. Ты можеш на форме поймать передачу этого сообщения, сделать свое чарное дело и inherited. Но лучше оптимизирой фору, выброси лишние компоненты, сделай один конект к базе и пр.. Для определение тормознутых компонентов подходит метод деления пополам, стираеш половину компонентов запускаеш программу или медленно по прежнему то возвращаеш на место и стираеш другую половину. После дробиш ее на более мелкие части.


Maxim_S~~   (2004-12-09 12:52:00) [31]

KSergey ©   (09.12.04 12:33) [5]
> создать дополнительный поток и в синхронизации он будет
> рисовать..

Теперь почитайте про метод Synhronyse и как он работает, чтобы такую чушь больше не городить.

Syncronize
будет правильнее.

я давно знаком с методом syncronize и на мой вопрос уже ответили,
рисивать никто ничего не будет,

>если VCL-контролами - выбрось эту мысль из головы, эти контролы >обновляются в осн.трэде процесса, который в этот момент занят >загрузкой формы

а жаль


TUser   (2004-12-09 12:48:00) [32]


> неужели их создание может занимать так много времени?

Может. Ты попробуй в цикле создать, скажем, 1000 кнопок. Для каждой надо создать окно, шрифт, браш, выделить кучу ресурсов, запустить оконную процедуру.


Maxim_S~~   (2004-12-09 12:44:00) [33]

Digitman ©   (09.12.04 12:08) [1]

не совсем понял как это сделать.
я вижу у формы ряд tnotify events
onCreate ondestroy etc
но связяных с компонентами не вижу.

невозможно же писать для каждого компонетна событие onCreate,
да, которое и не предусмотрено как notify, нет такого
tbutton().oncreate

или ручками писать создание компонентов?

на форме куча панелей кнопок и прочей дряни,
customimagы и проч и проч.
неужели их создание может занимать так много времени?


TUser   (2004-12-09 12:37:00) [34]


> Maxim_S~~   (09.12.04 12:14) [4]

:)))
Просто я нифига не понял из твоего объяснения - то ли тебе SlpashWindow нужен с прогрессбаром, то ли еще чего ... Вот и предложил 'идею'.


Digitman   (2004-12-09 12:35:00) [35]


> мне важны не столько проценты, сколько показать процесс


смотря как показывать будешь.

если VCL-контролами - выбрось эту мысль из головы, эти контролы обновляются в осн.трэде процесса, который в этот момент занят загрузкой формы


> я в принципе не понимаю почему проходит так много времени
> при
> загрузке


это печально. очень печально.
и еще более печально, что ты считаешь, что все в округе должны быть телепатами, угадывающими на расстоянии что ты там понакидал на форму


KSergey   (2004-12-09 12:33:00) [36]

> [3] Maxim_S~~   (09.12.04 12:12)
> создать дополнительный поток и в синхронизации он будет
> рисовать..

Теперь почитайте про метод Synhronyse и как он работает, чтобы такую чушь больше не городить.
> я в принципе не понимаю почему проходит так много времени
> при загрузке.

Вообще-то, никто кроме вас этого точно понять не сможет.
Хотя можно и погадать на кофейной гуще: базы данных используются? Компонентов много на автокрейтных формах?


Maxim_S~~   (2004-12-09 12:14:00) [37]

TUser ©   (09.12.04 12:11) [2]

смотаться в Питер для того чтобы показать мне как это делается?
что ж, можно..

а как ты догадался что я из Питера?


Maxim_S~~   (2004-12-09 12:12:00) [38]

мне важны не столько проценты, сколько показать процесс.
создать дополнительный поток и в синхронизации он будет рисовать..
или не будет? как это грамотно сделать?
я в принципе не понимаю почему проходит так много времени при
загрузке.
программа весит всего-то два с половиной метра...


TUser   (2004-12-09 12:11:00) [39]


> жду ваших идей.

У меня есть идея - в Питер смотаться. Годится?


Digitman   (2004-12-09 12:08:00) [40]


> До того как происходит mainForm.create проходит время


и это время как правило тратится на создание экземпляров компонентов, "лежащих" на форме

отсюда и решение - перекрыть у формы метод Notification()


Страницы:   1 2

Наверх

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