问问:下面的程序有问题吗?我运行就是通过不了,说什么Access Violation问题哦?我也不知道这里的问题到底出现在哪里,因为用了两个类,我想用record,但是说出错,但是用了两个class,程序过程中没有出错,只是运行的时候出了问题,能帮帮我吗?
unit Unit1;interfaceuses
  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);
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);
    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.

解决方案 »

  1.   

    TCarMove的  contructur  裏面,各個類成員變理,你構造了沒有??
      

  2.   

    是哦,刚刚看了人家的程序,是用了constructor crate 哦,试试看看,如何构造呢?TTimer控件?
      

  3.   

    是不是不是想TForm那样的类都是需要constructor create的呢?
      

  4.   

    自己定义的对象(TTimer)当然要创建啊
    如果是拖的控件可以不用创建
      

  5.   

    TTimerXUpTimer(x,y:integer)这种好像不是Ontimer格式吧
      

  6.   

    你定义那么多timer做什么呢?Ontimer都没关联,一点用都没有的
      

  7.   

    一定是要用Ontime的,我看到我们平常用的怎么是timer1timer事件呢?
      

  8.   

    拖个TTimer控件,双击就是OnTimer事件
    定义TTimer,Timer.Ontimer = TimerTimer;
    Ontimer事件的参数是(Sender: TObject)
      

  9.   

    FCarMove
    对象没有创建,就使用了
      

  10.   

    现在对象我也创建了,可是没有效果哦,也许真得是那个TTimerXUpTimer事件不能代替TTimerXUp的Ontimer事件哦,可是我又不知道到底把它放到哪里好哦,况且格式我都不知道到底怎么写好哦,写在Form1 的FormCreate事件中吗?格式这样行吗:FCarMove.TTimerXUp.OnTimer=FCarMove.TTimerXUpTimer;
    可是好像还是有问题哦
      

  11.   

    如果我采用把
                               FCarMove.TTimerXUp.OnTimer=FCarMove.TTimerXUpTimer
    结果是说什么“ Incompatible types: 'TObject' and 'Integer' ”问题是这样的,
    是不是后面的那个过程函数的后面参数一定得是(Sender:TObject),可是我现在那个过程函数的后面括号当中用的,请问一下这个怎么处理?
      

  12.   


    上面说Ontimer事件的参数是(Sender: TObject),可是现在我的参数是integer哦,这样的意思是不是说就不能这样赋值了
      

  13.   

    是啊,可以通过事件赋值的,把你的那个事件赋给OnTimer事件,但是参数要一定相同才行,不然会出错的。