![]() |
Arbeiten mit Tobjectlist
Hallo,
ich arbeite mit verschiedenen Objecten, die die Klasse TObjectlist beinhalten:
Delphi-Quellcode:
Nun habe ich ein Project deklariert und auch "kreirt"
Tseite=class
save: Tsave; pic: Timage; objects: TObjectlist; end; Tproject=class save: Tsave; Pages: Tobjectlist; end;
Delphi-Quellcode:
Nun werden im Nachfolgenden Immer Objecte der Klasse Tseite project.pages zugefügt:
var project: Tproject;
begin project:=Tproject.Create project.pages:=Tobjectlist.Create
Delphi-Quellcode:
Und jetzt zu dem Problem, ich kann nicht auf "project.pages.Items[index].save" zugreifen..
project.pages.add(TSeite.Create);
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? |
Re: Arbeiten mit Tobjectlist
du musst die einzelnen items in der objectlist casten:
Delphi-Quellcode:
Oder von welchem typ auch immer deine Objekte in der List sind
tSeite(project.pages.items[0]).save;
|
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
|
Re: Arbeiten mit Tobjectlist
Delphi-Quellcode:
würde das Funktionieren (vorrausgesetzte Tsave enthält den Boolean save)?
tSeite(project.pages.items[0]).save.saved:=true;
Kann ich also die ObjeKte der Liste so direkt bearbeiten? Noch eine Frage zu weiteren Verschachtelungen; ginge das dann auch so:
Delphi-Quellcode:
mfg Kahpee
//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 |
Re: Arbeiten mit Tobjectlist
Wird eigentlich Tseite(project.pages.last).pic freigegeben wenn:
Delphi-Quellcode:
bzw. was für einen Owner muss ich beim Konstruieren des Image angeben um genau das zu erreichen?
Tseite(project.pages.last).delete;
//oder project.pages.free Tseite(project.pages.last) funktioniert als Owner nicht, da Tseite mit Tcomponent inkompatibel ist. |
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. |
Re: Arbeiten mit Tobjectlist
Zitat:
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? |
Re: Arbeiten mit Tobjectlist
Zitat:
damit diese tseite zurück gibt und nicht tobject. |
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 :(
|
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. |
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