tbs0249.pp 1015 B

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