AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Arbeiten mit Tobjectlist

Offene Frage von "KahPee"
Ein Thema von KahPee · begonnen am 13. Feb 2010 · letzter Beitrag vom 14. Feb 2010
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#1

Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 18:40
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:
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?
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 18:43
du musst die einzelnen items in der objectlist casten:

tSeite(project.pages.items[0]).save; Oder von welchem typ auch immer deine Objekte in der List sind
Lars
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 18:44
Wenn du das Item wieder aus der Objektliste holst, musst du es erst wieder in das jeweilige Objekt casten.
Tseite(project.pages.Items[index]).save
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 18:53
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
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 19:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#6

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 20:07
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 20:16
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?
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 20:34
Zitat von mleyen:
Wenn du das Item wieder aus der Objektliste holst, musst du es erst wieder in das jeweilige Objekt casten.
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.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Benutzerbild von KahPee
KahPee

Registriert seit: 12. Mai 2009
214 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 22:55
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
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#10

Re: Arbeiten mit Tobjectlist

  Alt 13. Feb 2010, 23:05
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;
Lars
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 06:35 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