AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Eigene TObjectList

Ein Thema von RWarnecke · begonnen am 23. Jan 2010 · letzter Beitrag vom 23. Jan 2010
Antwort Antwort
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
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Eigene TObjectList

  Alt 23. Jan 2010, 17:15
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

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

Re: Eigene TObjectList

  Alt 23. Jan 2010, 17:59
Hallo David,
Zitat von mirage228:
In der Klasse, die in der Objektliste gespeichert wird?
Ja, die Klasse wird in der Objektliste gespeichert.
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.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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