![]() |
Re: Epizykloide programm
Hm sind die formeln die du mir gegeben hast für den punkt auf dem außenkreis der die kurve malt oder für den mittel punkt des äußeren kreises???
|
Re: Epizykloide programm
Das ist der Punkt auf dem Kreis, also schon fertig. Aber vielleicht versuchst du trotzdem mal, die Formel selbst herzuleiten ;) .
|
Re: Epizykloide programm
so hab alles her geLitten. geht auch alles ganz gut
was mich jetzt aber noch stört ist das der mir beim start nich gleich anzeigt sondern erst wenn man reset oder start drückt kann da mir mal jemand sagen wie man das hin bekommt
Delphi-Quellcode:
falls der ausschnitt nich reicht oben ist ja der gesammte angehängt
procedure TForm1.Formcreate(Sender: TObject);
begin x0:=148; y0:=128; form1.button2.Visible:=true; form1.Button4.Visible:=false; timer1.Enabled:=false; doublebuffered := true; // anzeigen der erzeugten bitmaps w:= paintbox1.width ; h:= paintbox1.height ; paintbox1.canvas.brush.color:=clwhite; bitmap1 := Tbitmap.Create; bitmap2 := Tbitmap.Create; bitmap1.PixelFormat := pf8bit; bitmap1.Width := w; bitmap1.height := h; bitmap1.TransparentColor := clBtnFace; bitmap2.PixelFormat := pf8bit; bitmap2.Width := w ; bitmap2.height := h ; with bitmap1.Canvas do begin ellipse(x0-r1,y0-r1,x0+r1,y0+r1); //zentraler Kreis ellipse(x0+r1,y0+r2,x0+r1+2*r2,y0-r2); //außen Kreis pen.Color:=clred; ellipse(x0+r1+2,y0+2,x0+r1-2,y0-2); pen.Color:=clblack; end; paintbox1.Canvas.Draw(0,0,bitmap1); end; hoffe ihr könnt mir helfen achso hab gleich noch ein problem wenn ich stop drücke und dann wieder ohne was zu machen wieder start mache soll der mir ander stelle weiter malen das macht er aber die alte bahn soll auch erhalten werden und das wird immer gelöscht
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin winkel:=winkel+1; // pro schritt erhöhung des winkels winkelrad:=winkel/180*pi; xn:=x0+round((r1+r2)*cos(winkelrad)-r2*cos((r1+r2)*winkelrad/r2)); yn:=y0+round((r1+r2)*sin(winkelrad)-r2*sin((r1+r2)*winkelrad/r2)); xk:=x0+round((r1+r2)*cos(winkelrad)); yk:=y0+round((r1+r2)*sin(winkelrad)); with bitmap1.Canvas do begin brush.Color:=clwhite; pen.Color:=clwhite; rectangle(0,0,w,h); pen.Color:=clblack; ellipse(x0-r1,y0-r1,x0+r1,y0+r1); ellipse(xk-r2,yk-r2,xk+r2,yk+r2); pen.Color:=clred; ellipse(xn+2,yn+2,xn-2,yn-2); pen.Color:=clblack; end; bitmap2.Canvas.Pixels[xn,yn]:=clblack; paintbox1.Canvas.Draw(0,0,bitmap2); paintbox1.Canvas.Draw(0,0,bitmap1); paintbox1.Canvas.CopyMode:=cmSrcAnd; paintbox1.Canvas.CopyRect(rect(0,0,w,h) ,bitmap2.Canvas, rect(0,0,w,h)); paintbox1.Canvas.CopyMode:=cmSrcCopy ; end; procedure TForm1.Button4Click(Sender: TObject); //Stop knopf begin form1.button2.Visible:=true; form1.Button4.Visible:=false; timer1.Enabled:=false; end; |
Re: Epizykloide programm
SO jetzt funzt fast alles
aber hab mal ne frage hab das ja mit ner paintbox und 2 bitmaps gemacht damit mir die bitmaps gleich beim start angezeigt werden hab ich das mit dem eventmanager gemacht und bei onpaint paintbox1click ein gestellt das klappt auch aber wenn ich fenster klein mache oder ein anderes fenster drüber mache und dann wieder das prog an mache macht der die bitmaps wieder neu und malt nich einfach weiter und also geht die bahn verloren geht das auch anders??? so das auch mal klein gemacht werden kann oder ist das nich möglich??? |
Re: Epizykloide programm
Hi!
Vielleicht lässt sich das ganze durch
Delphi-Quellcode:
lösen (wenn Form1 das entsprechende Formular ist :wink: )
Form1.Doublebuffered:=True;
Ansonsten auf ein Bitmap im Speicher zeichnen und das dann onPaint erst anzeigen. Ciao Frederic |
Re: Epizykloide programm
also Form1.Doublebuffered:=True; geht nich oder sag mal so es hat nix bewirkt
hm hab auch die procedure formfestroy drin
Delphi-Quellcode:
wurde mir empfohlen obwohl ich nich weiß was das bewirken soll
procedure TForm1.FormDestroy(Sender: TObject);
begin bitmap1.Free; bitmap2.Free; end; kann es sein das es deswegen nich geht??? |
Re: Epizykloide programm
Hallo Langa,
schaue Dir mal ![]() Gruß Hawkeye |
Re: Epizykloide programm
hi!
Zitat:
Anscheinend benutzt du intern schon die von mir angesprochenen Bitmaps und die werden hier (beim Beenden des Programms) sauber freigegeben. Allerdings frage ich mich, ob das nicht im FormClose besser aufgehoben wäre.... Ciao Frederic |
Re: Epizykloide programm
Hm gut also daran leigt es schon mal nicht aber trotzdem versteh ich das nich mit dem paintbox.onpaint steig da nich durch bei mir verschwindet was immer noch wie kann ich das speichern so das es nicht weg ist???
|
Re: Epizykloide programm
Zitat:
(b) in OnPaint der PaintBox musst Du das richtige Bitmap ausgeben also
Delphi-Quellcode:
procedure TForm.PaintBox1Paint (Sender: TObject);
begin PaintBox.Canvas.Draw (0,0,Bitmap); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 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