Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Правильность уничтожения [D6, WinXP]


webpauk ©   (2007-02-20 19:47:00) 

var
 Arr: array of TImage;

procedure TForm1.Create(...
begin
 CreateArr;
end;

procedure TForm1.CreateArr;
var
 I: Integer;
begin
 SetLength(Arr, 10);
 for I:=Low(Arr) to High(Arr) do
 begin
   Arr[I]:=TImage.Create(Form1.ScrollBox1);
   Arr[I].Parent:=Form1.ScrollBox1;
   Arr[I].Left:=....
   Arr[I].OnClick:=DoSomeThing;
 end;
end;

procedure TForm1.DoSomeThing(Sender: TObject);
var
 I: Integer;
begin
 for I:=High(Arr) downto Low(Arr) do
 begin
    TImage(Arr[I]).Free;
 end;
end;


правильно ли я удаляю компоненты, представленные в виде массива?


Loginov Dmitry   (2007-02-21 13:25:00) [1]

> можно так переписать - эффективней по скорости выполнения
> будет (чуть-чуть).


:))


Суслик   (2007-02-21 12:15:00) [2]

ну если уж советы даются, то я тоже скажу :)

можно так переписать - эффективней по скорости выполнения будет (чуть-чуть).

procedure TForm1.CreateArr;
var
I: Integer;
Img: TImage;
begin
SetLength(Arr, 10);
for I:=Low(Arr) to High(Arr) do
begin
  Img := TImage.Create(Form1.ScrollBox1);
  Arr[I]:=Img;
  Img.Parent:=Form1.ScrollBox1;
  Img.Left:=....
  Img.OnClick:=DoSomeThing;
end;
end;


webpauk   (2007-02-21 12:13:00) [3]


> Юрий Зотов ©   (21.02.07 12:07) [7]

спсб
уже заработало
ошибка в 17 строке была.... 8)


Юрий Зотов   (2007-02-21 12:07:00) [4]

> StriderMan ©   (21.02.07 11:48) [6]

Да, но если их нужно уничтожить раньше?

> webpauk

Все верно.


StriderMan   (2007-02-21 11:48:00) [5]


> TImage.Create( Form1.ScrollBox1);

с такой конструкцией НЕ НУЖНО ручками уничтожать. ScrollBox1 при разрушении должен все грохнуть. Хочешь уничтожать ручками - создавай так:

TImage.Create(nil);


RASkov   (2007-02-21 10:37:00) [6]

Тоже самое, что и в [3] - только одной строкой FreeAndNil(Arr[i]);

> [4] REA   (21.02.07 10:06)

Можно..., но в приведенном примере более подойдет статич массив, т.е. var Arr: array [0..10] of TImage;


REA   (2007-02-21 10:06:00) [7]

Используй TList или TObjectList


icWasya   (2007-02-21 09:58:00) [8]

А для гарантии


begin
 Arr[I].Free;
 Arr[I]:=Nil;
end;


Loginov Dmitry   (2007-02-20 19:56:00) [9]

Arr[I].Free;

Правильно!


webpauk   (2007-02-20 19:48:00) [10]

собственно говоря интересует лишь: TImage(Arr[I]).Free; - Да/Нет?


Наверх

Титульная страница Поиск, карта сайта Написать письмо