我在学习五子棋程序,界面中加了两个image,image2的picture属性为棋盘的图片,
image1的picture属性为棋子 。为了效果,我让棋子图片(image1)随鼠标移动。
大概代码如下:这时由于移动的棋子图片image1挡住了自己,所以没办法下子(填充image1)。
除非修改坐标,例如x,y分别减30才可以,如下:
请问有什么办法不改变x,y坐标也能实现(不然移动的棋子就和下(填充)的位置看起来不一致的感觉了)。
谢谢!!procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
image1.left:=x; 这里改为image1.left:=x-30;
image1.Top:=y;  这里改为image1.left:=y-30;
end;procedure TForm1.Image2MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
image2.Canvas.Draw(x,y,image1.picture.Graphic);
end;

解决方案 »

  1.   

    当轮到你下棋的时候把鼠标的形状变成棋子的形状怎么样?单击image2填充之后再变回来...
      

  2.   

    implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        (Sender as Timage).Visible:=False;
        image2MouseUp(image2,button,shift,x+image1.Left,y+image1.Top);
    end;procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        image2.Canvas.Draw(x,y,image1.Picture.Graphic);
        image1.Visible:=True;
    end;procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        image1.Left:=X-20;
        image1.Top:=Y-20;
    end;end.
    -------------这样就可以了...
      

  3.   

    implementation{$R *.dfm}procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        //(Sender as Timage).Visible:=False;
        image2MouseUp(image2,button,shift,x+image1.Left,y+image1.Top);
    end;procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        image2.Canvas.Draw(x,y,image1.Picture.Graphic);
        //image1.Visible:=True;//另外一个思路的遗留产物,现在没用了
    end;procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        image1.Left:=X-20;
        image1.Top:=Y-20;
    end;end.
    --------------------又省下两句,呵呵
      

  4.   

    先谢谢heluqing(鉴之小河〖挣大钱娶美女〗) 大哥但是为什么我用您的代码好像有点偏差.unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        Image1: TImage;
        Image2: TImage;
        procedure FormCreate(Sender: TObject);
        procedure Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure Image2MouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end; Var 
      Form1: TForm1;
      mybmp:Tbitmap;
      thebmp:Tbitmap;
    implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
    begin
    thebmp:=Tbitmap.Create;
    mybmp:=Tbitmap.Create;
    thebmp.LoadFromFile('p1.bmp');  //p1为棋子图片 34*34
    mybmp.LoadFromFile('b.bmp'); //b为棋盘背景图
    image1.picture.Graphic:=thebmp;   //棋子
    image2.Picture.Graphic:=mybmp;    //背景图
    image2.Canvas.draw(0,0,image2.Picture.Graphic);  //画背景图(即棋盘)end;procedure TForm1.Image2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    image1.left:=x;
    image1.top:=y;
    end;procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    beginimage2MouseUp(image2,button,shift,x+image1.Left,y+image1.top);
    end;procedure TForm1.Image2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    image2.Canvas.Draw(x,y,image1.Picture.Graphic);end;end.
      

  5.   

    但是为什么我用您的代码好像有点偏差
    ---------------
    那里的偏差呀?我做的时候是按image1时全屏的,你所说的偏差有可能出现在这里...
      

  6.   

    image2MouseUp(image2,button,shift,x+image1.Left,y+image1.top);
    ///////上面说错了,image2时全屏的,其实就是根据你的实际情况修改上面那个函数的参数就可以了,大不了把image2.left和image2.top这些参数用进取就可以了...
      

  7.   

    非常感谢heluqing(鉴之小河〖挣大钱娶美女〗) 大哥!!!
    回家之后重新用五子棋程序调试,完全正常了.谢谢!!!