![]() |
Ein mir unverständliches Problem ist aufegtaucht.
Ich weiß, dass der titel doof ist, aber ich aknnes nciht besser beschreiben.
Habe ein programm, in dem sich ein Ball über Die Form bewegen soll, indem er sihc immer wieder neu löscht und zeichnet. Beim kompilieren hab cih noch keine Fehler, aber an den markierten stellen gibt es dann immer access violations.
Delphi-Quellcode:
Ich komm nun seit ein paar Stunden einfach nicht darauf, was falsch ist. :gruebel:
unit UHA;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TBall = class x,y,r,vx,vy:integer; color:TColor; procedure init(aX,aY,aVX,aVY,aR:Integer;acolor:TColor); procedure move; end; type TForm1 = class(TForm) Timer1: TTimer; PaintBox1: TPaintBox; procedure Timer1Timer(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Basketball:TBall; implementation {$R *.dfm} procedure Tball.move; begin Form1.PaintBox1.Canvas.Brush.Color:=clwhite; Form1.PaintBox1.Canvas.Pen.color:=clwhite; Form1.PaintBox1.Canvas.Ellipse(x-r,y-r,x+r,y+r); //<-- und hier.danach isses immer wieder hier bis ich neu starte x:=x+vx; y:=y+vy; Form1.PaintBox1.Canvas.brush.Color:=color; Form1.PaintBox1.Canvas.pen.color:=color; Form1.PaintBox1.Canvas.ellipse(x-r,y-r,x+r,y+r); end; procedure TBall.init(aX,aY,aVX,aVY,aR:Integer;acolor:TColor); begin Create; x:=aX; y:=aY; vx:=aVX; vy:=aVY; r:=aR; color:=acolor; end; procedure TForm1.Timer1Timer(Sender: TObject);// Intervall=5 begin Basketball.move; end; procedure TForm1.FormCreate(Sender: TObject); begin Basketball.init(50,50,3,-4,10,RGB(255,255,0)); end; //<---HIER zuerst procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin Basketball.Free; end; end. Bitte helft einem armen kleinen Jungen |
Re: Ein mir unverständliches Problem ist aufegtaucht.
Du createst deine TBall-Instanz nicht ;)
|
Re: Ein mir unverständliches Problem ist aufegtaucht.
Hi,
Du musst eine Klasse mit einem ![]()
Delphi-Quellcode:
Auch würde ich Dir empefehlen, die "BasketBall" Variable in den public Abschnittes des Forms zu velagern.
type
TBall = class(TObject) // der Rest... constructor Create(aX,aY,aVX,aVY,aR:Integer;acolor:TColor); end; // .. procedure TForm1.FormCreate(Sender: TObject); begin Basketball := TBall.Create(50,50,3,-4,10,RGB(255,255,0)); end; Außerdem solltest Du bedenken, dass es nicht besonders gut ist, wenn Du aus der TBall Klasse heraus auf die globale Form-Variable zugreifst. Es wäre besser, wenn Du dem TBall im Konstruktor noch einen TCanvas übergeben kannst, auf dem der Ball sich dann zeichnet. mfG imrage228 |
Re: Ein mir unverständliches Problem ist aufegtaucht.
Moin
Des weiteren ist es auch Unsinn das Timer-Intervall auf 5 zu setzen. Win9x schafft maximal 50ms, Win2000/XP 10ms. |
Re: Ein mir unverständliches Problem ist aufegtaucht.
Hi!
Wähle doch bitte einen sinnvollen Titel für deinen Thread. Dann kann er bspw. über die Suche besser gefunden werden. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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