![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
|
#2
|
||||
|
||||
|
Архитектуру приложения следует пересмотреть и не придется вызывать деструктор из самого себя.
|
|
#3
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
|
#4
|
||||
|
||||
|
Попробуй сделать так:
Код:
procedure TFieldFigure.DeleteButtonClick(Sender: TObject);
begin
DeleteButton.OnClick:=nil;
Destroy; {!!!!!!!!!!}
end;хотя это все равно изврат ![]() |
|
#5
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
|
#6
|
||||
|
||||
|
И вызывай не Destroy, а Free. Destroy вообще вызывать нельзя.
|
|
#7
|
||||
|
||||
|
Походи отладчиком, может после деструкции что-то еще выполняется.
|
|
#8
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
|
#9
|
||||
|
||||
|
Повторяю:
Цитата:
|
|
#10
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:13. |
|
#11
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
|
#12
|
||||
|
||||
|
Сделал 2 разных варианта, оба работают:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TSomeObject = class
private
FButFlag:Cardinal;
FBut1:TButton;
FBut2:TButton;
procedure But1Click(Sender:TObject);
procedure But2Click(Sender:TObject);
public
constructor Create(AButParent:TWinControl);
destructor Destroy;override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TSomeObject }
procedure TSomeObject.But1Click(Sender: TObject);
begin
FButFlag:=1;
Destroy;
end;
procedure TSomeObject.But2Click(Sender: TObject);
begin
FButFlag:=2;
Free;
Sender.Free;
end;
constructor TSomeObject.Create(AButParent: TWinControl);
begin
FBut1:=TButton.Create(AButParent);
with FBut1 do
begin
Parent:=AButParent;
Caption:='test 1';
Left:=100;
Top:=100;
OnClick:=But1Click;
end;
FBut2:=TButton.Create(AButParent);
with FBut2 do
begin
Parent:=AButParent;
Caption:='test 2';
Left:=200;
Top:=100;
OnClick:=But2Click;
end;
end;
destructor TSomeObject.Destroy;
begin
case FButFlag of
1:
begin
FreeAndNil(FBut1);
FreeAndNil(FBut2);
end;
2:
begin
FreeAndNil(FBut1);
end;
end;
inherited;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
TSomeObject.Create(Self);
end;
end. |
|
#13
|
||||
|
||||
|
Цитата:
Деструктор виртуальный, г-н Дарк тебе правильно написал, НЕ ТРОГАЙ ДЕСТРУКТОР, БЛДЖАД! В твоем случае ты вызываешь деструктор с TObject, который абстректен и виртуален, в итоге и получаешь эксепшн. |
|
#14
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
|
#15
|
|||
|
|||
|
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |