bug0249.pp 1000 B

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