Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.51 MB
Время: 0.012 c
14-25892
Nick-From
2004-02-14 21:44
2004.03.09
институт для глухих детей


3-25686
Марат
2004-02-11 08:24
2004.03.09
Очистка DBGrid


14-25868
PVOzerski
2004-02-17 10:25
2004.03.09
Возникли проблемы с сетью после hotfix ов...


8-25828
Грибовод
2003-11-09 10:57
2004.03.09
Затемнение


14-25927
barby
2004-02-09 12:36
2004.03.09
---|Ветка была без названия|---




   Наверх