pascalabcnet/TestSuite/events1.pas
Бондарев Иван e6e67c193c initial commit
2015-05-14 21:35:07 +02:00

108 lines
1.8 KiB
ObjectPascal

type
TProc = procedure(sender: object);
TProc2 = procedure;
var
i: integer;
type
IInt = interface
event OnClick: System.EventHandler;
end;
TClass1 = class
event OnClick: procedure(sender: object);
class event OnClick_s: TProc2;
procedure MyProc(sender: object);
begin
i := 9;
end;
constructor Create;
begin
OnClick += MyProc;
OnClick(self);
assert(i = 9);
OnClick -= MyProc;
end;
procedure RaiseMethod;
begin
if OnClick <> nil then
OnClick(self);
end;
class procedure RaiseMethod2;
begin
OnClick_s;
end;
end;
TClass2 = class(IInt)
event OnClick: System.EventHandler;//procedure(sender: object);
class event OnClick_s: TProc2;
procedure MyProc(sender: object; ev: System.EventArgs);
begin
i := 9;
end;
constructor Create;
begin
OnClick += MyProc;
OnClick(self, nil);
assert(i = 9);
OnClick -= MyProc;
end;
procedure RaiseMethod;
begin
if OnClick <> nil then
OnClick(self, nil);
end;
class procedure RaiseMethod2;
begin
OnClick_s;
end;
end;
procedure MyProc(sender: object);
begin
i := 8;
end;
procedure MyProc(sender: object; ev: System.EventArgs);
begin
i := 8;
end;
procedure MyProc2;
begin
i := 7;
end;
var
t: TClass1;
t2: TClass2;
p: procedure (sender: object);
begin
t := new TClass1;
t.OnClick += MyProc;
t.RaiseMethod;
assert(i = 8);
TClass1.OnClick_s += MyProc2;
TClass1.RaiseMethod2;
assert(i = 7);
i := 0;
t2 := new TClass2;
t2.OnClick += MyProc;
t2.RaiseMethod;
assert(i = 8);
TClass2.OnClick_s += MyProc2;
TClass2.RaiseMethod2;
assert(i = 7);
end.