Вероятно не совсем аналогичная ситуация, но очень похожая:
Есть TFrame следующего вида
- Код: Выделить всё
TAnyTermFrame = class(TFrame)
// собственно его наполние .. к сути дела не имеет отношения .. важнее следующее:
DeleteBtn: TButton;
procedure DeleteBtnClick(Sender: TObject);
private
// Естественно и тут не пусто
FOnDestroy: TDestroyEvent;
public
// И тут тоже что-то есть + следующее
property OnDestroy: TDestroyEvent read FOnDestroy write FOnDestroy;
end;
procedure TAnyTermFrame.DeleteBtnClick(Sender: TObject);
begin
if Assigned(FOnDestroy) then FOnDestroy(Self);
Free;// в FreePascal вызывает ошибку SIGSEGV а вот Delphi благополучно съедает
end;
Обратите на комент в процедуре DeleteBtnClick, собственно любой объект кроме TForm (собственно только TForm.Close) не удаётся уничтожить изнутри ... ошибка SIGSEGV.
Думаю не стоит обсуждать для чего это нужно, всё прозрачно, любой потомок TControl созданный в процессе выполнения нужно когда-то уничтожить. Нередко по событию самого объекта. Выше предложенный трюк с Abort не прокатывает.
Могу только гадать почему такая несправедливость, обратите внимание Delphi аналогичный код собирает и выполняет.
Помогите "правильно" уничтожить объект "изнутри".