![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Собственно есть код:
Код:
unit Unit1;
interface
uses SysUtils, Forms, Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
FB:TButton;
procedure FBClick(Sender: TObject);
{ Private declarations }
public
{ Public declarations }
end;
TMButton = class(TButton)
procedure Click; override;
end;
var
Form1: TForm1;
MB:TMButton;
implementation
{$R *.dfm}
procedure CreateTMButton();
begin
MB:=TMButton.Create(Form1);
MB.Width:=Form1.ClientWidth;
MB.Height:=Form1.ClientHeight-20;
MB.Caption:='Class';
MB.Parent:=Form1;
end;
procedure TMButton.Click;
begin
inherited;
//showmessage(inttostr(Integer(MB)));
FreeAndNil(MB);
//CreateTMButton();
//showmessage(inttostr(Integer(MB)));
//Showmessage('MButtonClick');
end;
procedure TForm1.FBClick(Sender: TObject);
begin
FreeAndNil(MB);
//CreateTMButton();
//Showmessage('FBClick');
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
CreateTMButton();
FB:=TButton.Create(Form1);
FB.Top:=Form1.ClientHeight-20;
FB.Height:=20;
FB.Width:=Form1.ClientWidth;
FB.Caption:='Form';
FB.OnClick:=FBClick;
FB.Parent:=Form1;
end;
end.В коде создается две кнопки: FB (для внешнего удаления), MB (для внутреннего удаления) При клике на FB все работает удовлетворительно. А при клике на MB происходит AV ошибка при выходе из процедуры из-за попытки передачи управления на уже несуществующие адреса. Вопрос в том как адекватно спилить под собой ветку и не налюбнутся с дерева? Тость, как можно адекватно(приближенно к правильному) удалять объект MB из той же TForm1.FBClick? Есть ли какие-то стандартные или нестандартные махинации со стеком или прыжками в иное место кода чтоб все адекватно удалялось и работало? Буду признателен даже за извращенные варианты (хоть эта задачка в принципе извращенная вроде как)... Так сказать если не для дела, то для общего развития и более глубоко понимания сгодятся ![]() |