Текущий архив: 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.03 c