Hallo!
Ich habe ein Object, das von mehreren Objecten geändert werden kann. Es speichert zentral Informationen ab. Wenn die Informationen von einem Object geändert wurden, sollen diese Änderungen auch an die anderen Objekte weitergegeben werden. Dazu wird von den Objekten eine Callback-Funktion aufgerufen, und die Objekte (z.b. Object A) laden sich die Informationen von dem Daten-Object (Object B) neu.
Was muss ich anders machen?
Vielen Dank für baldige Antworten!
Bei allen Objecten A wurde das FObjectB (über eine Property) nach dem Erstellen zugewiesen.
Folgender Code bei Object A:
Delphi-Quellcode:
FObjectB: TObjectB;
FChangeCausedbyObjectB:
Procedure of Object;
FChangeCausedbyObjectB:= ChangeCausedbyObjectB;
// wird bei .Create zugewiesen
property ObjectB: TObjectB
read FObjectB
write SetObjectB;
procedure ObjectA.SetFObjectB(_ObjectB: TObjectB);
begin
// Das ObjectB wird zugewiesen
FObjectB:= _ObjectB;
// Ich kann nun gültige Informationen aus Object B auslesen. Soweit alles OK.
// Die Funktion ObjectA.ChangeCausedbyObjectB auslösen lassen, wenn sich bei ObjectB etwas ändert.
FObjectB.CallBackList.Add(@FChangeCausedbyObjectB);
end;
procedure ObjectA.ChangeCausedbyObjectB;
begin
// Hier tritt nun das Problem auf, wenn diese Prozedur von ObjectB aufgerufen wird
if assigned(FObjectB)
then begin // FObjectB ist zugewiesen
if FObjectB.InheritsFrom(TFObjectB)
then begin // trifft nicht zu oder löst sogar Exception aus <-- PROBLEM
FdtpAusblendDatum.DateTime := floor(FObjectB.User_EndDate);
end;
end;
end;
Folgender Code bei Object B:
Delphi-Quellcode:
CallBackList: TList;
// wurde bei .Create miterschaffen
procedure ObjectB.Irgendwas;
var
i: integer;
CBProc:
Procedure of Object;
begin
for i := 0
to CallBackList.Count - 1
do begin // alle ObjekteA benachrichtigen
if assigned(CallBackList.Items[i])
then begin
try
@CBProc := CallBackList.Items[i];
// Pointer auslesen
CBProc;
// d.h. alle Prozeduren aufrufen
except
on e:
exception do begin
end;
end;
end;
end;
end;