Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Arbeiten mit Tobjectlist (https://www.delphipraxis.net/147670-arbeiten-mit-tobjectlist.html)

KahPee 13. Feb 2010 17:40


Arbeiten mit Tobjectlist
 
Hallo,

ich arbeite mit verschiedenen Objecten, die die Klasse TObjectlist beinhalten:
Delphi-Quellcode:
Tseite=class
    save: Tsave;
    pic: Timage;
    objects: TObjectlist;
  end;


  Tproject=class
    save: Tsave;
    Pages: Tobjectlist;
  end;
Nun habe ich ein Project deklariert und auch "kreirt"

Delphi-Quellcode:
var project: Tproject;
begin
project:=Tproject.Create
project.pages:=Tobjectlist.Create
Nun werden im Nachfolgenden Immer Objecte der Klasse Tseite project.pages zugefügt:
Delphi-Quellcode:
project.pages.add(TSeite.Create);
Und jetzt zu dem Problem, ich kann nicht auf "project.pages.Items[index].save" zugreifen..
Wo liegt bei dieser Verschachtelung das Problem und wie löse ich es?
Interessant ist das ganze, da es später zu weiteren Verschachtelungen in der Klasse Tseite kommt und so weiter kommt.

mfg KahPee

Edit: Kann ich eigentlich festlegen, dass in die Objectliste (project.pages) nur Objecte des Types Tseite geladen werden können?

daywalker9 13. Feb 2010 17:43

Re: Arbeiten mit Tobjectlist
 
du musst die einzelnen items in der objectlist casten:

Delphi-Quellcode:
tSeite(project.pages.items[0]).save;
Oder von welchem typ auch immer deine Objekte in der List sind

mleyen 13. Feb 2010 17:44

Re: Arbeiten mit Tobjectlist
 
Wenn du das Item wieder aus der Objektliste holst, musst du es erst wieder in das jeweilige Objekt casten.
Delphi-Quellcode:
Tseite(project.pages.Items[index]).save

KahPee 13. Feb 2010 17:53

Re: Arbeiten mit Tobjectlist
 
Delphi-Quellcode:
tSeite(project.pages.items[0]).save.saved:=true;
würde das Funktionieren (vorrausgesetzte Tsave enthält den Boolean save)?
Kann ich also die ObjeKte der Liste so direkt bearbeiten?

Noch eine Frage zu weiteren Verschachtelungen; ginge das dann auch so:
Delphi-Quellcode:
//weitere Deklaration
 Tfigure=class(Tobject)
    public
    pos: Tpoint

  end;

{zugriff auf das Object welches in der Objectliste einer Klasse des Typs Tseite (welche wiederum in der Liste der Klasse Tproject) deklariert ist}
Tfigure(Tseite(project.pages.Items[index]).objects.items[index]).pos
mfg Kahpee

KahPee 13. Feb 2010 18:49

Re: Arbeiten mit Tobjectlist
 
Wird eigentlich Tseite(project.pages.last).pic freigegeben wenn:
Delphi-Quellcode:
Tseite(project.pages.last).delete;
//oder
project.pages.free
bzw. was für einen Owner muss ich beim Konstruieren des Image angeben um genau das zu erreichen?

Tseite(project.pages.last) funktioniert als Owner nicht, da Tseite mit Tcomponent inkompatibel ist.

himitsu 13. Feb 2010 19:07

Re: Arbeiten mit Tobjectlist
 
Da diese untergeordneten Objekte zum Objekt gehören, sollten (gemäß den OOP-Regeln) diese auch nur von diesem Objekt erzeugt und freigegeben werden.

> Constructor und Destructor

Wenn du dir eine neues Objekt von TObjectList ableitest und das Property Items neu deklarierst, dann kannst du diesem direkt den Typ Tseite, bzw. Tfigure verpassen und ersparst dir dann so die Typumwandlungen.

KahPee 13. Feb 2010 19:16

Re: Arbeiten mit Tobjectlist
 
Zitat:

Zitat von himitsu
Da diese untergeordneten Objekte zum Objekt gehören, sollten (gemäß den OOP-Regeln) diese auch nur von diesem Objekt erzeugt und freigegeben werden.

Versteh ich das also richtig, dass das so funktioniert wie ich mir das wünsche?

WIe genau meinst du das mit dem ableiten. Ich mache das shcon an anderer Stelle, aber wie wäre in diesem Fall um sich die Arbeit zu vereinfachen? Könntest du mir da ein Beispiel geben?

generic 13. Feb 2010 19:34

Re: Arbeiten mit Tobjectlist
 
Zitat:

Zitat von mleyen
Wenn du das Item wieder aus der Objektliste holst, musst du es erst wieder in das jeweilige Objekt casten.
Delphi-Quellcode:
Tseite(project.pages.Items[index]).save

Man kann natürlich die TObjectlist ableiten (oder generics verwenden)
damit diese tseite zurück gibt und nicht tobject.

KahPee 13. Feb 2010 21:55

Re: Arbeiten mit Tobjectlist
 
wie würde das denn jetzt so als Beispiel aussehen? Ich progge erst seit kurzem mit Klassen, daher komm ich da nicht von alleine drauf :(

daywalker9 13. Feb 2010 22:05

Re: Arbeiten mit Tobjectlist
 
So zum beispiel:

TMeinObject kann zB dein TSeite sein

Delphi-Quellcode:
type
  TMyList = class(TObjectList)
  public
    function Add(AObject: TMeinObject): Integer;
    function First: TMeinObject;
    function Last: TMeinObject;
    property Items[Index: Integer]: TMeinObject read GetItem write SetItem; default;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr.
Seite 1 von 3  1 23      

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