AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Probleme Übergeben einer TObjectlist

Ein Thema von Mokus · begonnen am 16. Okt 2013 · letzter Beitrag vom 16. Okt 2013
Antwort Antwort
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Probleme Übergeben einer TObjectlist

  Alt 16. Okt 2013, 08:47
Delphi-Version: XE2
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;
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Probleme Übergeben einer TObjectlist

  Alt 16. Okt 2013, 08:55
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
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Probleme Übergeben einer TObjectlist

  Alt 16. Okt 2013, 08:59
war auch schon ne überlegeung;
aber hab ich dann nicht 1000000000000 von Tojectlisten?
wegen ich setz diese ja nie frei ... ?
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.366 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Probleme Übergeben einer TObjectlist

  Alt 16. Okt 2013, 09:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mokus
Mokus

Registriert seit: 24. Sep 2013
165 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Probleme Übergeben einer TObjectlist

  Alt 16. Okt 2013, 09:14
ja; sry war mein fehler.

hatte vorher mal TPunkte = Class(Tobjectlist);
deswegen dacht ihc ich hötte nachher zu viele listen.

Aber das klappt einwandfrei.


Ich dank dir :3
Markus
es gibt nur 10 arten von menschen !
die die binär verstehen und die die nicht. !
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 01:34 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