![]() |
AW: Graphen aus der canvas wieder löschen
Nee, ist ja keiner.... ich zeig dir ma den ganzen QT... Am Koordinatensystem ist ja eh schon ein Rand...
Delphi-Quellcode:
unit main;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) edtEingabe: TEdit; lblFX: TLabel; lbl_X: TLabel; btn_Zeichne: TButton; Image1: TImage; edt_Bx: TEdit; lbl_bx: TLabel; edt_C: TEdit; lbl_C: TLabel; Label2: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; edtFx: TEdit; edt_X: TEdit; edt_B: TEdit; edt_Cx: TEdit; btn_Zeichne1: TButton; btn_neu: TButton; btn_close: TButton; Label1: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure btn_ZeichneClick(Sender: TObject); procedure btn_Zeichne1Click(Sender: TObject); procedure btn_closeClick(Sender: TObject); procedure btn_neuClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b,c: Real; implementation {$R *.dfm} procedure TForm1.btn_closeClick(Sender: TObject); begin Form1.Close; end; procedure TForm1.btn_ZeichneClick(Sender: TObject); var i,j:Integer; x,y: Real; begin a:= StrToFloat(edtEingabe.Text); b:= StrToFloat(edt_Bx.Text); c:= StrToFloat(edt_C.Text); i:=20; while i<660 do begin i:=i+1; x:=(i-450)/50; //50, da Koordinatensystem in 50er Schritten erstellt ist y:=a*sqr(x)+b*x+c; j:=round((450-y*50)); //450 Grenze von X-Achse Image1.Canvas.Pixels[i,j]:=clblue; //zeichnen end; end; procedure TForm1.btn_neuClick(Sender: TObject); begin Image1.Canvas.Rectangle(0,0,width,height); FormCreate(Sender); begin edtEingabe.Text:=''; edt_Bx.Text:=''; edt_C.Text:=''; edtFx.Text:=''; edt_X.Text:=''; edt_B.Text:=''; edt_Cx.Text:=''; end; end; procedure TForm1.btn_Zeichne1Click(Sender: TObject); var i,j:Integer; x,y: Real; begin a:= StrToFloat(edt_X.Text); b:= StrToFloat(edt_B.Text); c:= StrToFloat(edt_Cx.Text); i:=20; while i<660 do begin i:=i+1; x:=(i-450)/50; //50, da Koordinatensystem in 50er Schritten erstellt ist y:=a*sqr(x+b)+c; j:=round((450-y*50)); //450 Grenze von X-Achse Image1.Canvas.Pixels[i,j]:=clred; //zeichnen end; end; procedure TForm1.FormCreate(Sender: TObject); var i,j,k:Integer; begin with Image1.Canvas do begin //X-Achse MoveTo(1125,450); //Graph LineTo(20,450); for i:= -8 to 13 do begin Image1.Canvas.TextOut(450+50*i,455,IntToStr(i)); //Beschriftung MoveTo(450+50*i,445); //Striche von Beschriftung LineTo(450+50*i,455); begin //Y-Achse MoveTo(450,20); //Graph LineTo(450,660); for j := -8 to -1 do begin Image1.Canvas.TextOut(455,450+50*j,IntToStr(-j)); //Beschriftung MoveTo(445,450+50*j); //Striche von Beschriftung LineTo(455,450+50*j); for k := 1 to 4 do begin Image1.Canvas.TextOut(455,450+50*k,IntToStr(-k)); //Beschriftung MoveTo(445,450+50*k); //Striche von Beschriftung LineTo(455,450+50*k); end; end; end; end; end; end; end. |
AW: Graphen aus der canvas wieder löschen
*Puh* da habe ich gerade keinen Nerv dazu, mich da hineinzudenken. Da gibt es zwar noch einiges Verbesserungspotential, aber das ist für einen Anfänger vollkommen normal, also kein Grund zur Sorge. Wenn es so für Dich in Ordnung ist, kannst Du es IMO ruhig Deinem Lehrer vorstellen.
|
AW: Graphen aus der canvas wieder löschen
Delphi-Quellcode:
procedure TForm1.btn_ZeichneClick(Sender: TObject);
var i,j:Integer; x,y,a,b,c: Double; begin Initialize; a:= StrToFloat(edtEingabe.Text); b:= StrToFloat(edt_Bx.Text); c:= StrToFloat(edt_C.Text); i:=19; Image1.Canvas.pen.Color := clBlue; while i<660 do begin i:=i+1; x:=(i-450)/50; //50, da Koordinatensystem in 50er Schritten erstellt ist y:=a*sqr(x)+b*x+c; j:=round((450-y*50)); //450 Grenze von X-Achse if i= 20 then Image1.Canvas.MoveTo(i,j) else Image1.Canvas.LineTo(i,j) end; end; procedure TForm1.Initialize; var i,j,k:Integer; begin with Image1.Canvas do begin //X-Achse Brush.Color := clWhite; Fillrect(ClientRect); MoveTo(1125,450); //Graph LineTo(20,450); for i:= -8 to 13 do begin Image1.Canvas.TextOut(450+50*i,455,IntToStr(i)); //Beschriftung MoveTo(450+50*i,445); //Striche von Beschriftung LineTo(450+50*i,455); begin //Y-Achse MoveTo(450,20); //Graph LineTo(450,660); for j := -8 to -1 do begin Image1.Canvas.TextOut(455,450+50*j,IntToStr(-j)); //Beschriftung MoveTo(445,450+50*j); //Striche von Beschriftung LineTo(455,450+50*j); for k := 1 to 4 do begin Image1.Canvas.TextOut(455,450+50*k,IntToStr(-k)); //Beschriftung MoveTo(445,450+50*k); //Striche von Beschriftung LineTo(455,450+50*k); end; end; end; end; end; end; procedure TForm1.FormCreate(Sender: TObject); begin Initialize; end; |
AW: Graphen aus der canvas wieder löschen
Dann sage ihm auch wo er "Initialize" einbinden soll bzw. was es ist (procedure/function) ;)
Falls er es nicht weiss. Und warum er es ändern sollte. gruss |
AW: Graphen aus der canvas wieder löschen
Du kannst auch den Graphen mit Pen.Mode pmNotXor neuzeichnen.
|
AW: Graphen aus der canvas wieder löschen
Es ist ja alles gut, schön und richtig, was Ihr hier so postet, aber ich hege so meine Zweifel, ob das dem entspricht, was der Lehrer erwartet. Wobei das allerdings natürlich nur eine Vermutung meinerseits ist bzw. sein kann. :)
|
AW: Graphen aus der canvas wieder löschen
Also für meinen Lehrer werde ich es so lassen...
Ich werd mich mal da reindenken und versuchen die codes zu verstehen... Danke euch:thumb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:27 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