Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
11-25725
avakss
2003-06-19 18:42
2004.03.09
KOLFTP


1-25784
din
2004-02-27 10:18
2004.03.09
отчет в Excel


7-25947
LordBTR
2003-12-17 11:51
2004.03.09
Группы пользователей домена


3-25680
КомофОнСамый
2004-02-10 19:34
2004.03.09
перетаскивание TitleButtion в RxLib


3-25712
Санек
2004-02-10 14:47
2004.03.09
Блокирование записи





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский