Ist prinzipiell schon der richtige Weg. Normalerweise wird das OO konform leicht anders umgesetzt:
Delphi-Quellcode:
TCompany = class
private
FOnChange: TNotifyEvent;
public
property OnChange read FOnChange write FOnChange;
end;
..
if Assigned(FOnChange) then FOnChange;
Delphi-Quellcode:
TForm1 = class(TForm)
..
private
procedure OnChange(Sender: TObject);
end;
..
MyCompany.OnCange := OnChange;
Sollte eigentlich funktionieren. Sehe zwar in deinem Code auch keinen Fehler, aber vielleicht hat Delphi da ja irgendwo eine Macke, wenn du es nicht korrekt über eine property machst.