1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- program tw38238;
- {$mode objfpc}
- {$modeswitch advancedrecords}
- type
- TCallback = procedure(AValue: longint) of object;
- TRec = record
- Clb: TCallback;
- procedure AddCallback(ACallback: TCallback);
- procedure TriggerCallback(AValue: longint);
- end;
- TRec2 = record
- Value: longint;
- Rec: TRec;
- procedure CLB(AValue: longint);
- procedure InitStuff;
- end;
- procedure TRec.AddCallback(ACallback: TCallback);
- begin
- Clb:=ACallback;
- end;
- procedure TRec.TriggerCallback(AValue: longint);
- begin
- if assigned(Clb) then
- Clb(AValue);
- end;
- procedure TRec2.CLB(AValue: longint);
- begin
- Value:=AValue;
- end;
- procedure TRec2.InitStuff;
- begin
- Rec.AddCallback(@CLB);
- end;
- var
- Rec1, Rec2: TRec2;
- begin
- Rec1.InitStuff;
- Rec2.InitStuff;
- Rec1.Rec.TriggerCallback(1234);
- Rec2.Rec.TriggerCallback($0943);
- if Rec1.Value<>1234 then
- Halt(1);
- if Rec2.Value<>$0943 then
- Halt(2);
- end.
|