AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Geometrische Objekte in Array hizufügen

Ein Thema von hotkey · begonnen am 26. Jan 2012 · letzter Beitrag vom 26. Jan 2012
Antwort Antwort
Seite 1 von 2  1 2      
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#1

Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:01
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:
interface

type
TgeomFormArray = Array of TgeomForm;

implementation

function gesamtflaeche (formen : TgeomFormArray) : Integer;
var i : Integer;
begin
result := 0;

for i:=0 to High(formen) do
result := result + formen[i].flaeche;
end;
Das ist mein Code :

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.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:05
Du erzeugst das entsprechende Objekt und fügst es dann Deinem Array hinzu, nachdem Du dessen Größe entsprechend dimensioniert hast (SetLength).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#3

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:10
Das verstehe ich ja , aber ich habe Probleme bei der Umsetzung.

Ein Objekt habe ich doch schon erzeugt , oder nicht ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:16
Aber Du hast es noch nicht ins Array verfrachtet. An Deiner Stelle würde ich mir dafür einfach eine Methode schreiben.
Delphi-Quellcode:
procedure TForm1.AddToArray(GeoObject: Tgeo_objects);
begin
  SetLength(Tgeo_objectsArray, Length(Tgeo_objectsArray) + 1);
  Tgeo_objectsArray[High(Tgeo_objectsArray)] := GeoObject;
end;
Übrigens sieht Deine Klassenhierarchie nicht sonderlich aus, ein bisschen Vererbung könnte nicht schaden
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#5

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:19
Danke für die Hilfe.

Was meinst du mit mehre Vererbung könntest du das bitte etwas konkretisieren?

4 Klassen reichen doch , oder nicht ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.540 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:22
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  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

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:39
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.
Dazu haben wir doch schon einen Thread

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;
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
hotkey

Registriert seit: 20. Aug 2011
Ort: Berlin
113 Beiträge
 
Delphi 6 Personal
 
#8

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:46
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.
Felix
  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
 
#9

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 11:55
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.
Leider nicht ... weil du wirst diese Aufgabe so nicht lösen können, wenn du OOP nicht richtig umsetzt
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
schlecki

Registriert seit: 11. Apr 2005
Ort: Darmstadt
148 Beiträge
 
Delphi XE2 Enterprise
 
#10

AW: Geometrische Objekte in Array hizufügen

  Alt 26. Jan 2012, 12:16
Delphi-Quellcode:
  // ein Viereck benötigt 4 Punkte, nur ein spezielles Viereck, das Rechteck, kann mit 2 Punkten beschrieben werden
    TViereck = class(TLinie)
    //...
    end;
Kann nicht jedes beliebige Viereck mit 2 Punkten dargestellt werden? Wenn ich 2 gegenüberliegende Punkte habe, dann "entstehen" doch die 2 anderen Punkte durch austauschen/mischen der x/y-Koordinaten, oder?
also etwa so:
Code:
P1(5,10) und P2(20, 30) => P3(5,30) und P4(20,10)
  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 04:00 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