Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тормоза при создании компонентов динамически, Консультация по ускорению. 
:(
    Опции темы
gesper
Дата 25.1.2013, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Программа в одной процедуре создает, к примеру, 10 компонентов. 10 Label и 10 штук Edit напротив. обрабатывает их процедуры и все такое.
Есть какая то особенность их отрисовки при динамическом создании? У меня программа подтормаживает на этом действии, пока они создаются, напрягает.
--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
Akella
Дата 25.1.2013, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 8
Всего: 329



Ошибка в 17ой строке  smile 
PM MAIL   Вверх
gesper
Дата 25.1.2013, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


"Shарфик"
*


Профиль
Группа: Участник
Сообщений: 183
Регистрация: 23.2.2005

Репутация: 1
Всего: 2



Я об этом думал. и стер ее на всякий случай.

Может команду NewEdit.Show; вызывать у всех отдельно отдельным циклом... :(
Код

function TPropertyList.AddEdit(Index:Integer; NeedButton:boolean):String;
var
  NewEdit   :TEdit;
  NewButton :TButton;
begin
try
  CountObj:=CountObj+1;

  NewEdit             :=TEdit.Create(GroupControlParent); // CreateAOwner
  NewEdit.Parent      :=GroupControlParent;//ControlParent;
  NewEdit.Height      :=ControlHeight;
  if (Not NeedButton) then
  begin
    NewEdit.Width       :=ControlS2Width-ValuePaddingRight-2;
    NewEdit.Top         :=FPositionTop;
    NewEdit.Left        :=ControlS1Width-ValuePaddingLeft;
// 17 строка - Ошибок нет
  end else begin
    NewEdit.Width       :=ControlS2Width-ValuePaddingRight-2-ControlHeight;
    NewEdit.Top         :=FPositionTop;
    NewEdit.Left        :=ControlS1Width-ValuePaddingLeft;
  end;
  NewEdit.BorderStyle :=bsNone;
  //NewEdit.Anchors:=[akRight,akTop];
  NewEdit.Name        :=ObjPrefName+'objEdit'+inttostr(CountObj);

  Items[Index].ControlValue   :=NewEdit;

  if Items[Index].ValueType='String' then
  begin
      NewEdit.Text        :=Items[Index].Value;
      NewEdit.Hint        :=Items[Index].Hint;
      NewEdit.ReadOnly    :=Items[Index].ControlReadOnly;
  end
  else if Items[Index].ValueType='Double' then
  begin
      NewEdit.Text        :=Items[Index].Value;
      NewEdit.Hint        :=Items[Index].Hint;
      NewEdit.ReadOnly    :=Items[Index].ControlReadOnly;
  end
  else if Items[Index].ValueType='Integer' then
  begin
      NewEdit.Text        :=Items[Index].Value;
      NewEdit.Hint        :=Items[Index].Hint;
      NewEdit.ReadOnly    :=Items[Index].ControlReadOnly;
  end;

  if NeedButton then
  begin
      NewButton           :=TButton.Create(GroupControlParent);
      NewButton.Parent    :=GroupControlParent;//ControlParent;
      NewButton.Height    :=ControlHeight;
      NewButton.Width     :=ControlHeight;
      NewButton.Top       :=FPositionTop;
      NewButton.Left      :=NewEdit.Left+NewEdit.Width;
      NewButton.Caption   :='...';
      NewButton.OnClick   :=EditButtonClick;

      NewButton.Name               :=ObjPrefName+'objButton'+inttostr(CountObj);
      Items[Index].ControlButton   :=NewButton;
  end
  else
      Items[Index].ControlButton   :=nil;

  if Items[Index].ControlReadOnly then
    NewEdit.Color:=RowColorReadOnlyTrue
  else
    NewEdit.Color:=RowColorReadOnlyFalse;

  NewEdit.PopupMenu:=FPopupMenu;
  NewEdit.OnClick:=EditOnClick;
  NewEdit.OnChange:=EditOnChange;
  NewEdit.OnKeyPress:=EditOnKeyPress;
  NewEdit.OnEnter:=EditOnEnter;
  NewEdit.OnExit:=EditOnExit;

  NewEdit.Show;
  if NeedButton then NewButton.Show;
  result:=NewEdit.Name;
except
   application.MessageBox('TPropertyList.AddEdit','Class Error',0);
   result:=null;
end;
end;

--------------------
...И приколется обломившийся и oбломится приколовшийся...
PM MAIL   Вверх
Чучмек
Дата 25.1.2013, 17:35 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(gesper @  25.1.2013,  16:37 Найти цитируемый пост)
Есть какая то особенность их отрисовки при динамическом создании? 

Ты сам ответил. InsertControl включает в себя отрисовку компонента. От этого и торможение.




--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 26.1.2013, 00:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(gesper @  25.1.2013,  16:37 Найти цитируемый пост)
Есть какая то особенность их отрисовки при динамическом создании? 

Никакой, кроме той, о которой упомянул Akella.

Цитата(Чучмек @  25.1.2013,  17:35 Найти цитируемый пост)
Ты сам ответил. InsertControl включает в себя отрисовку компонента. От этого и торможение.

Сама по себе отрисовка 10-30 компонент типа TLabel, TEdit или TButton ну никак не может приводить к тормозам заметным человеческому глазу!


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Чучмек
Дата 26.1.2013, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



Цитата(northener @  26.1.2013,  00:16 Найти цитируемый пост)
Сама по себе отрисовка 10-30 компонент типа TLabel, TEdit или TButton ну никак не может приводить к тормозам заметным человеческому глазу! 

Подозреваю, что там далеко не 30 компонент.



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 26.1.2013, 00:48 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Чучмек @  26.1.2013,  00:42 Найти цитируемый пост)
Подозреваю, что там далеко не 30 компонент.

Я тоже много чего подозреваю, но мои подозрения полностью совпадают с ответом Akella.
А количество компонент тут не самый яркий показатель. Ибо кому нужно на форме иметь 30 тысяч компонент  типа TLabel, TEdit или TButton?


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
Чучмек
Дата 26.1.2013, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЭТ БИЛЭТ
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 11.5.2008
Где: СССР

Репутация: 7
Всего: 41



У меня 100 эдитов  создается за 0,015 с
1000 на видимой панели за 0,64 с, а на предварительно скрытой за 0,19 с



--------------------
умную мысль держи при себе, а дурной - поделись с другими 
PM MAIL   Вверх
northener
Дата 26.1.2013, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1361
Регистрация: 2.9.2010

Репутация: 12
Всего: 20



Цитата(Чучмек @  26.1.2013,  01:02 Найти цитируемый пост)
У меня 100 эдитов  создается за 0,015 с
1000 на видимой панели за 0,64 с, а на предварительно скрытой за 0,19 с


Что и требовалось доказать! smile


--------------------
Но только лошади летают вдохновенно.
Иначе лошади разбились бы мгновенно!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1318 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.