당신은 무엇을하려고합니까? 물론 TMyEvent
을 아직 할당하지 않았으므로 FTest
으로 전화 할 수 없습니다! 그리고 PMyClass
과 TMyEvent
은 실제로 TMyClass
의 일부가되어야합니까?
은 적어도이 완벽하게 작동합니다 : 물론
type
PMyClass = ^TMyClass;
TMyClass = class;
TMyEvent = procedure(Sender: PMyClass) of object;
TMyClass = class
private
FEvent: TMyEvent;
FSomeValue: string;
public
property OnSomething: TMyEvent read FEvent write FEvent;
property SomeValue: string read FSomeValue write FSomeValue;
procedure Test;
end;
TSomeOtherClass = class
public
class procedure MyEvent(Sender: PMyClass);
end;
...
procedure TForm6.FormCreate(Sender: TObject);
var
o: TMyClass;
begin
o := TMyClass.Create;
o.SomeValue := 'This is a test.';
o.OnSomething := TSomeOtherClass.MyEvent;
o.Test;
end;
{ TMyClass }
procedure TMyClass.Test;
begin
FEvent(@Self);
end;
{ TSomeOtherClass }
class procedure TSomeOtherClass.MyEvent(Sender: PMyClass);
begin
ShowMessage(TMyClass(Sender^).SomeValue);
end;
, 당신은 같은 객체의 TMyEvent
을 가질 수
type
TMyClass = class
private type
PMyClass = ^TMyClass;
TMyEvent = procedure(Sender: PMyClass) of object;
private
FEvent: TMyEvent;
FSomeValue: string;
public
procedure TheEventHandler(Sender: PMyClass);
property OnSomething: TMyEvent read FEvent write FEvent;
property SomeValue: string read FSomeValue write FSomeValue;
procedure Test;
end;
...
procedure TForm6.FormCreate(Sender: TObject);
var
o: TMyClass;
begin
o := TMyClass.Create;
o.SomeValue := 'This is a test.';
o.OnSomething := o.TheEventHandler;
o.Test;
end;
{ TMyClass }
procedure TMyClass.Test;
begin
FEvent(@Self);
end;
procedure TMyClass.TheEventHandler(Sender: PMyClass);
begin
ShowMessage(TMyClass(Sender^).SomeValue);
end;
을 정확히 그렇게 해. 이 코드는 내 D2010에서 컴파일됩니다. 왜 그렇게하고 싶지는 모르겠습니다. –
@ pop33 셀프는 이미 포인터입니다 ... 달성하려는 것은 무엇입니까? – jachguate
@ pop33 : 당신이하고있는 일에 대해 잘 모르겠다면, 아마도 대신'Sender : TMyObject'를 쓰길 원할 것입니다. @jachguate가 가리키는 것처럼, 객체 변수는 본질적으로 이미 "포인터"입니다. –