|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
Походи отладчиком, может после деструкции что-то еще выполняется.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#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, который абстректен и виртуален, в итоге и получаешь эксепшн. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#14
|
|||
|
|||
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |
#15
|
|||
|
|||
DELETED MESSAGE
Последний раз редактировалось cmepthuk, 19.07.2016 в 19:12. |