Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.04.15;
Скачать: CL | DM;

Вниз

Правильность уничтожения   Найти похожие ветки 

 
webpauk   (2007-02-20 19:47) [0]

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;


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


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

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


 
Loginov Dmitry ©   (2007-02-20 19:56) [2]

Arr[I].Free;

Правильно!


 
icWasya ©   (2007-02-21 09:58) [3]

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


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


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

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


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

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

> [4] REA   (21.02.07 10:06)

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


 
StriderMan ©   (2007-02-21 11:48) [6]


> TImage.Create(Form1.ScrollBox1);

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

TImage.Create(nil);


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

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

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

> webpauk

Все верно.


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


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

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


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

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

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

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;


 
Loginov Dmitry ©   (2007-02-21 13:25) [10]

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


:))



Страницы: 1 вся ветка

Текущий архив: 2007.04.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.045 c
2-1174805889
GeLLeR
2007-03-25 10:58
2007.04.15
Drag and Drop


1-1171620919
Kolan
2007-02-16 13:15
2007.04.15
Программа + пакет = AV при инициализации. Наоборот все Ок...


15-1174368163
Calibr
2007-03-20 08:22
2007.04.15
JavaScript


5-1151158278
PRT
2006-06-24 18:11
2007.04.15
DelhiX в Delphi 7


2-1174632081
jjdeluxe
2007-03-23 09:41
2007.04.15
Проблема с Indy - ошибка при повторном idTCPClient.ReadStream