AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ein mir unverständliches Problem ist aufegtaucht.
Thema durchsuchen
Ansicht
Themen-Optionen

Ein mir unverständliches Problem ist aufegtaucht.

Ein Thema von bastischo · begonnen am 10. Mai 2006 · letzter Beitrag vom 10. Mai 2006
Antwort Antwort
bastischo

Registriert seit: 12. Jan 2006
Ort: Planet Erde
40 Beiträge
 
Delphi 7 Personal
 
#1

Ein mir unverständliches Problem ist aufegtaucht.

  Alt 10. Mai 2006, 15:02
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:
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.
Ich komm nun seit ein paar Stunden einfach nicht darauf, was falsch ist.
Bitte helft einem armen kleinen Jungen
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#2

Re: Ein mir unverständliches Problem ist aufegtaucht.

  Alt 10. Mai 2006, 15:06
Du createst deine TBall-Instanz nicht
Julian J. Pracht
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Ein mir unverständliches Problem ist aufegtaucht.

  Alt 10. Mai 2006, 15:08
Hi,

Du musst eine Klasse mit einem Delphi-Referenz durchsuchenconstructor erzeugen, nicht mit einer Prozedur (Edit: und in dieser musst Du auch nicht "Create" aufrufen )

Delphi-Quellcode:
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;
Auch würde ich Dir empefehlen, die "BasketBall" Variable in den public Abschnittes des Forms zu velagern.
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
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Ein mir unverständliches Problem ist aufegtaucht.

  Alt 10. Mai 2006, 15:10
Moin

Des weiteren ist es auch Unsinn das Timer-Intervall auf 5 zu setzen. Win9x schafft maximal 50ms, Win2000/XP 10ms.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#5

Re: Ein mir unverständliches Problem ist aufegtaucht.

  Alt 10. Mai 2006, 15:19
Hi!

Wähle doch bitte einen sinnvollen Titel für deinen Thread. Dann kann er bspw. über die Suche besser gefunden werden.


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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