Da gibt es eine Menge Lösungen.
1. Aufnahme der unit1 unter uses wodurch Zugriff auf Funktionen und Eigenschaften, die als public definiert wurden, gewährt wird.
2. Definition eines callback-Mechanismus (man korrigiere meine Bezeichnung

) über entweder TNotification oder eigene Prozeduren
Code: Alles auswählen
(unit2)
type
TOnData=procedure(Sender:TObject; const aValue:TMyData) of object;
...
private
FOnData : TOnData;
public
OnData : TOnData read FOnData write FOnData;
...
procedure unit2.xyz()
if assigned(FOnData) then FOnData(self,12345);
In der behandelnden Klasse muss eine entsprechende Prozedur definiert werden.
Code: Alles auswählen
(unit1)
private
procedure DoOnData(Sender:TObject; const aValue:TMyData);
...
procedure FormCreate
<unit2>.OnData:=@DoOnData;
3. Per Send|PostMessage oder Perform, die an Fenster verschickt werden kann. Ein Beispiel dafür:
eine global bekannte Funktion, die dadurch überall aufgerufen werden kann
Code: Alles auswählen
const WM_MYDATA=WM_USER+100;
procedure BroadCastMessage(Msg:Word);
var i:integer;
begin
for i:=0 to Screen.FormCount-1 do
Screen.Forms[i].Perform(Msg,0,0);
end;
(unit1)
private
procedure OnData(var Msg: TMessage); message WM_MYDATA;
...
procedure uni1.OnData()
showmessage(unit2.caption);
(unit2 oder sonstwo)
BroadCastMessage(WM_MYDATA);
4. Datenaustausch über das Filesystem, z.B. Memory Mapped File