Тормоза при создании компонентов динамически

 
0
 
Delphi, Kylix & Pascal
ava
gesper | 25.01.2013, 17:37
Программа в одной процедуре создает, к примеру, 10 компонентов. 10 Label и 10 штук Edit напротив. обрабатывает их процедуры и все такое.
Есть какая то особенность их отрисовки при динамическом создании? У меня программа подтормаживает на этом действии, пока они создаются, напрягает.
Kommentare (8)
ava
Akella | 25.01.2013, 17:21 #
Ошибка в 17ой строке  smile 
ava
gesper | 25.01.2013, 17:32 #
Я об этом думал. и стер ее на всякий случай.

Может команду 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;
ava
Чучмек | 25.01.2013, 17:35 #
Цитата (gesper @  25.1.2013,  16:37 findReferencedText)
Есть какая то особенность их отрисовки при динамическом создании? 

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

ava
northener | 26.01.2013, 00:16 #
Цитата (gesper @  25.1.2013,  16:37 findReferencedText)
Есть какая то особенность их отрисовки при динамическом создании? 

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

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

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

Подозреваю, что там далеко не 30 компонент.
ava
northener | 26.01.2013, 00:48 #
Цитата (Чучмек @  26.1.2013,  00:42 findReferencedText)
Подозреваю, что там далеко не 30 компонент.


Я тоже много чего подозреваю, но мои подозрения полностью совпадают с ответом Akella.
А количество компонент тут не самый яркий показатель. Ибо кому нужно на форме иметь 30 тысяч компонент  типа TLabel, TEdit или TButton?
ava
Чучмек | 26.01.2013, 01:02 #
У меня 100 эдитов  создается за 0,015 с
1000 на видимой панели за 0,64 с, а на предварительно скрытой за 0,19 с
ava
northener | 26.01.2013, 01:50 #
Цитата (Чучмек @  26.1.2013,  01:02 findReferencedText)
У меня 100 эдитов  создается за 0,015 с

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




Что и требовалось доказать! smile
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden