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;

Но моя прога при этом зависает, не выдавая никаких ошибок, просто тупо виснет... Как быть?


Kolan   (2008-04-16 14:19:00) [1]

> мне нужен массив таких объектов … (не понял слово «инстанцировать»)

Создать


SergeyIT   (2008-04-16 14:12:00) [2]


> Я думал что дело в том что все происходит в отдельном потоке

Еще придется поизучать как с визуальными компонентами работать в отдельном потоке, а это будет посложнее...


Сергей М.   (2008-04-16 14:07:00) [3]


> 4ort   (16.04.08 14:03) [48]


В справке есть тема:

"Working with frames"

Проштудируй ее внимательно, до полного понимания, тогда нужда в огороде сразу отпадет.


4ort   (2008-04-16 14:03:00) [4]


> Kolan ©   (16.04.08 14:00) [47]
> Непонятно зачем вообще городить этот огород, если можно
> просто накидать на фрейм нужные компоненты и потом инстанцировать
> его…


мне нужен массив таких объектов ... (не понял слово "инстанцировать")


Kolan   (2008-04-16 14:00:00) [5]

> Я не представляю что это — наверно что-то вроде Parent'а…)
> ))

Как бы тебе объяснить. Программирование это не искусство (Art). Ненадо воображать. Ответ есть в справке.


> Вот еще что (незнаю насколько это важно) но все дело происходит
> на Frame.

Непонятно зачем вообще городить этот огород, если можно просто накидать на фрейм нужные компоненты и потом инстанцировать его…


4ort   (2008-04-16 13:58:00) [6]


> Kolan ©   (16.04.08 13:53) [43]
>...
> А как теперь выглядит удаление?
>..


Деструктор написан в [25];

> Kolan ©   (16.04.08 13:54) [44]
>...
> Кстати что ты знаешь про владельцев (Owner)?
>...


Я не представляю что это - наверно что-то вроде Parent'а....)))

Вот еще что (незнаю насколько это важно) но все дело происходит на Frame.


Сергей М.   (2008-04-16 13:57:00) [7]


> все это происходит на WinXP, и то только если стоит тема
> с округлыми кнопочками


Вот округлостью кнопочек ты шибко озабочен, а умение пользоваться отладчиком для самостоятельного поиска своих же ляпов  - оно дело не царское. Так ?)


Kolan   (2008-04-16 13:54:00) [8]

> im_Demand := TImage.Create(Parent);

…

> destructor TTenderPreview_Body.Destroy;
> begin
> BodyShape.Free;
> SectionShape.Free;
> DemandShape.Free;
…


Кстати что ты знаешь про владельцев (Owner)?


Kolan   (2008-04-16 13:53:00) [9]

> в остальных случаях все ок …

Неужели непонятно, что это тут не причем.

Сделай тестовый проект (отдельный). Сабжевй класс сделай проще (только 1 Лейбл внутри)…

ЗЫ
 Кстати, возникло подозрение…

> Да я уже давно его нереназвал в Destroy;

А как теперь выглядит удаление?


4ort   (2008-04-16 13:51:00) [10]

umbra ©   (16.04.08 13:46) [40]

Да я уже давно его нереназвал в Destroy; - Вс тоже самое ... ((( вот что будешь делать .... причем все это происходит на WinXP, и то только если стоит тема с округлыми кнопочками ... в остальных случаях все ок ...


Kolan   (2008-04-16 13:47:00) [11]

> Нельзя называть деструктор Free

Как бы можно, но не нужно :)


4ort   (2008-04-16 13:46:00) [12]

Kolan ©   (16.04.08 13:44) [37]

ну это дело поправимое - мне просто интересно - почему Label'ы не уничтожаются ...


umbra   (2008-04-16 13:46:00) [13]

2 4ort

Нельзя называть деструктор Free
Назовите его Destroy:) И скажите, что случится после этого.


Сергей М.   (2008-04-16 13:45:00) [14]


> что неправильного тут ?


По кр.мере, неправильно отсутствие спецификаторов области видимости объявляемых тобой идентификаторов.

Читай про private, protected, public, published


Kolan   (2008-04-16 13:44:00) [15]

> блин что неправильного тут ??

Кроме того, что ты поместил все в published секции все более мение.


4ort   (2008-04-16 13:43:00) [16]

блин что неправильного тут ??

TMyClass = class
  A : TLabel;
  B : TImage;
  constructor Create (Parent : TWinControl);
  destructor Destroy; override;
end;


Kolan   (2008-04-16 13:42:00) [17]

> не понял вопроса…

Про TFrame прочитай (срочно). :)


Сергей М.   (2008-04-16 13:42:00) [18]


> непредставляю что имеется ввиду под отладчиком


Дык возьми да впочитай про него в справке, в чем проблема ?


> если это про интерпритатор


Какой такой "интерпритатор" ?


> молчит как партизан


Ты у него не спрашиваешь, вот он и молчит)
С какого перепугу он должен тебе сам все рассказать да показать ?)


4ort   (2008-04-16 13:41:00) [19]


> Kolan ©   (16.04.08 13:39) [28]
> > вот конструкор
>
> Что ты знаешь про фреймы ? :)


не понял вопроса....


Kolan   (2008-04-16 13:41:00) [20]

Надо не так:
> TMyClass = class
>   A : TLabel;
>   B : TImage;
>   constructor Create (Parent : TWinControl);
>   destructor Free;
> end;


А как минимум так:

TMyClass = class
 A : TLabel; {


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

Наверх

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