Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#17

Re: Bei TList, Record auf Datenänderung reagieren

  Alt 31. Dez 2009, 10:31
Hallo Alexander,

leider komme ich mit Deinem Beispiel nicht ganz klar. Dort tauchen zu viele Fehler auf. Deshalb habe ich mich jetzt mal selber dran versucht und bin zu folgendem Ergebnis gekommen :
Delphi-Quellcode:
type
  TForm8 = class(TForm)
    Btn_3: TButton;
    procedure Btn_3Click(Sender: TObject);
  private
    { Private declarations }
    procedure ListeChange(Sender: TObject);
  public
    { Public declarations }
  end;

var
  Form8: TForm8;

implementation

{$R *.dfm}

type
  TKlasse = class
  private
    FWert1 : Integer;
    FWert2 : string;
  public
    property Wert1 : Integer read FWert1;
    property Wert2 : string read FWert2;
  end;

  TCustomObjectList = class(TObjectList)
  private
    FOnChange : TNotifyEvent;
  protected
    function getItem(index: Integer): TKlasse; virtual;
    procedure setItem(index: Integer; Objekt: TKlasse); virtual;
  public
    function Add(Objekt: TKlasse):Integer; virtual;
    function Remove(Objekt: TKlasse):Integer; virtual;
    function IndexOf(Objekt: TKlasse):Integer; virtual;
    procedure Insert(index: Integer; Objekt: TKlasse); virtual;
    property Items[index: Integer]: TKlasse read getItem write setItem; default;
    property OnChange: TNotifyEvent read FOnChange write FOnChange;
  end;

procedure TForm8.Btn_3Click(Sender: TObject);
var
  Liste: TCustomObjectList;
begin
  Liste := TCustomObjectList.Create(True);
  Liste.OnChange := ListeChange;

  Liste.Add(TKlasse.Create);
  Liste.Add(TKlasse.Create);
  Liste.Add(TKlasse.Create);
  Liste.Add(TKlasse.Create);

  Liste.Free;
end;

procedure TForm8.ListeChange(Sender: TObject);
begin
  ShowMessage('Ein neues Object hinzugefügt !!');
end;

{ TCustomObjectList }

function TCustomObjectList.Add(Objekt: TKlasse): Integer;
begin
  Result := inherited Add(Objekt);
  if Assigned(FOnChange) then
    FOnChange(Self)
end;

function TCustomObjectList.getItem(index: Integer): TKlasse;
begin
  Result := TKlasse(inherited Items[Index]);
end;

function TCustomObjectList.IndexOf(Objekt: TKlasse): Integer;
begin
  Result := inherited IndexOf(Objekt);
end;

procedure TCustomObjectList.Insert(index: Integer; Objekt: TKlasse);
begin
  inherited Insert(Index, Objekt);
end;

function TCustomObjectList.Remove(Objekt: TKlasse): Integer;
begin
  inherited Remove(Objekt);
end;

procedure TCustomObjectList.setItem(index: Integer; Objekt: TKlasse);
begin
  inherited Items[index] := Objekt;
end;
Das funktioniert auch soweit. Nur was muss ich machen, dass ich im OnChange Ereignis auf die Werte der Klasse zugreifen kann, die gerade in die ObjectListe eingefügt wurde ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat