Форум: "Основная";
Текущий архив: 2004.03.09;
Скачать: [xml.tar.bz2];
ВнизДинамическое создание контролов Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c