![]() |
Ball Problem , kommischer Fehler
Ich möchte mit Canvas 4 Bälle prpgrammieren , die sich auf einer leinwand bewegen.Wo ist mein Fehler???
Delphi-Quellcode:
der Fehler der kommt:
Interface
Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; Type TForm1 = Class(TForm) Timer1: TTimer; Image1: TImage; BStop: TButton; Timer2: TTimer; BStart: TButton; Timer3: TTimer; Timer4: TTimer; Procedure Timer1Timer(Sender: TObject); procedure BStartClick(Sender: TObject); procedure BStopClick(Sender: TObject); End; Var Form1: TForm1; Implementation {$R *.dfm} Var x1,y1,DeltaX1,Deltay1, x2,y2,DeltaX2,Deltay2, x3,y3,DeltaX3,Deltay3, x4,y4,DeltaX4,Deltay4: integer; Farbe1,Farbe2,Farbe3,Farbe4, TischFarbe: tColor; start:boolean; Image1:TImage; procedure AendereOrt(var x,y,DeltaX,Deltay:integer); begin If x < 10 Then DeltaX := -DeltaX Else If x >= Image1.Width - 80 Then DeltaX := -DeltaX; If y < 10 Then Deltay := -DeltaY Else If y >= Image1.Height - 80 Then Deltay := -DeltaY; x:=x+DeltaX; y:=y+Deltay; end; procedure Zeichne(x,y,DeltaX,Deltay:integer; Farbe:tColor); begin x:=x+DeltaX; y:=y+Deltay; Image1.Canvas.Ellipse(x,y,x+50,y+50); end; Procedure TForm1.Timer1Timer(Sender: TObject); Begin Zeichne(x1,y1,DeltaX1,DeltaY1, Farbe1); Zeichne(x2,y2,DeltaX2,DeltaY2, Farbe2); Zeichne(x3,y3,DeltaX3,DeltaY3, Farbe3); Zeichne(x4,y4,DeltaX4,DeltaY4, Farbe4); End; procedure TForm1.BStartClick(Sender: TObject); begin start:=true; TischFarbe:=clgreen; x1:=100 ; y1:=100 ; DeltaX1:=10; DeltaY1:=10; Farbe1:=clBlack; x2:=250 ; y2:=400 ; DeltaX2:=5; DeltaY2:=5 ; Farbe2:=clyellow; x3:=120 ; y3:=220 ; DeltaX3:=15; DeltaY3:=15; Farbe3:=clBlue; x4:=20 ; y4:=140 ; DeltaX4:=20; DeltaY4:=20 ; Farbe4:=clfuchsia; end; procedure TForm1.BStopClick(Sender: TObject); begin start:=false; end; Project xxxx raised exception class yyyyy with message 'zzzzzz'. Process stopped. Use Step or Run to continue. Ichbin echt ratlos!! Danke!!! |
Re: Ball Problem , kommischer Fehler
Es wäre gut wenn du sagen könntest was in yyyyy und zzzzz steht... ;-)
|
Re: Ball Problem , kommischer Fehler
Schau Dir mal das Image1 genauer an. Kommt naemlich doppelt vor. Einmal in der Form-Klasse und dann nochmal als globale Variable.
Am besten pack mal diese ganzen globalen Variablen in die Klasse mit rein und auch die Prozeduren Zeichne und AendereOrt. Das ist auf jeden Fall der Fehler, der Dir momentan zu schaffen macht. Gruss, Lizzy |
Re: Ball Problem , kommischer Fehler
ich weiß nich ganz was du meinst , kannst du mal bitte meinen Quelltext umstellen , sodass es richtig ist und ich sehe was du meinst.
Vielen Dank!! |
Re: Ball Problem , kommischer Fehler
Okay. Hab's mal eben mit der "heissen Nadel" umgestrickt ;-)
Das laeuft sicherlich noch nicht so, wie Du wolltest, aber der Fehler ist schonmal raus :)
Delphi-Quellcode:
unit Unit1;
Interface Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; Type TForm1 = Class(TForm) Timer1: TTimer; Image1: TImage; BStop: TButton; Timer2: TTimer; BStart: TButton; Timer3: TTimer; Timer4: TTimer; Procedure Timer1Timer(Sender: TObject); procedure BStartClick(Sender: TObject); procedure BStopClick(Sender: TObject); procedure Zeichne(x,y,DeltaX,Deltay:integer; Farbe:tColor); procedure AendereOrt(var x,y,DeltaX,Deltay:integer); private x1,y1,DeltaX1,Deltay1, x2,y2,DeltaX2,Deltay2, x3,y3,DeltaX3,Deltay3, x4,y4,DeltaX4,Deltay4: integer; Farbe1,Farbe2,Farbe3,Farbe4, TischFarbe: tColor; start:boolean; End; Var Form1: TForm1; Implementation {$R *.dfm} procedure TForm1.AendereOrt(var x,y,DeltaX,Deltay:integer); begin If x < 10 Then DeltaX := -DeltaX Else If x >= Image1.Width - 80 Then DeltaX := -DeltaX; If y < 10 Then Deltay := -DeltaY Else If y >= Image1.Height - 80 Then Deltay := -DeltaY; x:=x+DeltaX; y:=y+Deltay; end; procedure TForm1.Zeichne(x,y,DeltaX,Deltay:integer; Farbe:tColor); begin x:=x+DeltaX; y:=y+Deltay; Image1.Canvas.Ellipse(x,y,x+50,y+50); end; Procedure TForm1.Timer1Timer(Sender: TObject); Begin Zeichne(x1,y1,DeltaX1,DeltaY1, Farbe1); Zeichne(x2,y2,DeltaX2,DeltaY2, Farbe2); Zeichne(x3,y3,DeltaX3,DeltaY3, Farbe3); Zeichne(x4,y4,DeltaX4,DeltaY4, Farbe4); End; procedure TForm1.BStartClick(Sender: TObject); begin start:=true; TischFarbe:=clgreen; x1:=100 ; y1:=100 ; DeltaX1:=10; DeltaY1:=10; Farbe1:=clBlack; x2:=250 ; y2:=400 ; DeltaX2:=5; DeltaY2:=5 ; Farbe2:=clyellow; x3:=120 ; y3:=220 ; DeltaX3:=15; DeltaY3:=15; Farbe3:=clBlue; x4:=20 ; y4:=140 ; DeltaX4:=20; DeltaY4:=20 ; Farbe4:=clfuchsia; end; procedure TForm1.BStopClick(Sender: TObject); begin start:=false; end; end. |
Re: Ball Problem , kommischer Fehler
ja danke der Fehler ist behoben , aber funktionieren tut es nicht.Ich finde da aber keinen Fehler!!Der Fehler muss doch in der Zeichne Procedur liegen oder?Ich will die Zeiche Procedur für einen Ball durchführen und dann für alle anderen Bälle übernehmen!!Wo ist der Fehler??
Vielen Dank!!! |
Re: Ball Problem , kommischer Fehler
Zitat:
Ach ja... und nebenbei. Du musst auf jeden Fall zwischendurch mal das Canvas loeschen (oder andere Massnahmen ergreifen, damit der urspruengliche Kreis verschwindet, bevor der neue gezeichnet wird) ;) |
Re: Ball Problem , kommischer Fehler
Liste der Anhänge anzeigen (Anzahl: 1)
ich zeig euch jetzt mal , wie das ganze aussehen soll.(Im Anhang)Hier sind jetzt aber blos 3 Bälle zu sehen , aber ob 3 oder 4 is ja egal.Ich muss jetzt meinen Quelltext so umstellen , dass es wie hier aussieht , mehr will ich nicht!!
Danke für die Hilfe!!!! |
Re: Ball Problem , kommischer Fehler
Zitat:
1. Komplettes Delphi-Projekt als Anhang 2. Genaue Fehlerbeschreibung 3. Was fehlt noch ? zu 1 : In der einzelnen Unit fehlen Informationen. Alleine daraus kann man nicht sehen, was sonst noch im gesamten Projekt passiert. Welche Ereignisse sind wie verknuepft ? zu 2 : Ich hab ja grob geschildert, wie's bei mir aussieht. Was denkst Du muesste bei Deinem Code dargestellt werden ? zu 3 : Eigentlich siehe 2. Nirgendwo wird z.B. die Hintergrundfarbe des TImage irgendwo zugewiesen, nirgendwo wird die Position der Kreise veraendert und nirgendwo ... Das Programm macht genau, was ich nach dem Quelltextstudium erwarten wuerde und es muesste noch viel mehr passieren, damit es sich wie Dein Anhang verhalten wuerde. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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