Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.04.2017, 19:28
MProg MProg вне форума
Прохожий
 
Регистрация: 12.04.2017
Сообщения: 8
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Принудительное удаление объекта изнутри

Собственно есть код:

Код:
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? Есть ли какие-то стандартные или нестандартные махинации со стеком или прыжками в иное место кода чтоб все адекватно удалялось и работало?

Буду признателен даже за извращенные варианты (хоть эта задачка в принципе извращенная вроде как)... Так сказать если не для дела, то для общего развития и более глубоко понимания сгодятся
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter