![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Уничтожение массива компонентами ...
4ort © (2008-04-16 13:05:00)доброе всем утро.
возникла проблема при удалении объектов...помогите решить
есть класс типа:
TMyClass = class
A : TLabel;
B : TImage;
constructor Create (Parent : TWinControl);
destructor Free;
end;
есть массив:
Arr : array of TMyClass;
так вот - при уделении пытаюсь делать так:
If Length (Arr) > 0 then begin
For I:=0 to Length (Arr) - 1 do begin
If Assigned (Arr[I]) then begin
Arr[I].Free;
end;
end;
SetLength (Arr, 0);
end;
В деструкторе написано:
destructor TMyClass.Free;
begin
A.Free;
B.Free;
end;
Но моя прога при этом зависает, не выдавая никаких ошибок, просто тупо виснет... Как быть?
Dennis I. Komarov (2008-04-16 13:25:00) [41]> [8] 4ort (16.04.08 13:21)
О компонентах пока речи вообще нет. У тебя класс, даже не наследуемый.
Давай так:
1. Почитать как надо
2. Сделать как понял из прочитанного
3. Сюда с вопросами
Сергей М. (2008-04-16 13:23:00) [42]
> вот если их (уничтожение A и B
А ты их создавал, прежде чем пытаться их уничтожать ?
Kolan (2008-04-16 13:23:00) [43]> ну даже если я объявлю его так
То что ты накатал в [0] говорит о том, что ты нихрена не понимаешь что делаешь
> все равно уничтожение A и B не работает
Это как ты узнал что оно не работает?
4ort (2008-04-16 13:21:00) [44]ну даже если я объявлю его так ..
Destructor Destroy; override;
что толку - все равно уничтожение A и B - не работает, а вот если их (уничтожение A и B) заккомментить - то все ок...но компоненты то остаются
Kolan (2008-04-16 13:16:00) [45]> Весьма конструктивный ответ )
Прочти первый том Тейксейры и Пачеко.
http://www.ksoftware.ru/files/books/Delphi/Delphi5_DevelopersGuide_Volume_1(rus).pdf
Там есть про синтаксис языка Delphi и про то как объявлять деструктор (и что это вообще такое) там тоже есть.
Dennis I. Komarov (2008-04-16 13:14:00) [46]> Идиотизм, учи мат часть.
+ в исходники VCL глянуть тоже никак.
Palladin (2008-04-16 13:14:00) [47]Ты даже не представляешь насколько в твоем случае...
4ort (2008-04-16 13:14:00) [48]Kolan © (16.04.08 13:10) [3]
....
destructor TMyClass.Free;
Идиотизм, учи мат часть.
....
Весьма конструктивный ответ )
Kolan (2008-04-16 13:10:00) [49]> If Length (Arr) > 0 then begin
> For I:=0 to Length (Arr) 1 do begin
1. Условие нанужно, если массив пустой цикл не выполнится.
2. Правильнее использовать Low и High
If Assigned (Arr[I]) then begin
Arr[I].Free;
Условие не нужно, оно есть во Free.
destructor TMyClass.Free;
Идиотизм, учи мат часть.
> Но моя прога при этом зависает, не выдавая никаких ошибок,
> просто тупо виснет
Мне бы тоже плохо стало.
4ort (2008-04-16 13:08:00) [50]Я думал что дело в том что все происходит в отдельном потоке ... а нет - выдвинул в OnClick Формы - тоже самое ... (((((((
Сергей М. (2008-04-16 13:06:00) [51]Воспользоваться отладчиком.