Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.028 c
3-1169559474
Petrovsky
2007-01-23 16:37
2007.04.15
Странная ошибка


1-1171963386
RJ
2007-02-20 12:23
2007.04.15
указатель на форму


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


15-1174387551
zdm
2007-03-20 13:45
2007.04.15
КААТАСТРОФФФААААА!!!, хэлп


8-1149606425
tsa
2006-06-06 19:07
2007.04.15
Требуется пример работы с DSPack




   Наверх