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

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

Помогите с деструктором [D2005, XP]


jacksotnik ©   (2012-01-25 18:11:00) 

Всем привет. Создаю объект
TnmStick = class(TObject)
 private
  FStickDelBtn    : TsSpeedButton;
  procedure FStickDelBtnClick(Sender: TObject);
 public
   DynMemo : TsMemo;

   constructor CreateStick(AOwnerPanel : TsPanel; const AString:string= '');
   destructor  Destroy; override;

В конструкторе создаю эту самую кнопку. В деструкторе делаю Free кнопочке. Мне надо чтоб по нажатии на эту кнопочку объект уничтожался. делаю так
procedure TnmStick.FStickDelBtnClick(Sender: TObject);
begin
 destroy;
end;
Объект уничтожается но при этом вываливается экзепшн. Access violation. Подскажите что я не так делаю


jacksotnik   (2012-01-25 18:48:00) [1]

Вот это другое дело. Спасибо большое


Плохиш   (2012-01-25 18:45:00) [2]

+ к

> Плохиш ©   (25.01.12 18:43) [9]

При нажатии кнопки проверяешь, присвоено ли что-то событию, если присвоено, то выполняешь.


Плохиш   (2012-01-25 18:43:00) [3]


> jacksotnik   (25.01.12 18:33) [8]
>
> У меня в этом объекте лежит панелька а на ней кнопочка,
> на мейнформе по нажатии на кнопку я создаю эти объекты,
> но уничтожать их мне надо именно при нажатии на эту динамически
> созданную кнопочку.
>

В классе создаёшь событие. "мейнформа" при создании экземпляра класса присваивает этому событию свой обработчик, в котором посылает сама себе сообщение с указателем на экземпляр. При получении сообщения "мейнформа" уничтожает переданный экземпляр класса.


jacksotnik   (2012-01-25 18:33:00) [4]

У меня в этом объекте лежит панелька а на ней кнопочка, на мейнформе по нажатии на кнопку я создаю эти объекты, но уничтожать их мне надо именно при нажатии на эту динамически созданную кнопочку. Получается какбы объект должен разрушить себя изнутри


brother   (2012-01-25 18:31:00) [5]

> В деструкторе

чьем? код совсем не полон, диагноз не поставить...


brother   (2012-01-25 18:30:00) [6]

хотя, самому себя уничтожать нельзя...


Плохиш   (2012-01-25 18:29:00) [7]


>  как уничтожить правильно

Кто создал, тот и уничтожает.

> TnmStick = class(TObject)
>  private
>   FStickDelBtn    : TsSpeedButton;
>   procedure FStickDelBtnClick(Sender: TObject);
>

А этому вообще в данном классе не место. Структура изначально не правильная.


brother   (2012-01-25 18:29:00) [8]

вместо этого
> destroy;

вызови FStickDelBtn.Free


brother   (2012-01-25 18:27:00) [9]

извини, но тут у тебя каша...


jacksotnik   (2012-01-25 18:24:00) [10]

Блин ну в принципе я это и понял. Вот и спрашиваю как уничтожить правильно


Плохиш   (2012-01-25 18:16:00) [11]


> Подскажите что я не так делаю

Попробуй выстрелить себе в голову, а потом вызвать скорую, тот же самый Access violation получишь.


Наверх

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