Einzelnen Beitrag anzeigen

Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#16

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 28. Dez 2009, 00:54
Oder:
Ableitung von TObjectList erstellen, da das OnChange Event dranpacken. Im Konstruktor von TGesellschaftsname gibst du die Liste mit. TGesellschaftsname kennt dann seine Liste und kann dann das Event an der Liste aufrufen (und sich vorher selbst der Liste hinzufügen), was du ja nur einmal im Programm an der Liste zuweisen musst. So wird die Liste eine Art Manager für die einzelnen Objekte, und es ist, finde ich, nicht unwahrscheinlich, dass man das gut gebrauchen kann, zum Beispiel für eine Funktion, die mit allen Objekten in der Liste irgendwas machen soll.
So hingetippselt, hoffe das funktioniert bzw. ist irgendwie unter Umständen hilfreich...

Delphi-Quellcode:
interface

type
  TGesellschafterListe = class;

  TGesellschafterListeChangeEvent = procedure(Sender: TObject; Obj: TGesellschaftsname) of object;

  TGesellschaftsname = class
  private
    FList: TGesellschafterListe;
  public
    procedure TriggerChange;
    constructor Create(List: TGesellschafterListe);
  end;

  TGesellschafterListe = class(TObjectList)
  private
    FOnChange: TGesellschafterListeChangeEvent;
  public
    property OnChange: TGesellschafterListeChangeEvent read FOnChange write FOnChange;
  end;

implementation

procedure TGesellschaftsname.Create(List: TGesellschafterListe);
begin
  inherited;
  FList := List;
  FList.Add(Self);
end;

procedure TGesellschaftsname.TriggerChange;
begin
  if Assigned(FList) then
    if Assigned(FList.OnChange) then
      FList.OnChange(FList, Self);
end;

procedure GesellschafterListeOnChange(Sender: TObject; Obj: TGesellschaftsname);
begin
  // Schnack, hier hat sich das Objekt "Obj" verändert
end;

var
  GesellschafterListe : TGesellschafterListe;
begin
  GesellschafterListe := TGesellschafterListe(True);
  GesellschafterListe.OnChange := GesellschafterListeOnChange;

  TGesellschaftsname.Create(GesellschafterListe);
  TGesellschaftsname.Create(GesellschafterListe);
  TGesellschaftsname.Create(GesellschafterListe);

  GesellschafterListe.Free;
end;
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat