Ich hab hier schon etliche Beitraege gesucht und gefunden, die sich damit befassen, wie man Zirkulaere
Unit-Referenzen verhindert.
Ich befinde mich in einer Situation, in der eine zirkulaere Referenz unvermeidbar ist und kam mit einer leicht anderen Loesung hinterm Ofen hervor.
Vielleicht laufe ich damit spaeter in eine Sackgasse, oder ihr kennt andere Gruende warum ich das so nicht machen sollte.
Die Loesung, die ich am oeftesten sehe, beinhaltet ein Umgehen der Rueck-Referenz mit Events. Aber warum eigentlich Events?
Kann ich nicht genauso gut die Funktionen in einer Proxy-
unit anlegen und callen?
Delphi-Quellcode:
// MyMain.pas
uses
UnitX, MyMainProxy;
type
TMyMain = class(TForm)
StatusEdit: TEdit;
procedure SetGUIStatusOn;
public
FormCreate(Sender: TObject)
end;
[...]
procedure TMyMain.FormCreate(Sender: TObject);
begin
MMSetGUIValue := SetGUIStatusOn;
end;
procedure TMyMain.SetGUIStatusOn;
begin
StatusEdit.Text := 'PowerMonger status ON!';
end;
Delphi-Quellcode:
// MyMainProxy.pas
unit MyMainProxy;
interface
var
MMSetGUIValue:
Procedure of Object;
implementation
end.
Delphi-Quellcode:
// UnitX.pas (zirk. Ref. <-> MyMain benoetigt)
uses
MyMainProxy;
procedure UnitX.PerformHCoreOperation;
begin
MMSetGUIValue;
end;