Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уничтожение массива компонентами ...


Страницы:   1 2 3

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]

Воспользоваться отладчиком.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо