Hallo zusammen,
ich habe nach dem Tutorial mir meine eigene TObjectList zusammengebaut :
Delphi-Quellcode:
TCustomObjectList = class(TObjectList)
protected
function getItem(Index: Integer): TKlasse; virtual;
procedure setItem(Index: Integer; Objekt: TKlasse); virtual;
public
function Add(Objekt: TKlasse): Integer; virtual;
function NewRecord(Objekt: TKlasse): Integer; virtual;
function Remove(Objekt: TKlasse): Integer; virtual;
function IndexOf(Objekt: TKlasse): Integer; virtual;
procedure Insert(Index: Integer; Objekt: TKlasse); virtual;
function First: TKlasse; virtual;
function Last: TKlasse; virtual;
property Items[index: Integer]: TKlasse read getItem write setItem; default;
end;
function TCustomObjectList.getItem(Index: Integer): TKlasse;
begin
Result := TKlasse(inherited Items[Index]);
end;
procedure TCustomObjectList.setItem(Index: Integer; Objekt: TKlasse);
begin
inherited Items[Index] := Objekt;
end;
function TCustomObjectList.Add(Objekt: TKlasse): Integer;
begin
Result := inherited Add(Objekt);
Objekt.NewRecord := False;
end;
function TCustomObjectList.NewRecord(Objekt: TKlasse): Integer;
begin
Result := inherited Add(Objekt);
Objekt.NewRecord := True;
end;
function TCustomObjectList.First: TKlasse;
begin
Result := inherited TKlasse(First());
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.Last: TKlasse;
begin
Result := inherited TKlasse(Last());
end;
function TCustomObjectList.Remove(Objekt: TKlasse): Integer;
begin
Result := inherited Remove(Objekt);
end;
In meiner TKlasse reagiere ich in den Set-Proceduren entsprechend auf die Variable
NewRecord. Das funktioniert auch wunderbar. Nur wie kann ich die Variable
NewRecord ebenfalls auf True ändern, wenn ein Wert in der Klasse neu geschrieben wird ? Dieses darf aber nur passieren, wenn nicht die Funktion Add ausgeführt wird. Bei Add muss der Wert
NewRecord=false sein.
Im Moment löse ich das Setzen der Variable in dem OnExit-Event der Eingabe-Komponente.