AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Problem mit Bearbeiten eines Objekts im Array . OOP
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Bearbeiten eines Objekts im Array . OOP

Ein Thema von hotkey · begonnen am 19. Feb 2012 · letzter Beitrag vom 20. Feb 2012
Antwort Antwort
Seite 1 von 2  1 2      
hotkey

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

Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 14:48
Hallo, hab ein Problem und eine Frage..

Das Problem zu erst :


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    PaintBox1: TPaintBox;
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit3: TEdit;
    Edit4: TEdit;
    Button2: TButton;
    Button3: TButton;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label4: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;



  tgeo_objects = class
end;

    TViereck = class(Tgeo_objects)
      private
     x,y:integer;
    public
      procedure setx;
      procedure sety;
      function getx:integer;
      function gety:integer;
    protected
     procedure zeichne;
   end;

  TDreieck = class(TViereck)
  protected
  procedure zeichnen;

  public
   procedure setx;
   procedure sety;
   function getx:integer;
   function gety:integer;
end;




TKreis = class (TDreieck)
procedure Kreiszeichnen;
private
x1,y1,x2,y2:integer;
public
procedure setx1;
procedure sety1;
procedure setx2;
procedure sety2;

function getx1:integer;
function gety1:integer;
function getx2:integer;
function gety2:integer;

end;

Tgeo_objectsArray = Array of Tgeo_objects;



var
  Form1: TForm1;
  lange,breite:integeR;
  myviereck : Tviereck;
  mydreieck : Tdreieck;
  mykreis : Tkreis;
 GeoArray :Tgeo_objectsarray;

implementation




 procedure addtoarray(Geoobject:tgeo_objects); // Hier wird ein Array erzeugt , um die Objekte zu verwalten
 begin
   SetLength(GeoArray, Length(GeoArray) + 1);
   GeoArray[High(GeoArray)] := GeoObject;
 end;

procedure tviereck.setx; //setzen
begin
 x:= strtoint(form1.Edit1.text);

end;

procedure Tviereck.sety; //setzen
begin
y:= strtoint(form1.edit2.Text);
end;

function Tviereck.getx;
begin

result :=x;

end;

function tviereck.gety;
begin
result:=y;
end;


procedure tdreieck.setx; //setzen
begin
 x:= strtoint(form1.Edit3.text);

end;

procedure Tdreieck.sety; //setzen
begin
y:= strtoint(form1.edit4.Text);
end;

function Tdreieck.getx;
begin

result :=x;

end;

function tdreieck.gety;
begin
result:=y;
end;


procedure Tkreis.setx1;
begin
x1 := strtoint(form1.Edit5.Text);
end;

procedure Tkreis.sety1;
begin
y1 := strtoint(form1.edit6.text);
end;

procedure Tkreis.setx2;
begin
x2 := strtoint(form1.edit7.text);
end;

procedure Tkreis.sety2;
begin
y2:= strtoint(form1.Edit8.text);
end;


function tkreis.getx1;
begin
result := x1;
end;

function tkreis.gety1;
begin
result := y1;
end;

function tkreis.getx2;
begin
result := x2;
end;

function tkreis.gety2;
begin
result := y2;
end;



procedure TViereck.zeichne;
begin
  form1.PaintBox1.Canvas.MoveTo(myviereck.getx,myviereck.gety);
  form1.paintbox1.canvas.LineTo(myviereck.getx+100,myviereck.gety);

  form1.paintbox1.canvas.lineto(myviereck.getx+100,myviereck.gety+100);

  form1.paintbox1.canvas.lineto(myviereck.getx,myviereck.gety+100);

  form1.paintbox1.Canvas.MoveTo(myviereck.getx,myviereck.gety);
  form1.PaintBox1.canvas.LineTo(myviereck.getx,myviereck.gety+100);
end;

 procedure Tdreieck.zeichnen;
begin
  form1.PaintBox1.Canvas.MoveTo(mydreieck.getx,mydreieck.gety);
  form1.PaintBox1.Canvas.LineTo(mydreieck.getx+100,mydreieck.gety);

  form1.PaintBox1.Canvas.MoveTo(mydreieck.getx,mydreieck.gety);
  form1.paintbox1.canvas.LineTo(mydreieck.getx,mydreieck.gety+100);

  form1.paintbox1.Canvas.MoveTo(mydreieck.getx,mydreieck.gety+100);
  form1.PaintBox1.Canvas.LineTo(mydreieck.getx+100,mydreieck.gety);
  end;

  procedure Tkreis.Kreiszeichnen;
  begin
  form1.PaintBox1.Canvas.Ellipse(x1,y1,x2,y2);
  end;


  procedure Farbe;
  begin
  if (form1.edit9.text) = ('rot')
   then
     begin
        form1.Color:=clred;
        end;
 end;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Myviereck := Tviereck.creatE;

   myviereck.setx;
   myviereck.sety;

   myviereck.zeichne;
   myviereck.free;

end;



procedure TForm1.Button2Click(Sender: TObject);
begin
   mydreieck := tdreieck.Create;

   mydreieck.setx;
   mydreieck.sety;

   mydreieck.zeichnen;
   mydreieck.Free;

end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    mykreis := tkreis.Create;

    mykreis.setx1;
    mykreis.sety1;
    mykreis.setx2;
    mykreis.sety2;

    mykreis.Kreiszeichnen;
    mykreis.Free;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
 farbe;
end;

end.
Und zwar geht es darum , dass ich jetzt mit eure Hilfe ( danke nochmal ) Tgeo_objects in einen Array reingehauen habe.

