Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigene TObjectList (https://www.delphipraxis.net/146608-eigene-tobjectlist.html)

RWarnecke 23. Jan 2010 16:08


Eigene TObjectList
 
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.

mirage228 23. Jan 2010 17:15

Re: Eigene TObjectList
 
In der Klasse, die in der Objektliste gespeichert wird?

Also was ich mir vorstellen könnte, dass du die Klassen, die da reinsollen alle so konstruierst, dass sie von einer generischen Klasse ableiten, die diese Eigenschaft "NewRecord" besitzt. Und innerhalb der Unterklassen müsstest Du entsprechend alle Setter definieren und dort NewRecord auf False setzen. Ob da was mit der neuen RTTI ala Delphi 2010 geht, das etwas allgemeiner zu gestalten, kann ich allerdings (noch) nicht sagen...

Viele Grüße

RWarnecke 23. Jan 2010 17:59

Re: Eigene TObjectList
 
Hallo David,
Zitat:

Zitat von mirage228
In der Klasse, die in der Objektliste gespeichert wird?

Ja, die Klasse wird in der Objektliste gespeichert.
Zitat:

Zitat von mirage228
Also was ich mir vorstellen könnte, dass du die Klassen, die da reinsollen alle so konstruierst, dass sie von einer generischen Klasse ableiten, die diese Eigenschaft "NewRecord" besitzt. Und innerhalb der Unterklassen müsstest Du entsprechend alle Setter definieren und dort NewRecord auf False setzen. Ob da was mit der neuen RTTI ala Delphi 2010 geht, das etwas allgemeiner zu gestalten, kann ich allerdings (noch) nicht sagen...

Leider verstehe ich nicht, worauf Du hinaus willst. Ich suche ja lediglich nur eine Möglichkeit, die Variable NewRecord auf true zu setzen ausser bei der Aktion Add. Mehr brauche ich nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz