Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Probleme Übergeben einer TObjectlist (https://www.delphipraxis.net/177097-probleme-uebergeben-einer-tobjectlist.html)

Mokus 16. Okt 2013 08:47

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;

Lemmy 16. Okt 2013 08:55

AW: Probleme Übergeben einer TObjectlist
 
Guten Morgen,
indem du halt an jedem neuen Punkt auch einen neuen Punkt erzeugst:

Delphi-Quellcode:
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;
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:

Delphi-Quellcode:
  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;
dann musst Du von außen nur noch Poly.add aufrufen und die ganzen Internas werden versteckt. Nennt sich Kapselung - ein Grundprinzip von OOP. ;-)
Grüße

Mokus 16. Okt 2013 08:59

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 ... ?

Lemmy 16. Okt 2013 09:07

AW: Probleme Übergeben einer TObjectlist
 
Zitat:

Zitat von Mokus (Beitrag 1232144)
war auch schon ne überlegeung;
aber hab ich dann nicht 1000000000000 von Tojectlisten?
wegen ich setz diese ja nie frei ... ?

???

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.

Mokus 16. Okt 2013 09:14

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 17:54 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