Текущий архив: 2007.05.13;
Скачать: CL | DM;
Вниз
TMemo с событием OnDestroy? Найти похожие ветки
← →
Ezorcist (2007-04-10 20:37) [0]
unit MMemo;
interface
uses
SysUtils, Classes, Controls, StdCtrls;
type
TMyAction = procedure (Sender:TObject) of object;
TMMemo = class(TMemo)
private
{ Private declarations }
FOnDestroy:TMyAction;
protected
{ Protected declarations }
public
{ Public declarations }
published
property OnDestroy:TMyAction read FOnDestroy write FOnDestroy;
destructor Destroy; override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Standard", [TMMemo]);
end;
destructor TMMemo.Destroy;
begin
FOnDestroy(self);
inherited;
end;
end.
Подскажите что тут не так? После установки такого чудо-компонента и помещения его на форму, новое приложение с этой memo вызывает invalid pointer operation при закрытии, и сама дельфи выдает массу сообщений eav при выходе.
← →
default © (2007-04-10 20:43) [1]destructor TMMemo.Destroy;
begin
if Assigned(FOnDestroy) then FOnDestroy(self); inherited;
end;
← →
Loginov Dmitry © (2007-04-10 20:45) [2]
destructor TMMemo.Destroy;
begin
if Assignet(FOnDestroy) then
FOnDestroy(self);
inherited;
end;
Причем FOnDestroy: TNotifyEvent;
← →
Ezorcist (2007-04-10 22:33) [3]А если еще и OnCreate?
....
published
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
constructor Create(aowner:Tcomponent);
....
constructor TMMemo.Create(aowner:Tcomponent);
begin
inherited;
If Assigned(FOnCreate) then FOnCreate(self);
end;
Опять что то не так...
← →
Сергей М. © (2007-04-11 08:20) [4]
..
private
FOnCreate, FOnDestroy: TNotifyEvent;
..
protected
..
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
..
published
..
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
property OnDestroy: TNotifyEvent read FOnDestroy write FOnDestroy;
..
procedure TMMemo.AfterConstruction;
begin
inherited;
If Assigned(FOnCreate) then FOnCreate(self);
end;
procedure TMMemo.BeforeDestruction;
begin
If Assigned(FOnDestroy) then FOnDestroy(self);
inherited;
end;
← →
Юрий Зотов © (2007-04-11 13:03) [5]А вообще, стоит сначала заглянуть в код VCL. Вполне возможно, что эти события уже есть и их надо только опубликовать.
← →
Ezorcist (2007-04-11 17:06) [6]
unit MMemo;
interface
uses
SysUtils, Classes, Controls, StdCtrls;
type
TMMemo = class(TMemo)
private
FOnDestroy:TNotifyEvent;
FOnCreate:TNotifyEvent;
protected
procedure AfterConstruction; override;
procedure BeforeDestruction; override;
public
published
property OnDestroy:TNotifyEvent read FOnDestroy write FOnDestroy;
property OnCreate: TNotifyEvent read FOnCreate write FOnCreate;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents("Standard", [TMMemo]);
end;
procedure TMMemo.AfterConstruction;
begin
inherited;
If Assigned(FOnCreate) then FOnCreate(self);
end;
procedure TMMemo.BeforeDestruction;
begin
If Assigned(FOnDestroy) then FOnDestroy(self);
inherited;
end;
end.
Destroy есть, Create нету(
← →
Юрий Зотов © (2007-04-20 01:43) [7]> Ezorcist (11.04.07 17:06) [6]
> Create нету
И не может быть. Сразу после создания контрола поле FOnCreate всегда будет равно nil, поэтому в этом коде:
procedure TMMemo.AfterConstruction;
begin
inherited;
If Assigned(FOnCreate) then FOnCreate(self);
end;
событие не сработает никогда.
Посмотрите метод Loaded - возможно, это и есть то, что вы ищете.
Страницы: 1 вся ветка
Текущий архив: 2007.05.13;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.061 c