![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Правильность уничтожения [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; - Да/Нет?