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 ?