![]() |
Geometrische Objekte in Array hizufügen
Hallo , im Rahmen unseres Unterrichtes müssen wir ein Programm programmieren , das auf Buttonklicks jeweils geometrische Formen zeichnet z.B Rechteck , Dreieck etc.
Das habe ich zwar jetzt geschafft , aber wir müssen das jetzt sozusagen verwalten mit Arrays. Und ich weiß nciht , wie ich das jetzt in einen Array packen soll , damit ich die Formen verwalten kann. Ich habe zwar einen Array deklariert etc , aber wie packe ich das alles in das Array rein ? Bei Christan Stelzmann , der diesen Crashkurs macht , hat das hier geschrieben : Zitat:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; PaintBox1: TPaintBox; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Button2: TButton; Edit3: TEdit; Edit4: TEdit; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; Tgeo_objects = class end; Tpunkt = class(Tgeo_objects) x :integer; y:integer; procedure setx(r:integer); procedure sety(z:integer); end; TLinie = class(Tpunkt) p1,p2:Tpunkt; end; TViereck = class(TLinie) protected procedure zeichne; end; TDreieck = class(Tviereck) procedure Dreieckzeichnen; end; Tgeo_objectsArray = Array of Tgeo_objects; var Form1: TForm1; MyViereck : TViereck; Punkt:Tpunkt; r:integer; z:integer; GeoArray :Tgeo_objectsarray; i :integer; Mydreieck:Tdreieck; implementation procedure TViereck.zeichne; begin form1.PaintBox1.Canvas.MoveTo(myviereck.x,myviereck.y); form1.paintbox1.canvas.LineTo(myviereck.x+100,myviereck.y); form1.paintbox1.canvas.lineto(myviereck.x+100,myviereck.y+100); form1.paintbox1.canvas.lineto(myviereck.x,myviereck.y+100); form1.paintbox1.Canvas.MoveTo(myviereck.x,myviereck.y); form1.PaintBox1.canvas.LineTo(myviereck.x,myviereck.y+100); end; procedure TPunkt.Setx(r:integer); begin x:=r; end; procedure TPunkt.sety(z:integer); begin y:=z; end; procedure TDreieck.Dreieckzeichnen; begin form1.PaintBox1.Canvas.MoveTo(mydreieck.x,mydreieck.y); form1.PaintBox1.Canvas.LineTo(mydreieck.x+100,mydreieck.y); form1.PaintBox1.Canvas.MoveTo(mydreieck.x,mydreieck.y); form1.paintbox1.canvas.LineTo(mydreieck.x,mydreieck.y+100); form1.paintbox1.Canvas.MoveTo(mydreieck.x,mydreieck.y+100); form1.PaintBox1.Canvas.LineTo(mydreieck.x+100,mydreieck.y); end; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin MyViereck := TViereck.Create; r:= strtoint(edit1.text); z:= strtoint(edit2.text); myviereck.setx(r); myviereck.sety(z); MyViereck.zeichne; MyViereck.Free; end; procedure TForm1.Button2Click(Sender: TObject); begin r := strtoint(edit3.text); z := strtoint(edit4.text); Mydreieck := Tdreieck.Create; mydreieck.setx(r); mydreieck.sety(z); mydreieck.Dreieckzeichnen; mydreieck.Free end; end. |
AW: Geometrische Objekte in Array hizufügen
Du erzeugst das entsprechende Objekt und fügst es dann Deinem Array hinzu, nachdem Du dessen Größe entsprechend dimensioniert hast (SetLength).
|
AW: Geometrische Objekte in Array hizufügen
Das verstehe ich ja , aber ich habe Probleme bei der Umsetzung.
Ein Objekt habe ich doch schon erzeugt , oder nicht ? |
AW: Geometrische Objekte in Array hizufügen
Aber Du hast es noch nicht ins Array verfrachtet. An Deiner Stelle würde ich mir dafür einfach eine Methode schreiben.
Delphi-Quellcode:
Übrigens sieht Deine Klassenhierarchie nicht sonderlich aus, ein bisschen Vererbung könnte nicht schaden ;)
procedure TForm1.AddToArray(GeoObject: Tgeo_objects);
begin SetLength(Tgeo_objectsArray, Length(Tgeo_objectsArray) + 1); Tgeo_objectsArray[High(Tgeo_objectsArray)] := GeoObject; end; |
AW: Geometrische Objekte in Array hizufügen
Danke für die Hilfe.
Was meinst du mit mehre Vererbung könntest du das bitte etwas konkretisieren? 4 Klassen reichen doch , oder nicht ? |
AW: Geometrische Objekte in Array hizufügen
Nunja, allen Klassen ist wohl mindestens gemein, dass sie sich zeichnen sollen, oder? Dann würde ich in der Basisklasse schon einmal die Methode "zeichne" deklarieren, wahrscheinlich abstrakt, da sich jedes Objekt ja etwas anders zeichnet. Damit steht Dir in den abgeleiteten Klassen automatisch diese Methode zur Verfügung, muss aber ggf. noch überschrieben werden.
|
AW: Geometrische Objekte in Array hizufügen
Zitat:
Und dieses Konstrukt ist aus OOP-Sicht ... ähhmm .. geht gar nicht - sorry
Delphi-Quellcode:
// aha nix ... warum dann, nun ja kommt vielleicht noch :o)
Tgeo_objects = class end; // ok, ein Punkt Tpunkt = class(Tgeo_objects) x :integer; y:integer; procedure setx(r:integer); procedure sety(z:integer); end; // Wieso wird das denn jetzt von TPunkt abgeleitet??? TLinie = class(Tpunkt) // <--- ??? p1,p2:Tpunkt; // <--- ist ja soweit ok end; // ein Viereck benötigt 4 Punkte, nur ein spezielles Viereck, das Rechteck, kann mit 2 Punkten beschrieben werden TViereck = class(TLinie) protected procedure zeichne; end; // das ist auch sehr fragwürdig ... ein Dreieck benötigt 3 Punkte TDreieck = class(Tviereck) procedure Dreieckzeichnen; end; |
AW: Geometrische Objekte in Array hizufügen
Ich weiß zwar , dass das , was ich mache , aus OOP-Sicht dumm ist bzw. nicht schlau.
Aber wir sind Einsteiger und das ist nicht unser Primärziel , für mich geht es erstmal darum , diese Sachen zu verstehen , wie es aus OOP-Sicht ist , ist mir eigentlich egal , das kann ich später , wenn ich gewisse Kenntnisse habe , erweitern/verbessern. |
AW: Geometrische Objekte in Array hizufügen
Zitat:
|
AW: Geometrische Objekte in Array hizufügen
Zitat:
also etwa so:
Code:
P1(5,10) und P2(20, 30) => P3(5,30) und P4(20,10)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:45 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