![]() |
Delphi-Version: XE2
Probleme Übergeben einer TObjectlist
Wunder schönen guten MOrgen;
habe ein Problem mit einer Objectlist. Wollte ein Liste erstellen, die Koordinaten von der maus enthält. Hier das Type der Unit, wo die Liste drin ist.
Delphi-Quellcode:
type
TPunkte = class y_koordinat, x_koordinat: integer; end; type TPoly = class(TObject) protected function getnextkonvexhullpoint(punkt: TPunkte): TPunkte; private function LookHightKoordinat(punkte: TPunkte): TPunkte; public Liste: Tobjectlist<TPunkte>; function SaveKoordinatx: integer; function SaveKoordinaty: integer; constructor create; overload; end; in ner anderen unit wollte ich nun die Atrubute der Klasse Tpunkte füllen und diese anschließend der Liste Tpoly.liste hinzufügen sobald aber ein weiterer Koordinat hinzukommt, also die Atribute der Klasse Tpunkte sich ändern, ändern diese sich auch in der liste. ANtscheind benutz die Liste und die Atribute den selben Platz im Speicher ... Wie kann ich nun das Problem uumgehen sodas auf den unterschiedlichen Indexen auch unterschiedliche Koordinaten stehen ?
Delphi-Quellcode:
procedure TFrame1.FrameClick(Sender: TObject);
var I: integer; begin self.CheckListen; Punkt.y_koordinat := Poly.SaveKoordinaty; Punkt.x_koordinat := Poly.SaveKoordinatx; Poly.Liste.Add(Punkt); Label5.Caption := ''; for I := 0 to Poly.Liste.Count - 1 do begin Label5.Caption := Label5.Caption + slinebreak + ' Koordinat y ; Position' + inttostr(I) + inttostr(Poly.Liste[I].y_koordinat) + slinebreak + ' Koordinat x Position ' + inttostr(I) + ' ' + inttostr(Poly.Liste[I].x_koordinat); end; end; |
AW: Probleme Übergeben einer TObjectlist
Guten Morgen,
indem du halt an jedem neuen Punkt auch einen neuen Punkt erzeugst:
Delphi-Quellcode:
wobei ich allerdings nicht verstehe, warum die Koordinaten aus Poly gelesen werden und anschließend in die Liste zurück wandern. Sinnvoller wäre folgender Ansatz:
rocedure TFrame1.FrameClick(Sender: TObject);
var I: integer; begin self.CheckListen; Punkt := TPunkte.create; //<- Hier Punkt.y_koordinat := Poly.SaveKoordinaty; Punkt.x_koordinat := Poly.SaveKoordinatx; Poly.Liste.Add(Punkt); Label5.Caption := ''; for I := 0 to Poly.Liste.Count - 1 do begin Label5.Caption := Label5.Caption + slinebreak + ' Koordinat y ; Position' + inttostr(I) + inttostr(Poly.Liste[I].y_koordinat) + slinebreak + ' Koordinat x Position ' + inttostr(I) + ' ' + inttostr(Poly.Liste[I].x_koordinat); end; end;
Delphi-Quellcode:
dann musst Du von außen nur noch Poly.add aufrufen und die ganzen Internas werden versteckt. Nennt sich Kapselung - ein Grundprinzip von OOP. ;-)
TPoly = class(TObject)
protected function getnextkonvexhullpoint(punkt: TPunkte): TPunkte; private function LookHightKoordinat(punkte: TPunkte): TPunkte; Liste: Tobjectlist<TPunkte>; function SaveKoordinatx: integer; function SaveKoordinaty: integer; public function Add:TPunkte; constructor create; overload; end; ... function TPoly.Add:TPunkte; begin result := TPunkte.Create; result.X := SaveKoordinatx; result.y := SaveKoordinaty; Lisite.Add(Result); end; Grüße |
AW: Probleme Übergeben einer TObjectlist
war auch schon ne überlegeung;
aber hab ich dann nicht 1000000000000 von Tojectlisten? wegen ich setz diese ja nie frei ... ? |
AW: Probleme Übergeben einer TObjectlist
Zitat:
Du erzeugst einen neuen Punkt. Und der hat x und y aber keine Objektliste. Und ja: wenn du das lange genug laufen hast, dann hast du mal 1*10E10 Punkte. Was ggf. mal zu einem Problem werden kann, das musst Du entsprechend abfangen. Und wenn Du dir mal TObjectList.Create in der Hilfe anschaust, dann sollte das Thema mit "ich setz diese ja nie frei" auch erledigt sein. |
AW: Probleme Übergeben einer TObjectlist
ja; sry war mein fehler.
hatte vorher mal TPunkte = Class(Tobjectlist); deswegen dacht ihc ich hötte nachher zu viele listen. :wall: Aber das klappt einwandfrei. Ich dank dir :3 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 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