Jetzt habe ich aber das Problem , dass ich erstmal die Anzahl der Felder bestimmen will ( [0..3 ] ( 4 Felder ) und dass ich dann , z.B auf der GUI in ein Edit-Feld die Feldnummer eingebe z.B 2 und dann soll entsprechend dieser Eingabe das , was in Feld 2 ist , ausgeführt werden.
Zum Beispiel:

Im Feld 2 ist TDreieckzeichnen drin und der Benutzer gibt jetzt per Edit-Feld die 2 ein , dann soll automatisch auf der Paintbox ein Dreieck gezeichnet werden.

( Der Benutzer sucht sich selbst die Position aus , deswegen die vielen Editfelder , bitte nicht wundern).

Hoffe ihr könnt mir helfen.

Danke schon im Voraus.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#2

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:03
Ehrlich gesagt verstehe ich weder die Frage noch den Code. Wozu die Klasse tgeo_objects, wenn sie weder Methoden noch Properties noch sonst irgendetwas enthält? Und weshalb stammt ein Dreieck von einem Viereck und ein Kreis von einem Dreieck ab? Was hat das Formular in den Setter-Methoden der Klassen zu suchen? Wozu die globalen Variablen? Ich ralle das nicht, sry.
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: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:17
Das eine war mein Problem.

Sobald ich vererbe z.B von TDreieck , werden sie Methoden (set,get) nicht mitvererbt. Das sollte die Frage sein , die später gestellt werden würde.

Na die Vererbungssache ist nicht in Ordnung , aber bin erstmal froh , wenn es geht und es geht auch.

Aber man kann doch sowas in ein Array packen.
Und ein Array hat doch Felder , in diese Felde möchte ich jetzt die Objekte reinzutun um die Objekte zu verwalten.

Es soll gezeichnet werden , aber es soll auch vorher auf die Arrayfelder zugreifen.
Felix
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:32
Also da ist wohl einiges im argen:

Methoden kannst Du in der Basisklasse als "virtual" deklarieren und in Ableitungen mit "override" überschreiben.

Ansonsten sollte man in einer Klasse nicht auf ein Formular zugreifen. Ein Objekt (Klassininstanz) sollte immer autark sein - also unabhängig von anderen Objekten.

Im Grunde könntest Du Deine Linien einfach in Prozeruren zeichnen. Oder Du baust Deine Komponenten wie ein Panel auf, das seinen eigenen Canvas hat und sich selbst auf diesem Canvas darstellt.

Verstanden habe ich Deine Frage auch nicht. Vielleicht musst Du Dein Konzept nochmal überdenken....
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
hotkey

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

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:35
Okay , dann beantwotre ich die Frage mit einer Gegenfrage.
UND BITTE:
Ich habs verstanden , das es nicht wirklich OOP ist , ist mir klar , aber der Fokus liegt , wie schon so oft gesagt , wo anders.


Was kann man mit einem Array machen ?

Wo seht ihr den Sinn , sowas in ein Array reinzuhauen ?

Hat es überhaupt Sinn?

Wenn man eine Schüler-Datenbank , mit dem gleichen Datentyp (string) hat , und das in einen Array reinhaut , was kann man dann machen ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:38
Man benutzt ein Array, wenn man eben mehrere gleichartige Datentypen verwalten will. Steht die Anzahl schon fest, dann kann man ein statisches Array verwenden, ansonsten nimmt man ein dynamisches Array oder gleich eine Liste.
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 himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.081 Beiträge
 
Delphi 12 Athens
 
#7

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:40
Wenn du keine Ahnung hast, was man damit machen kann, wozu willst du das dann unbedingt einbauen?

Oder andersrum gefragt: Was willst du erreichen?


Der Sinn eines Arrays:
In einem Array oder einer Liste (z.B. Delphi-Referenz durchsuchenTObjectList) kann man z.B. mehrere Objekte verwalten.




Empfehlen würde ich aber dennoch erstmal etwas mehr über OOP zu lernen.
Einer der Grundgedanken von OOP ist die Trennung von Code. (heutzutage auch noch die Trennung von Code und GUI)
Wenn du ein globale Variablen nutzen mußt und dann auch noch über globale Variablen auf die GUI zugreifen mußt, dann solltest du dir gedanken machen, was dort falsch ist.
z.B. die SetX- und SetY-Methoden ... denen gibt man die Werte als Parameter mit und läßt sie sich nicht selber die Werte holen.
Tipp: Wenn eine Klassen absolut nichts von der Form wissen, außer dem, was man ihnen über Parameter und Property mitgeteilt hat, dann bist du auf dem richtigen Weg. (also die Werte der Edits und das Canvas muß man ihnen "geben")
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (19. Feb 2012 um 19:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:43
... und es macht nur Sinn, wenn Du Deine Objekte längerfristig am Leben lässt.
Dann kannst Du sie in einem Array (auch in mehreren Spalten) oder einer Liste (nur eine Spalte, aber einfacher im Handlíng) speichern.
Da Du Deine Objekte sofort wieder freigiebst mach ein Array in Deinem Fall keinen Sinn.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
hotkey

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

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 19:53
Ja , ich will mit einem Array "VERWALTEN".

Ich will , dass z.B TDreieck als Objekt in einem Array gespeichert wird , z.B im Feld Nummer 3.

Und immer so weiter , versteht man es jetzt genauer ?
Felix
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Problem mit Bearbeiten eines Objekts im Array . OOP

  Alt 19. Feb 2012, 20:12
Ja das kannst Du so machen.
Wenn Dir eine einfache Sammlung reicht (Du also nicht mehrere Spalten brauchst), dann würde ich eine TList oder TObjectList (wenn Dein delphi die schon kennt) statt einem Array empfehlen.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  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:52 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