AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

CallBack lässt Object vergessen

Ein Thema von berens · begonnen am 12. Nov 2006 · letzter Beitrag vom 12. Nov 2006
 
berens

Registriert seit: 3. Sep 2004
431 Beiträge
 
Delphi 2010 Professional
 
#1

CallBack lässt Object vergessen

  Alt 12. Nov 2006, 10:24
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;
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz