12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- program project1;
- {$mode objfpc}
- type
- TSomeEvent = procedure(Sender: TObject; X, Y, Line: integer; mark: Integer) of object;
- type
- TSubObject = class(TObject)
- public
- SomeEvent: TSomeEvent;
- end;
- TMyObject = class(TObject)
- private
- fSub : TSubObject;
- protected
- procedure DoSomeEvent(Sender: TObject; X, Y, Line: integer; mark: Integer);
- public
- constructor Create;
- destructor Destroy; override;
- function GetSomeEvent: TSomeEvent;
- end;
- constructor TMyObject.Create;
- begin
- fSub := TSubObject.Create;
- fSub.SomeEvent := @Self.DoSomeEvent;
- end;
- destructor TMyObject.Destroy;
- begin
- fSub.Free;
- end;
- function TMyObject.GetSomeEvent: TSomeEvent;
- begin
- Result := fSub.SomeEvent;
- end;
- procedure TMyObject.DoSomeEvent(Sender: TObject; X, Y, Line: integer; mark: Integer);
- begin
- writeln('do some event');
- end;
- var
- my : TMyObject;
- mtd : TMethod;
- type
- TGetProc = function (): TMethod of object;
- begin
- my := TMyObject.Create;
- mtd := TGetProc(@my.GetSomeEvent)();
- writeln('mtd.Data = ', PtrInt(mtd.Data));
- writeln('mtd.Code = ', PtrInt(mtd.Code));
- if Assigned(TSomeEvent(mtd)) then
- TSomeEvent(mtd)(nil,0,0,0,0);
- my.Free;
- end.
|