| Autor |
Beitrag |
Bernd59
      
Beiträge: 18
|
Verfasst: Di 22.12.09 14:19
Hallo,
ich habe erst seit kurzem mit Delphi angefangen und habe nun ein Problem. Bei einem unserer Programme sollen wir einen Kreis zeichnen. Das funktioniert auch nur ist das Problem das der Radius immer gleich bleibt, obwohl ich ein SpindEdit eingefügt habe
Anbei habe ich meinen Quelltext dazugefügt
Gruß
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83:
| unit UnitHF;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Spin; type TKreis=class(TObject) private xmp,ymp,radius: integer; imi : TImage;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure Malen; procedure setradius(r :integer);
end; type TForm1 = class(TForm) Panel1: TPanel; BitBtn1: TBitBtn; Image1: TImage; SpinEdit1: TSpinEdit; procedure FormShow(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpinEdit1Change(Sender: TObject); private Kreis: TKreis;
public end;
var Form1: TForm1;
implementation
{$R *.DFM}
procedure TKreis.setmitte(x,y : integer); begin xmp:=X; ymp:=y; end;
procedure TKreis.setimi (im :TImage); begin imi:=im; end;
procedure TKreis.malen; begin imi.canvas.ellipse(xmp-50,ymp-50,xmp+50,ymp+50); end;
procedure TForm1.FormShow(Sender: TObject); begin Kreis:=TKreis.create; Kreis.setimi(image1); Kreis.setradius(50); end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Kreis.setmitte(x,y); Kreis.malen; end;
procedure TKreis.setradius(R: integer); begin radius:=r; end;
procedure TForm1.SpinEdit1Change(Sender: TObject); begin Kreis.setradius(Spinedit1.value); end; end. |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 22.12.09 14:23
naja, du legst in TKreis.Malen den Radius auch fix auf 50  da müsste wohl anstelle von
Delphi-Quelltext 1: 2: 3: 4:
| imi.canvas.ellipse(xmp-50,ymp-50,xmp+50,ymp+50); imi.canvas.ellipse(xmp-radius,ymp-radius,xmp+radius,ymp+radius); |
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 14:36
Hey danke für die schnelle und gute Antwort.
Nun haben wir noch zusätzliche Aufgaben bekommen
Wir sollen eine weitere Klasse einfügen, die von TKreis abgeleitet wird (TEllipse)
Nun habe ich den Quelltext folgendermaßen verändert (Veränderung schwarz hinterlegt)
Moderiert von Narses: Bold- durch Highlight-Tags ersetzt.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49:
| unit UnitHF;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Spin;
type TKreis=class(TObject) private xmp,ymp,radius: integer; imi : TImage;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure Malen; procedure setradius(r :integer);
end; type TEllipse=class(TKreis) private
public
end; type TForm1 = class(TForm) Panel1: TPanel; BitBtn1: TBitBtn; Image1: TImage; SpinEdit1: TSpinEdit; procedure FormShow(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpinEdit1Change(Sender: TObject); private Kreis: TKreis;
public
end;
var Form1: TForm1;
implementation
{$R *.DFM} |
Nun heißt es in der Aufgabe das wir bei private einen Verzerrungsfaktor setzen müssen (der Wert beträgt 5). Muss ich da jetzt einfach eine Variable namens Verzerrungsfaktor : integer definieren?
Bei Public müssen wir eine procedure setzen womit der Faktor gesetzt werden kann sowie eine procedure mit der die Ellipse gemalt werden kann
die procedure ellimalen (ellipse) ist doch so ähnlich wie bei dem Kreis in dem man den Radius bestimmt hat? Nun muss man sie nur anderst strecken( mit Verzerrungsfaktor)?
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 22.12.09 14:45
stimmt soweit... auf jeden Fall empfehle ich dir, im Informatikunterricht selbst mitzuarbeiten  ansonsten, benutz mal bitte Delphi-Tags *MODERAAAAATOOOOOOOR Schrei*
€: eine Ellipse hat halt eben einen X-Radius und einen Y-Radius *scratch*
Zuletzt bearbeitet von FinnO am Di 22.12.09 14:48, insgesamt 1-mal bearbeitet
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 22.12.09 14:46
Ich würde mal davon ausgehen du weist doch was du zu tun hast dann tu es doch einfach erst mal.
Davon abgesehen ist die Aufgabestellung doch sehr eindeutig.
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 15:04
Mal ne Frage: Wie füge ich diese Tags ein, damit es besser lesbar wird?
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 22.12.09 15:06
oben im Editor auf Bereiche -> Delphi -> +
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 15:08
Ok, ich habe es nun soweit gemacht nun hänge ich wieder
Ich habe bei TEllipse private und public belegt
Zusätzlich habe ich bei TForm1 TEllipse eingefügt
Nun soll ich bei Show elli erzeugen und die Werte setzen. Sind die Werte für den Verzerrungsfaktor gemeint? Wie setze ich die?
elli hat alle Werte von TKreis und die eigenen. Muss ich nun für die Ellipse jedes mal eine eigene Procedure erstellen?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97:
| unit UnitHF;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Spin; type TKreis=class(TObject) private xmp,ymp,radius: integer; imi : TImage;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure Malen; procedure setradius(r :integer); end;
type TEllipse=class(TKreis) private verzerrungsfaktor : integer;
public procedure Faktorsetzen; procedure ellimalen;
end; type TForm1 = class(TForm) Panel1: TPanel; BitBtn1: TBitBtn; Image1: TImage; SpinEdit1: TSpinEdit; procedure FormShow(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpinEdit1Change(Sender: TObject); private Kreis: TKreis; elli: TEllipse;
public end;
var Form1: TForm1;
implementation
{$R *.DFM} procedure TKreis.setmitte(x,y : integer); begin xmp:=X; ymp:=y; end; procedure TKreis.setimi (im :TImage); begin imi:=im; end; procedure TKreis.malen; begin imi.canvas.ellipse(xmp-radius,ymp-radius,xmp+radius,ymp+radius); end;
procedure TForm1.FormShow(Sender: TObject); begin Kreis:=TKreis.create; Kreis.setimi(image1); elli:=TEllipse.create; elli.setimi.(image1); end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Kreis.setmitte(x,y); Kreis.malen; end; procedure TKreis.setradius(R: integer); begin radius:=r; end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin Kreis.setradius(Spinedit1.value); end; procedure TEllipse.Faktorsetzen; begin Verzerrungsfaktor:=5; end; procedure TEllipse.ellimalen; begin imi.canvas.ellipse(xmp-verzerrungsfaktor,ymp-radius,xmp+verzerrungsfaktor,ymp+radius); end; end. |
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 22.12.09 15:10
naja, ein Faktor hat mit addition wenig zu tun. Wie wäre es mit Multiplikation? Und, es wäre u.U. ganz sinnig, wenn "Faktorsetzen" den Faktor als Parameter kriegt, wie z.B. imiSetzen...
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 15:51
Ok ich habe nun alle Procedures erstellt um die Ellipsen zu zeichnen, allerdings zeichnet das Programm mir noch keine
Was meintest du denn mit Parameter setzen (Faktorsetzen)
Schlussendlich muss ich es noch so einstellen das wenn ich die linke Maustaste drücke der Kreis gezeichnet wird und bei der rechten Maustaste die Ellipse, allerdings haben wir den Befehl für links und rechts noch nicht behandelt
Könnt ihr mir ihn sagen
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115:
| unit UnitHF;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Spin; type TKreis=class(TObject) private xmp,ymp,radius: integer; imi : TImage;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure Malen; procedure setradius(r :integer); end;
type TEllipse=class(TKreis) private verzerrungsfaktor : integer;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure setradius(r :integer); procedure Faktorsetzen; procedure ellimalen;
end; type TForm1 = class(TForm) Panel1: TPanel; BitBtn1: TBitBtn; Image1: TImage; SpinEdit1: TSpinEdit; procedure FormShow(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpinEdit1Change(Sender: TObject); private Kreis: TKreis; elli: TEllipse;
public end;
var Form1: TForm1;
implementation
{$R *.DFM} procedure TKreis.setmitte(x,y : integer); begin xmp:=X; ymp:=y; end; procedure TKreis.setimi (im :TImage); begin imi:=im; end; procedure TKreis.malen; begin imi.canvas.ellipse(xmp-radius,ymp-radius,xmp+radius,ymp+radius); end;
procedure TForm1.FormShow(Sender: TObject); begin Kreis:=TKreis.create; Kreis.setimi(image1); elli:=TEllipse.create;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin Kreis.setmitte(x,y); Kreis.malen; end; procedure TKreis.setradius(R: integer); begin radius:=r; end; procedure TForm1.SpinEdit1Change(Sender: TObject); begin Kreis.setradius(Spinedit1.value); end;
procedure TEllipse.setmitte(x,y : integer); begin xmp:=X; ymp:=y; end; procedure TEllipse.Faktorsetzen; begin Verzerrungsfaktor:=5; end; procedure TEllipse.ellimalen; begin imi.canvas.ellipse(xmp*verzerrungsfaktor,ymp-radius,xmp*verzerrungsfaktor,ymp+radius); end; procedure TEllipse.setimi (im :TImage); begin imi:=im; end; procedure TEllipse.setradius(r :integer); begin radius:=r; end; end. |
|
|
platzwart
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: Di 22.12.09 15:53
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| If Button = mbLeft then begin ... end else If Button = mbRight then begin ... end; |
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 16:09
Danke, aber bei ich weiß nicht genau wo ich das MB Left und MB right einfügen soll?
Ich hab den Quelltext optisch ein bisschen übersichtlicher gemacht.
Nun habe ich das Problem, das wenn ich das Programm starte erst denn Radius ändern muss damit ich einen Kreis zeichen kann
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123:
| unit UnitHF;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons, Spin; type TKreis=class(TObject) private xmp,ymp,radius: integer; imi : TImage;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure Malen; procedure setradius(r :integer); end;
type TEllipse=class(TKreis) private verzerrungsfaktor : integer;
public procedure setmitte (x,y:integer); procedure setImi (im :TImage); procedure setradius(r :integer); procedure Faktorsetzen; procedure ellimalen;
end; type TForm1 = class(TForm) Panel1: TPanel; BitBtn1: TBitBtn; Image1: TImage; SpinEdit1: TSpinEdit; procedure FormShow(Sender: TObject); procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure SpinEdit1Change(Sender: TObject); private Kreis: TKreis; elli: TEllipse;
public end;
var Form1: TForm1;
implementation
{$R *.DFM} procedure TKreis.setmitte(x,y : integer); begin xmp:=X; ymp:=y; end; procedure TKreis.setimi (im :TImage); begin imi:=im; end;
procedure TForm1.FormShow(Sender: TObject); begin Kreis:=TKreis.create; Kreis.setimi(image1); elli:=TEllipse.create;
end;
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin Kreis.setmitte(x,y); Kreis.malen; end;
procedure TKreis.setradius(R: integer); begin radius:=r; end;
procedure TKreis.malen; begin imi.canvas.ellipse(xmp-radius,ymp-radius,xmp+radius,ymp+radius); end;
procedure TForm1.SpinEdit1Change(Sender: TObject); begin Kreis.setradius(Spinedit1.value); end;
procedure TEllipse.ellimalen; begin imi.canvas.ellipse(xmp*verzerrungsfaktor,ymp-radius,xmp*verzerrungsfaktor,ymp+radius); end;
procedure TEllipse.setmitte(x,y : integer); begin xmp:=X; ymp:=y; end; procedure TEllipse.Faktorsetzen; begin Verzerrungsfaktor:=5; end;
procedure TEllipse.setimi (im :TImage); begin imi:=im; end; procedure TEllipse.setradius(r :integer); begin radius:=r; end;
end. |
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 22.12.09 16:18
Ganz sicher nicht im OnMouseDown event.
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 22.12.09 16:21
 ne, auf keinen Fall da
[/ironie]
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 16:22
ja wo muss ich es dann hineinfügen
Könnt ihr mir sagen warum ich erst denn Radius im SpinEdit ändern muss, bevor ich den Kreis zeichnen kann?
|
|
FinnO
      
Beiträge: 1331
Erhaltene Danke: 123
Mac OSX, Arch
TypeScript (Webstorm), Kotlin, Clojure (IDEA), Golang (VSCode)
|
Verfasst: Di 22.12.09 16:30
*ironieschildwedel*
weil du vermutlich vorher keinen Radius gesetzt hast, der dann entweder 0 oder irgendwas perverses á la 123481283 oder so ist.
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 22.12.09 16:30
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormShow(Sender: TObject); begin Kreis:=TKreis.create; Kreis.setimi(image1); elli:=TEllipse.create;
end; |
Hat euer Lehrer das so vorgegeben?
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 16:50
Wenn ich aber
Delphi-Quelltext 1: 2: 3:
| Kreis:=TKreis.create; Kreis.setimi(image1); Kreis.setradius(50); |
eingebe dann zeichnet er mir den Kreis mit Radius 50, wenn ich aber dann auf 120 einstelle kann ich nur einen Kreis mit Radius 120 zeichnen, denn beim zweiten Klick springt er wieder auf 50 zurück
Nein, den letzten Befehl mit der Ellipse hab ich selber eingefügt! in der Aufgabe steht: ,,Bei Show dann elli erzeugen und Werte setzen". Deswegen habe ich den Befehl gesetzt, aber wie setzt man die Werte?
--- Moderiert von Narses: Beiträge zusammengefasst---
Erstes Problem braucht ihr nicht erläutern, hab ich gelöst mit
Delphi-Quelltext 1: 2: 3:
| Kreis:=TKreis.create; Kreis.setimi(image1); Kreis.setradius(SPinEdit1.value); |
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
thepaine91
      
Beiträge: 763
Erhaltene Danke: 27
Win XP, Windows 7, (Linux)
D6, D2010, C#, PHP, Java(Android), HTML/Js
|
Verfasst: Di 22.12.09 16:59
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.FormShow(Sender: TObject); begin Kreis:=TKreis.create; Kreis.setimi(image1); elli:=TEllipse.create;
end; |
Wenn die Aufgabenstellung so war beschwer dich von mir bei deinem Lehrer.
Denn (onshow) kann öfter auftreten.
In dem Fall würdest du immer wieder
Delphi-Quelltext 1: 2: 3:
| Kreis:=TKreis.create; Kreis.setimi(image1); elli:=TEllipse.create; |
aufrufen.
Naja die folge davon ergibt sich von selbst.
Aber vielleicht denk ich grad auch zu weit. ^^
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Bernd59 
      
Beiträge: 18
|
Verfasst: Di 22.12.09 17:12
Ich poste hier mal die komplette Aufgabe incl. dem was wir schon gelöst haben
Einloggen, um Attachments anzusehen!
|
|
|