![]() |
Geometrische Objekte in Liste speichern
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 |
Re: Geometrische Objekte in Liste speichern
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 :mrgreen:
Delphi-Quellcode:
Und so greifst du über die Liste darauf zu:
type
TRechteck = class Punkt1 : TPoint; Punkt2 : TPoint; end;
Delphi-Quellcode:
Die anderen Klassen werden analog behandelt.
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; [/edit] |
Re: Geometrische Objekte in Liste speichern
Anstatt die TList nimmst eine TObjectList, die kümmert sich gleich noch um das Freigeben der Objekte.
|
Re: Geometrische Objekte in Liste speichern
Ich seh hier irgenwie grad den Grund nicht, Objekte statt Records zu verwenden. Würden die es nicht auch tun? :gruebel:
|
Re: Geometrische Objekte in Liste speichern
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:
Beide Arrays sind offen, das heisst du musst, bevor du sie nutzen kannst die Grösse festlegen.
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; Als Beispiel für die Definition eines Kreises(habs nicht ausprobiert, also nicht böse sein wenn Fehler drin sind):
Delphi-Quellcode:
Versuchs einfach mal, solltest du nicht zurecht kommen kannst du ja deinen Code posten.
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; Ich hoffe dir ist damit geholfen. Grüsse Rainer |
Re: Geometrische Objekte in Liste speichern
Zitat:
Zitat:
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:
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.
For i:=0 to GeoListe.Count - 1 do
TGeoObjekt(GeoListe[i]).ZeichneObjekt; |
Re: Geometrische Objekte in Liste speichern
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 ;) |
Re: Geometrische Objekte in Liste speichern
Dein Beitrag war ja auch ok: Eine gute Mischung aus OOP und einfacher Umsetzung.
|
Re: Geometrische Objekte in Liste speichern
eine recht einfache Lösung wären variant-records. Gibt es eigentlich auch Variant-Objects? :gruebel:
|
Re: Geometrische Objekte in Liste speichern
Zitat:
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 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