![]() |
| ||
|
|
Новости |
Поиск |
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;
Но моя прога при этом зависает, не выдавая никаких ошибок, просто тупо виснет... Как быть?
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; {