Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Epizykloide programm (https://www.delphipraxis.net/67253-epizykloide-programm.html)

Langa 16. Apr 2006 19:52

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???

Khabarakh 16. Apr 2006 20:30

Re: Epizykloide programm
 
Das ist der Punkt auf dem Kreis, also schon fertig. Aber vielleicht versuchst du trotzdem mal, die Formel selbst herzuleiten ;) .

Langa 17. Apr 2006 12:00

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:
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;
falls der ausschnitt nich reicht oben ist ja der gesammte angehängt

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;

Langa 19. Apr 2006 21:29

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???

fkerber 19. Apr 2006 21:35

Re: Epizykloide programm
 
Hi!

Vielleicht lässt sich das ganze durch
Delphi-Quellcode:
Form1.Doublebuffered:=True;
lösen (wenn Form1 das entsprechende Formular ist :wink: )

Ansonsten auf ein Bitmap im Speicher zeichnen und das dann onPaint erst anzeigen.


Ciao Frederic

Langa 19. Apr 2006 21:47

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:
procedure TForm1.FormDestroy(Sender: TObject);
begin
   bitmap1.Free;
   bitmap2.Free;
end;
wurde mir empfohlen obwohl ich nich weiß was das bewirken soll

kann es sein das es deswegen nich geht???

Hawkeye219 19. Apr 2006 21:55

Re: Epizykloide programm
 
Hallo Langa,

schaue Dir mal Delphi-Referenz durchsuchenTPaintBox.OnPaint in der Online-Hilfe an. Ganz besonders das Beispiel 2...

Gruß Hawkeye

fkerber 19. Apr 2006 21:59

Re: Epizykloide programm
 
hi!

Zitat:

Zitat von Langa
hm hab auch die procedure formfestroy drin
Delphi-Quellcode:
procedure TForm1.FormDestroy(Sender: TObject);
begin
   bitmap1.Free;
   bitmap2.Free;
end;
wurde mir empfohlen obwohl ich nich weiß was das bewirken soll

kann es sein das es deswegen nich geht???

Nein, damit hat es nichts zu tun.
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

Langa 19. Apr 2006 22:11

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???

Kroko1999 20. Apr 2006 07:10

Re: Epizykloide programm
 
Zitat:

Zitat von Langa
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???

(a) bei dem Deutsch fällt mir das "Durchsteigen" auch sehr schwer :wink:
(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.
Seite 2 von 2     12   

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