![]() |
Delphi-Version: 5
Graphen aus der canvas wieder löschen
Mahlzeit!
Ich bins mal wieder ;). Ich arbeite immer noch an dem Canvas wie letzte Woche. Es funktioniert 100%ig nur habe ich jetzt eine Frage: Ich habe um den Graphen zu löschen, bzw. neue Grpahen zeichnen zu lassen NIL benutzt. Geht das vielleicht auch anders?? Ich hab nämlich noch nie mit NIL gearbeitet und mein Lehrer würde sich wundern, weshalb ich das benutzt habe, oder wie ich drauf gekommen bin. Hier mal der QT:
Delphi-Quellcode:
procedure TForm1.btn_neuClick(Sender: TObject);
begin Image1.Picture:=nil; FormCreate(Sender); begin edtEingabe.Text:=''; edt_Bx.Text:=''; edt_C.Text:=''; edtFx.Text:=''; edt_X.Text:=''; edt_B.Text:=''; edt_Cx.Text:=''; end; end; |
AW: Graphen aus der canvas wieder löschen
Du kannst auch mit FillRect die Zeichenfläche komplett übermalen.
|
AW: Graphen aus der canvas wieder löschen
Zitat:
Wenn er es vorher noch nie verwendet hat. :-D PS: Besser dem Lehrer sagen warum du es verwendest! Ist doch nicht schlimm wenn man sich in Foren schlau macht. Oder? gruss |
AW: Graphen aus der canvas wieder löschen
Der will Parameter?!
Naja, ist ja aber ein Bestandteil von Canvas oder nicht :)? |
AW: Graphen aus der canvas wieder löschen
Zitat:
|
AW: Graphen aus der canvas wieder löschen
@Emil: Wenn doch sowieso ein Graph auf einen Canvas gezeichnet wird, dann ist es doch naheliegend, dass man dann wiederum mit den TCanvas-Methoden übermalt. Ich denke nicht, dass ein Lehrer damit Probleme haben sollte.
@Blubbel: Wer will wo Parameter? |
AW: Graphen aus der canvas wieder löschen
Delphi-Quellcode:
Diese Meldung gibt er mir:
procedure TForm1.btn_neuClick(Sender: TObject);
begin Image1.Canvas.FillRect;//Dort will der Compiler Parameter... FormCreate(Sender); begin edtEingabe.Text:=''; edt_Bx.Text:=''; edt_C.Text:=''; edtFx.Text:=''; edt_X.Text:=''; edt_B.Text:=''; edt_Cx.Text:=''; end; end; Zitat:
|
AW: Graphen aus der canvas wieder löschen
Ja, Du musst zunächst das zu füllende Rechteck definieren:
![]() |
AW: Graphen aus der canvas wieder löschen
Aber die sind ja immer unterschiedlich...
Ach, Ich glaub ich bleib beim NIL und werde meinen Lehrer am Donnerstag drauf ansprechen. Trotzdem danke :thumb: Aaaaha! Habs das Gefunfen und es Funktioniert auch^^
Delphi-Quellcode:
Image1.Canvas.Rectangle(0,0,width,height);
|
AW: Graphen aus der canvas wieder löschen
Sicher, das geht auch, wenn Dich ein evtl. Rand nicht stört :)
|
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 22:54 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 by Thomas Breitkreuz