AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Geometrische Objekte in Liste speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Geometrische Objekte in Liste speichern

Ein Thema von Informatik-LK · begonnen am 7. Jan 2009 · letzter Beitrag vom 8. Jan 2009
Antwort Antwort
Seite 1 von 2  1 2      
Informatik-LK

Registriert seit: 21. Nov 2007
29 Beiträge
 
#1

Geometrische Objekte in Liste speichern

  Alt 7. Jan 2009, 23:18
Hallo ihr!

Ich wollte mal fragen, wie man die Eigenschaften eines Dreiecks, eines Rechtecks und die eines Kreises in einer Liste vom Typ TList speichern kann.
Mit Eigenschaften meine ich hierbei:

- beim Dreieck 3 Punkte: TPoint
- beim Rechteck 2 Punkte: TPoint
- beim Kreis 1 Punkt: TPoint und Radius: Integer.

Ich hoffe, ihr könnt mir helfen.

Informatik-LK
Ich bin ein absoluter Delphi-Anfänger.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

Re: Geometrische Objekte in Liste speichern

  Alt 7. Jan 2009, 23:38
Erzeuge Dir 3 Klassen für jeden Typ halt eine und schmeiß die in die Liste ... fertig.

TList speichert alles was von TObject abgeleitet wurde und das ist jede Klasse

[edit]
ok, weil du Delphi-Anfänger bist
Delphi-Quellcode:
type
  TRechteck = class
    Punkt1 : TPoint;
    Punkt2 : TPoint;
  end;
Und so greifst du über die Liste darauf zu:
Delphi-Quellcode:
if
  Liste.Items[ i ] is TRechteck
then
  begin
    with
      TRechteck( Liste.Items[ i ] )
    do
      begin
        // Hier kannst du auf das Objekt zugreifen
        // z.B.
        Punkt1.X := 10;
      end;
  end;
Die anderen Klassen werden analog behandelt.
[/edit]
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Die Muhkuh
Die Muhkuh

Registriert seit: 21. Aug 2003
7.332 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 00:19
Anstatt die TList nimmst eine TObjectList, die kümmert sich gleich noch um das Freigeben der Objekte.
  Mit Zitat antworten Zitat
Cyf

Registriert seit: 30. Mai 2008
407 Beiträge
 
Lazarus
 
#4

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 04:32
Ich seh hier irgenwie grad den Grund nicht, Objekte statt Records zu verwenden. Würden die es nicht auch tun?
  Mit Zitat antworten Zitat
WS1976
(Gast)

n/a Beiträge
 
#5

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 05:26
Hallo,

für jeden Typ eine Klasse? Viel zu umständlich.
ich würde eine Klasse nutzen in der es ein Array of Tpoint gibt. Zusätzlich definierst du dir einen Aufzählungstyp sodass du nachher fesstellen kannst was in der Klasse gespeichert wurde.
Willst du z.B. zusätzlich eine Zeichenroutine einfügen kannst du das mit canvas.polygon (weiss nicht exakt wie die procedure heisst) machen.

Delphi-Quellcode:
   Ageotyp=(Dreieck,Viereck,Kreis);
   Tgeometrie=class
      punkte:array of Tpoint;
      parameter:array of integer; //Radius für Kreis, 2 Radien für Ellipse
      geotyp:Ageotyp; //Ageotyp musst du als Aufzählungstyp definieren Ageotyp=(Dreieck,Viereck,Kreis)

      Constructor, Destructor, Prozeduren......
   end;
Beide Arrays sind offen, das heisst du musst, bevor du sie nutzen kannst die Grösse festlegen.
Als Beispiel für die Definition eines Kreises(habs nicht ausprobiert, also nicht böse sein wenn Fehler drin sind):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var a:Tgeometrie;
begin
  a.Create;
  a.geotyp:=Kreis;
  setlength(a.punkte,1);
  setlength(a.parameter,1);
  a.punkte[0].X:=100; //Mittelpunkt X Wert
  a.punkte[0].Y:=100; //Mittelpunkt Y Wert
  a.parameter[0]:=50; //Radius
end;
Versuchs einfach mal, solltest du nicht zurecht kommen kannst du ja deinen Code posten.

Ich hoffe dir ist damit geholfen.

Grüsse
Rainer
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 06:40
Zitat von Cyf:
Ich seh hier irgenwie grad den Grund nicht, Objekte statt Records zu verwenden. Würden die es nicht auch tun?
Ja, aber wir leben in OOP-Zeiten, da nimmt man eben Klassen. Im Endeffekt müsstest Du ja Record-Zeiger in der Liste speichen, sodaß die Implementierung wieder etwas umständlicher wird.
Zitat von WS1976:
für jeden Typ eine Klasse? Viel zu umständlich. ich würde eine Klasse nutzen in der es ein Array of Tpoint gibt.
Du pervertierst den OOP-Gedanken, indem Du eine Gottklasse definierst, die alles macht. So soll es ja gerade nicht sein.

Man könnte sich eine Basisklasse definieren, die grundlegende Funktionalität bereitstellt, z.B. 'Zeichnen', 'Umriss', 'MausInObjekt' usw. Die Methoden werden in den konkreten abgeleiteten Klassen implementiert, aber man kann einfach alle Objekte Zeichnen:
Delphi-Quellcode:
For i:=0 to GeoListe.Count - 1 do
  TGeoObjekt(GeoListe[i]).ZeichneObjekt;
Darauf aufbauend könnte man dann ein komplexes TGeoObjekt definieren, das aus einzelnen TGeoObjekten besteht und so eine recht komplexe und mächte Klassenbibliothek aufbauen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 09:47
Ja, diese Vererbung ist genau der Grund für die Klassen.

Da aber Informatik-LK in seiner Signatur "Ich bin ein absoluter Delphi-Anfänger." stehen hat, wollte ich ihm aber nicht sofort mit der Vererbung kommen, aber schon mal auf das richtige Pferd setzen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 09:54
Dein Beitrag war ja auch ok: Eine gute Mischung aus OOP und einfacher Umsetzung.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 10:13
eine recht einfache Lösung wären variant-records. Gibt es eigentlich auch Variant-Objects?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

Re: Geometrische Objekte in Liste speichern

  Alt 8. Jan 2009, 10:18
Zitat von SirThornberry:
eine recht einfache Lösung wären variant-records. Gibt es eigentlich auch Variant-Objects?
Na klar, indem du die Variablen/Properties als Variant deklarierst.

Aber die Umsetzung ist nur im ersten Antritt einfacher. Wenn du da etwas mehr machen möchtest (Berechnung Flächeninhalt, Umfang, Zeichnen, etc.) dann bist du mit OOP besser dran und vor allem übersichtlicher!
Auch die Erweiterung um andere geometrische Objekte ist dann nur noch ein Spaziergang

cu

Oliver
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 21:23 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