type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);  private
    { Private declarations }
  public
    { Public declarations }
//    procedure BtnClkHandler(Sender:TObject);    //-----这里报错,不能编译  end;var
  Form1: TForm1;
  myshapes:array[1..8,1..8] of TShape;             //定义一个8*8的SHAPE数组implementation{$R *.dfm}procedure BtnClkHandler(Sender:TObject);
begin
  with Sender as TButton do
    begin
      //做我想做的
    end;
end;procedure TForm1.Button1Click(Sender: TObject);   //动态生成一个SHAPE
begin
  windows.beep(1000,100);     //响铃一下
  myshapes[1][1]:=Tshape.Create(self);
  with myshapes[1][1] do
    begin
      Width:=40;
      Top:=40;
      Height:=70;
      Left:=40;
      Shape:=stRectangle;
      Pen.Color:=clblack;
      pen.Width:=2;
      pen.Style:=psClear;
      brush.Style:=bsSolid;
      brush.Color:=clblack;
      visible:=true;
      Parent:=self;
    end;
  myshapes[1][1].OnMouseDown:=Form1.BtnClkHandler;   //该怎么写???
end;谢谢了。

解决方案 »

  1.   

    procedure BtnClkHandler(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      with Sender as TButton do
        begin
          //做我想做的
        end;
    end;
    ............
    myshapes[1][1].OnMouseDown:=Form1.BtnClkHandler;
      

  2.   

    看你的代码,有2处错误:
    type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);  private
        { Private declarations }
      public
        { Public declarations }
    //    procedure BtnClkHandler(Sender:TObject);    //-----这里报错,不能编译 //**这里声明的不对应该是
          procedure BtnClkHandler(Sender:TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
      end;var
      Form1: TForm1;
      myshapes:array[1..8,1..8] of TShape;             //定义一个8*8的SHAPE数组implementation{$R *.dfm}procedure BtnClkHandler(Sender:TObject); //**这里也不对,应该是procedure TForm1.BtnClkHandler(Sender:TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 你少写了“TForm1.”是你编译错误的原因begin
      with Sender as TButton do
        begin
          //做我想做的
        end;
    end;procedure TForm1.Button1Click(Sender: TObject);   //动态生成一个SHAPE
    begin
      windows.beep(1000,100);     //响铃一下
      myshapes[1][1]:=Tshape.Create(self);
      with myshapes[1][1] do
        begin
          Width:=40;
          Top:=40;
          Height:=70;
          Left:=40;
          Shape:=stRectangle;
          Pen.Color:=clblack;
          pen.Width:=2;
          pen.Style:=psClear;
          brush.Style:=bsSolid;
          brush.Color:=clblack;
          visible:=true;
          Parent:=self;
        end;
      myshapes[1][1].OnMouseDown:=BtnClkHandler;   //该怎么写???
    end;
      

  3.   

    myshapes[1][1].OnMouseDown:=Form1.BtnClkHandler;
    编译报错
      

  4.   

    如chlear()所说:不过 运行点击就出错了,无法响应MOUSEDOWN事件
    with Sender as TButton do
    我想应该是这里有问题???
      

  5.   

    不应该是 Sender as TButton 而是 Sender as TShape 才对