Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.09;
Скачать: CL | DM;

Вниз

Динамическое создание контролов   Найти похожие ветки 

 
Yad   (2004-02-26 13:02) [0]

Динамически создаются компоненты в программе и вот эта операция:
MyComponent.Parent := Form1;
сжирает больше всего времени, можно ли как-нить ускорить это?


 
Тимохов ©   (2004-02-26 13:07) [1]

Сколько компонентов?
Как ты проверяешь, что именно эта операция сжирает больше всего времени?


 
Yad   (2004-02-26 13:12) [2]

Компонентов - 100. Убираю её - раз в 10 быстрее работает.


 
Тимохов ©   (2004-02-26 13:15) [3]

Вы это проверяете из под дельфи, или из готового exe?
Дело в том, что при определенных не понятных для меня условиях из под дельфи работает несколько дольше. Иногда сильдо дольше.
Вообще говоря при 100 компонентах заметно ничего не должно быть.

Приведите кусочек кода...


 
Yad   (2004-02-26 13:16) [4]

Когда делаю MyComponent.ParentWindow := Form1.Handle, то всё существенно ускоряется, однако контролы уже не реагируют на события.


 
Тимохов ©   (2004-02-26 13:17) [5]

И вообще какова разница во времени со строкой и без строки?


 
Yad   (2004-02-26 13:20) [6]

И exe и Delphi, кусок кода:

for indx := 0 to 99 do
begin
Eds[indx] := TMyEd.Create(self);
Eds[indx].Top := TempTop;
Eds[indx].Left := TempLeft;
Eds[indx].Width := 50;
Eds[indx].Parent := self;
Eds[indx].Visible := true;
end;


 
Yad   (2004-02-26 13:23) [7]

При строке - 3 секунды, без неё - меньше секунды;


 
Тимохов ©   (2004-02-26 13:27) [8]

Что такое TMyEd?


 
alless ©   (2004-02-26 13:28) [9]

Esli Component Edit, to stroka (IMHO)
>Eds[indx].Visible := true;
mojno ubrati.


 
TUser ©   (2004-02-26 13:29) [10]

Наверное, время есть прорисовка компонентов на форме, а не присвоение перента


 
Тимохов ©   (2004-02-26 13:29) [11]


> alless © (26.02.04 13:28) [9]

Все равно 3 секунды для 100 компонент это чудовищно долго.


 
Тимохов ©   (2004-02-26 13:30) [12]


> TUser © (26.02.04 13:29) [10]

Все равно долго...

Автору: а какой у вас комп?


 
Yad   (2004-02-26 13:31) [13]

>Тимохов ©:
TMyEd = class(TLabeledEdit)
procedure CMExit(var Message: TCMExit); message CM_EXIT;
procedure CMEnter(var Message: TCMEnter); message CM_ENTER;
procedure KeyPress(var Key: Char); override;
procedure KeyDown(var Key: word; Shift: TShiftState); override;
public
Numb: Integer;
Price: double;
end;

>alless ©
нет, Eds[indx].Visible := true тормозит гораздо меньше;


 
Yad   (2004-02-26 13:33) [14]

комп C-600


 
Тимохов ©   (2004-02-26 13:36) [15]

А что в CMEnter и CMExit?


 
Yad   (2004-02-26 13:43) [16]

В CMExit и СMEnter выполняются обращения к таблицам, полагаете они вызываются при Eds[indx].Parent := self ?


 
Тимохов ©   (2004-02-26 13:46) [17]


> Yad (26.02.04 13:43) [16]

На память не помню.
А вы проверьте.
Для начала просто закомментарьте тела CMExit и CMEnter и проверьте.


 
Yad   (2004-02-26 13:46) [18]

Но ведь я экспериментировал и с обычными контролами и тоже самое:
MyComponent.Parent := Form1 - тормозит больше всех операций


 
Yad   (2004-02-26 13:47) [19]

проверил, результат тот же


 
Тимохов ©   (2004-02-26 13:51) [20]


> Yad (26.02.04 13:46) [18]

3 секунды 100 компонентов не добавляется.
Ищите ошибку в другом месте.
Только что добавил 1000 компонентов за 0.5 сек.
Комп немногим быстрее вашего.


 
Yad   (2004-02-26 13:53) [21]

Компоненты TLabeledEdit????


 
Тимохов ©   (2004-02-26 13:58) [22]


> Yad (26.02.04 13:53) [21]

Нет TEdit.
Согласен с вами - именно этот добавляется намного дольше чем TEdit.
Сейчас подробнее посмотрю.


 
vl_chel ©   (2004-02-26 14:05) [23]

Рекомендую

Eds[indx] := TMyEd.Create(nil);
Eds[indx].Name := "MyEdit"+IntToStr(indx);

установка visible необязательно

а размеры компонента желательно устанавливать с помощью метода SetBounds


 
Тимохов ©   (2004-02-26 14:09) [24]

Автору.
Что-то да, долгонько работает. При этом TEdit существенно бустрее.
Может забить на такое количество компонентов и сделать как-то по другому?
Например, через грид?


 
Yad   (2004-02-26 14:10) [25]

>vl_chel © да, стало пошустрей немного.


 
Yad   (2004-02-26 14:13) [26]

>Тимохов ©
с гридом - сложнее.
мне надо в ширину и в длину рисовать и события у каждой ячейки обрабатывать


 
Тимохов ©   (2004-02-26 14:18) [27]

Еще можешь перед вставкой у форму сделать DisableAlign(), соответственно после enableAlign().
Также даст ускорение.


 
Yad   (2004-02-26 14:23) [28]

СПАСИБО ОГРОМНОЕ!!! :))


 
Anatoly Podgoretsky ©   (2004-02-26 14:27) [29]

Не эта операция тормозит, а прорисовка и все связанные с этим обработчики.


 
Тимохов ©   (2004-02-26 14:29) [30]


> Yad (26.02.04 14:23) [28]
> СПАСИБО ОГРОМНОЕ!!! :))

Что сильно ускорило?


 
Yad   (2004-02-26 14:33) [31]

Очень существенно



Страницы: 1 вся ветка

Текущий архив: 2004.03.09;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.014 c
1-25822
Berezne
2004-02-25 16:56
2004.03.09
Вопрос по DLL


1-25763
Romstein
2004-02-26 16:13
2004.03.09
2D движок


14-25891
Akvilon
2004-02-15 02:04
2004.03.09
Ресурсы


14-25934
Serpent
2004-02-12 19:45
2004.03.09
Всех с наступающим праздником!


14-25935
xMan
2004-02-13 15:48
2004.03.09
Установка SP1 На WinXP Home