主题:两个class,Access Violation问题,但是不知道问题出现在哪里,帮我看看!
问问:下面的程序有问题吗?我运行就是通过不了,说什么Access Violation问题哦?我也不知道这里的问题到底出现在哪里,因为用了两个类,我想用record,但是说出错,但是用了两个class,程序过程中没有出错,只是运行的时候出了问题,能帮帮我吗?
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg;
/////////******************************
type
TCarMove=class //record
TTimerXUp:TTimer;
TTimerXDown:TTimer;
TTimerYUp:TTimer;
TTimerYDown:TTimer;
private
//{ Private declarations}
public
//{ Public declarations}
procedure TTimerXUpTimer(x,y:integer);
procedure TTimerXDownTimer(x,y:integer);
procedure TTimerYUpTimer(x,y:integer);
procedure TTimerYDownTimer(x,y:integer);
//public
end;
///////////////***************
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Button1: TButton;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FCarMove:TCarMove;
xu,xd,yu,yd:integer;
a:integer;
implementation
{$R *.dfm}
////////////////////////////////////////*********************
//我想把这些都写成函数,可是中间出了点差错哦
procedure TCarMove.TTimerXUpTimer(x,y:integer); // 往X正轴运动
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x-Form1.Image2.Picture.Bitmap.Width,y-Form1.Image2.Picture.Bitmap.Height div 2,Form1.Image2.Picture.Bitmap);
x:=x+5;
//TTimerXUp.Enabled:=False;
TTimerXDown.Enabled:=False;
TTimerYUp.Enabled:=False;
TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
xu:=x;//记下X1,之后需要的
end;
procedure TCarMove.TTimerXDownTimer(x,y:integer);
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x,y-Form1.Image2.Picture.Bitmap.Height div 2,Form1.Image2.Picture.Bitmap);
x:=x-5;
TTimerXUp.Enabled:=False;
//TTimerXDown.Enabled:=False;
TTimerYUp.Enabled:=False;
TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
xd:=x;//
end;
procedure TCarMove.TTimerYUpTimer(x,y:integer);
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x-Form1.Image2.Picture.Bitmap.Width div 2,y-Form1.Image2.Picture.Bitmap.Height,Form1.Image2.Picture.Bitmap);//CarMoveYUp事件过程
y:=y+5;
TTimerXUp.Enabled:=False;
TTimerXDown.Enabled:=False;
//TTimerYUp.Enabled:=False;
TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
yu:=y;
end;
procedure TCarMove.TTimerYDownTimer(x,y:integer);
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x-Form1.Image2.Picture.Bitmap.Width div 2,y,Form1.Image2.Picture.Bitmap);
y:=y-5;
TTimerXUp.Enabled:=False;
TTimerXDown.Enabled:=False;
TTimerYUp.Enabled:=False;
//TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
yd:=y;
end;
/////////////////////////////////////******************************************************************
procedure TForm1.FormCreate(Sender: TObject);
begin
PaintBox1.Left:=Image1.Left;
PaintBox1.Top:=Image1.Top;
PaintBox1.Width:=Image1.Width;
PaintBox1.Height:=Image1.Height;
FCarMove:=TCarMove.Create;
FCarMove.TTimerXUp.Enabled:=False;
FCarMove.TTimerXUp.Interval:=100;
FCarMove.TTimerXDown.Enabled:=False;
FCarMove.TTimerXDown.Interval:=100;
FCarMove.TTimerYUp.Enabled:=False;
FCarMove.TTimerYUp.Interval:=100;
FCarMove.TTimerYDown.Enabled:=False;
FCarMove.TTimerYDown.Interval:=100;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FCarMove.TTimerYUpTimer(152+7,a);
a:=a+5;
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, jpeg;
/////////******************************
type
TCarMove=class //record
TTimerXUp:TTimer;
TTimerXDown:TTimer;
TTimerYUp:TTimer;
TTimerYDown:TTimer;
private
//{ Private declarations}
public
//{ Public declarations}
procedure TTimerXUpTimer(x,y:integer);
procedure TTimerXDownTimer(x,y:integer);
procedure TTimerYUpTimer(x,y:integer);
procedure TTimerYDownTimer(x,y:integer);
//public
end;
///////////////***************
type
TForm1 = class(TForm)
Image1: TImage;
Image2: TImage;
Button1: TButton;
PaintBox1: TPaintBox;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
FCarMove:TCarMove;
xu,xd,yu,yd:integer;
a:integer;
implementation
{$R *.dfm}
////////////////////////////////////////*********************
//我想把这些都写成函数,可是中间出了点差错哦
procedure TCarMove.TTimerXUpTimer(x,y:integer); // 往X正轴运动
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x-Form1.Image2.Picture.Bitmap.Width,y-Form1.Image2.Picture.Bitmap.Height div 2,Form1.Image2.Picture.Bitmap);
x:=x+5;
//TTimerXUp.Enabled:=False;
TTimerXDown.Enabled:=False;
TTimerYUp.Enabled:=False;
TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
xu:=x;//记下X1,之后需要的
end;
procedure TCarMove.TTimerXDownTimer(x,y:integer);
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x,y-Form1.Image2.Picture.Bitmap.Height div 2,Form1.Image2.Picture.Bitmap);
x:=x-5;
TTimerXUp.Enabled:=False;
//TTimerXDown.Enabled:=False;
TTimerYUp.Enabled:=False;
TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
xd:=x;//
end;
procedure TCarMove.TTimerYUpTimer(x,y:integer);
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x-Form1.Image2.Picture.Bitmap.Width div 2,y-Form1.Image2.Picture.Bitmap.Height,Form1.Image2.Picture.Bitmap);//CarMoveYUp事件过程
y:=y+5;
TTimerXUp.Enabled:=False;
TTimerXDown.Enabled:=False;
//TTimerYUp.Enabled:=False;
TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
yu:=y;
end;
procedure TCarMove.TTimerYDownTimer(x,y:integer);
var
TemBit:TBitMap;
begin
Form1.Repaint;
TemBit:=TBitMap.Create;
try
TemBit.Assign(Form1.Image2.Picture.Graphic);
Form1.PaintBox1.Canvas.Draw(x-Form1.Image2.Picture.Bitmap.Width div 2,y,Form1.Image2.Picture.Bitmap);
y:=y-5;
TTimerXUp.Enabled:=False;
TTimerXDown.Enabled:=False;
TTimerYUp.Enabled:=False;
//TTimerYDown.Enabled:=False;
finally
TemBit.Free;
end;
Form1.Image2.Visible:=False;
yd:=y;
end;
/////////////////////////////////////******************************************************************
procedure TForm1.FormCreate(Sender: TObject);
begin
PaintBox1.Left:=Image1.Left;
PaintBox1.Top:=Image1.Top;
PaintBox1.Width:=Image1.Width;
PaintBox1.Height:=Image1.Height;
FCarMove:=TCarMove.Create;
FCarMove.TTimerXUp.Enabled:=False;
FCarMove.TTimerXUp.Interval:=100;
FCarMove.TTimerXDown.Enabled:=False;
FCarMove.TTimerXDown.Interval:=100;
FCarMove.TTimerYUp.Enabled:=False;
FCarMove.TTimerYUp.Interval:=100;
FCarMove.TTimerYDown.Enabled:=False;
FCarMove.TTimerYDown.Interval:=100;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
FCarMove.TTimerYUpTimer(152+7,a);
a:=a+5;
end;
end.