![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с деструктором [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 получишь.