Главная страница
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.017 c
1-25782
Demon_mhm
2004-02-26 11:55
2004.03.09
Как изменить цвет фонта на кнопке


3-25706
User_OKA
2004-02-09 10:30
2004.03.09
FibDataSet


1-25796
Ш-К
2004-02-26 09:40
2004.03.09
Работа с классами


1-25813
Galerus
2004-02-25 20:36
2004.03.09
Сменить картинку .exe файла!


14-25877
OlimPer
2004-02-16 22:10
2004.03.09
Как сделать так, чтобы пользователь не мог пользоваться интренето