Thema: Delphi Eigene TObjectList

Einzelnen Beitrag anzeigen

Benutzerbild von RWarnecke
RWarnecke

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

Eigene TObjectList

  Alt 23. Jan 2010, 16:08
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat