Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TObjekt List Problem (https://www.delphipraxis.net/60411-tobjekt-list-problem.html)

maximus Caesar 6. Jan 2006 14:02


TObjekt List Problem
 
Hallo!
Ich hab ne TObjektList vom Namen Daten.Haus
Haus 1 ist vom Typ THaus
ich füge jetzt Daten.Haus ein Objekt vom Typ Haus1 hinzu, und gebe Werte an:


Delphi-Quellcode:
      b1:=Daten.Haus.Add(Haus1);
      THaus(Daten.Haus.Items[b1]).xpos:=i2;
      THaus(Daten.Haus.Items[b1]).ypos:=i;
      THaus(Daten.Haus.Items[b1]).Typ:=Typ;
      THaus(Daten.Haus.Items[b1]).Besitzer:=Besitzer+1;
auslesen tue ich diese z.B. so:

Delphi-Quellcode:
b1:=THaus(Daten.Haus.Items[x]).ypos;
auf diese Art speichere ich mehrere Objekte vom Typ Haus1 in der TObjektList Daten.Haus
jedes dieser Objekte hat Unterschiedliche Werte, und bei xpos und ypos kommt keine kombination doppelt vor.
Lese ich diese Werte jetzt von verschiedenen Objekten aus, so sind alle Werte immer die Gleichen.
Wo liegt mein Fehler?

dahead 6. Jan 2006 14:05

Re: TObjekt List Problem
 
musst du haus1 nicht erst create'n?

maximus Caesar 6. Jan 2006 14:05

Re: TObjekt List Problem
 
Wird schon beim starten des Programms gemacht
Allerdings in Unit1,
Und das erstellen is in der Unit Skript, das auslesen in der Unit speichern.
Könnte es daran liegen?
Auch is Daten.Haus in Unit1.

jim_raynor 6. Jan 2006 14:19

Re: TObjekt List Problem
 
Du machst immer b1:=Daten.Haus.Add(Haus1); ? ohne Haus1 neu zuerstellen? Dann kann das nicht klappen, da du ja nur die Objekt-Referenz der Liste hinzufügt. Das heißt du hast dann eine Liste mit zeigern, die auf das gleiche Objekt zeigen.

Besser wäre es so:

Delphi-Quellcode:
b1:=Daten.Haus.Add(THaus.Create)

maximus Caesar 6. Jan 2006 14:23

Re: TObjekt List Problem
 
Funktioniert!
Danke!

Muetze1 6. Jan 2006 15:02

Re: TObjekt List Problem
 
Und noch ein Tipp:

Dein Original Code:
Delphi-Quellcode:
b1:=Daten.Haus.Add(Haus1);
THaus(Daten.Haus.Items[b1]).xpos:=i2;
THaus(Daten.Haus.Items[b1]).ypos:=i;
THaus(Daten.Haus.Items[b1]).Typ:=Typ;
THaus(Daten.Haus.Items[b1]).Besitzer:=Besitzer+1;
Aber da Haus1 und auch Daten.Haus.Items[b1] genau die gleich Instanz beinhalten, kannst du natürlich das ganze einfacher gestalten, wenn du es so machst:

Delphi-Quellcode:
Daten.Haus.Add(Haus1);
Haus1.xpos:=i2;
Haus1.ypos:=i;
Haus1.Typ:=Typ;
Haus1.Besitzer:=Besitzer+1;

maximus Caesar 6. Jan 2006 15:29

Re: TObjekt List Problem
 
Jetzt nimmer!
Ich brauch den Code von jim_raynor....

Muetze1 6. Jan 2006 17:54

Re: TObjekt List Problem
 
Zitat:

Zitat von maximus Caesar
Jetzt nimmer!
Ich brauch den Code von jim_raynor....

Dann hast du OOP noch nicht verstanden:

Delphi-Quellcode:
Haus1 := THaus.Create;      // das war der einzige Unterschied zu jim_raynor's code...
Daten.Haus.Add(Haus1);      // kann hier oder am Ende der Zuweisungen stehen - ist egal, Erklärung: siehe zuvor...
Haus1.xpos:=i2;
Haus1.ypos:=i;
Haus1.Typ:=Typ;
Haus1.Besitzer:=Besitzer+1;

maximus Caesar 6. Jan 2006 18:27

Re: TObjekt List Problem
 
Das is mir schon klar!
Nur brauch ich des net, da ich kein Haus1 mehr verwende!
Das war nur für Daten.Haus.Add(Haus1); gedacht!
Ansonsten hat es in meinem Programm keine Bedeutung.

alzaimar 6. Jan 2006 20:02

Re: TObjekt List Problem
 
Der Code von Muetze1 ist aber erstens übersichtlicher und zweitens schneller. Ob Du Haus1 hinterher noch benötigst ist irrelevant. Das weiss der Compiler schon. Es ist keine Schande, eine Variable zu verwenden, im Gegenteil: Es herhöht die Übersichtlichkeit.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.
Seite 1 von 2  1 2      

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