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