+ test from mantis #14155

git-svn-id: trunk@13401 -
This commit is contained in:
Jonas Maebe 2009-07-17 12:22:22 +00:00
parent 754696d1f5
commit e8088fd4ec
2 changed files with 65 additions and 0 deletions

1
.gitattributes vendored
View File

@ -9193,6 +9193,7 @@ tests/webtbs/tw1412.pp svneol=native#text/plain
tests/webtbs/tw14134.pp svneol=native#text/plain
tests/webtbs/tw1414.pp svneol=native#text/plain
tests/webtbs/tw14143.pp svneol=native#text/plain
tests/webtbs/tw14155.pp svneol=native#text/plain
tests/webtbs/tw1416.pp svneol=native#text/plain
tests/webtbs/tw1430.pp svneol=native#text/plain
tests/webtbs/tw1433.pp svneol=native#text/plain

64
tests/webtbs/tw14155.pp Normal file
View File

@ -0,0 +1,64 @@
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.