tbs0249.pp 1003 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. program TestEvent;
  2. {$mode objfpc}
  3. {$M+}
  4. type
  5. TNotifyEvent = procedure( Sender: TObject ) of object;
  6. THost = class
  7. FOnEvent: TNotifyEvent;
  8. procedure SetOnEvent( Value: TNotifyEvent );
  9. public
  10. constructor Create;
  11. procedure Trigger;
  12. procedure SayHello;
  13. published
  14. property OnEvent: TNotifyEvent read FOnEvent write SetOnEvent;
  15. end;
  16. TDummy = class
  17. procedure HandleEvent( Sender: TObject );
  18. end;
  19. constructor THost.Create;
  20. begin
  21. FOnEvent := nil;
  22. end;
  23. procedure THost.Trigger;
  24. begin
  25. if @FOnEvent <> nil then
  26. FOnEvent( Self )
  27. end;
  28. procedure THost.SetOnEvent( Value: TNotifyEvent );
  29. begin
  30. FOnEvent := Value
  31. end;
  32. procedure THost.SayHello;
  33. begin
  34. Writeln( 'Hello event' )
  35. end;
  36. procedure TDummy.HandleEvent( Sender: TObject );
  37. begin
  38. THost( Sender ).SayHello
  39. end;
  40. var
  41. Host: THost;
  42. Dummy: TDummy;
  43. begin
  44. Dummy := TDummy.Create;
  45. Host := THost.Create;
  46. with Host,Dummy do
  47. OnEvent := @HandleEvent; // this is 57, 27 is ";"
  48. Host.Trigger;
  49. end.