Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Ball Problem , kommischer Fehler (https://www.delphipraxis.net/55260-ball-problem-kommischer-fehler.html)

Penelopee 18. Okt 2005 19:36


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:
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;
der Fehler der kommt:
Project xxxx raised exception class yyyyy with message 'zzzzzz'.

Process stopped. Use Step or Run to continue.


Ichbin echt ratlos!!
Danke!!!

soulflare 18. Okt 2005 19:41

Re: Ball Problem , kommischer Fehler
 
Es wäre gut wenn du sagen könntest was in yyyyy und zzzzz steht... ;-)

lizardking 18. Okt 2005 19:55

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

Penelopee 18. Okt 2005 19:58

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

lizardking 18. Okt 2005 20:10

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.

Penelopee 18. Okt 2005 21:33

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

lizardking 18. Okt 2005 21:51

Re: Ball Problem , kommischer Fehler
 
Zitat:

Zitat von Penelopee
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!!!

Du solltest vielleicht mal Dein komplettes Projekt hier reinstellen und etwas genauer schreiben, was passiert bzw. nicht passiert. Wenn ich z.B. ein leeres Projekt erstelle, die entsprechenden Komponenten (Timer1 - Timer4, Image1 und die beiden Buttons) plaziere und den von mir bearbeiteten Quellcode einfuege passiert erstmal gar nix. Wenn ich dann den OnTimer-Event von Timer1 mit der entsprechenden procedure per Objektinspektor verbinde, dann erscheint beim ersten Timer-Event eine weisse Flaeche mit einem Kreis. Klick ich dann auf BStart, dann sehe ich 4 Kreise. Eigentlich alles, wie man es bei dem Code erwarten wuerde. Die Prozedur "AendereOrt" wird nirgendwo aufgerufen, also werden die Kreise auch immer am selben Ort gezeichnet.

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) ;)

Penelopee 18. Okt 2005 22:02

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

lizardking 18. Okt 2005 22:27

Re: Ball Problem , kommischer Fehler
 
Zitat:

Zitat von Penelopee
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!!!!

Wie erwaehnt :

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 02:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz