回 帖 发 新 帖 刷新版面

主题:两个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.

回复列表 (共5个回复)

沙发

这里首先的问题就是我没有对那个TCarMove类进行Create哦,然后就是好像那个TTimerXUpTime的事件好像不能起到Ontimer事件的功能哦

板凳

大家能帮帮我吗?

3 楼

[color=0000FF][size=5][b]
长期承接各种毕业设计:
本人计算机专业毕业,会多种语言,对于VB,VC,DELPHI,ASP,sql等非常熟悉, 对于数据库编程,socket编程等有丰富的经验,有需要的请联系QQ: 383147818 请注明: pfan毕业设计[/b][/size][/color]

4 楼

你好.我是全职网赚工作者.
如果你有时间有电脑.
想在网络上创业.请联系我..
项目绝对真实.详情QQ空间资料
加盟请联系 QQ908889846

5 楼

寻找中国的最优秀的网商领袖精英 
淘宝商盟元亨 qq: 908889846 
当今世界正经历着全球经济一体化的大潮,中国本土企业也因此面临着前所未有的机遇与挑战。
在这场洗礼中,哪些互联网平台有能力成为世界级的电子商务平台?网商精英要怎样做,才能最终成长为世界级网商精英领袖?
淘宝商盟平台震撼登场,携手淘宝30万商家联盟购物商城。
平台刚刚启动,互联网的网商精英请咨询qq: 908889846 
占领市场第一先机,合力打造网商系统!
淘宝商盟官网   www.taobaosm.com
 http://blog.sina.com.cn/tbsm8
淘宝商盟奖励制度

我来回复

您尚未登录,请登录后再回复。点此登录或注册