我在学习五子棋程序,界面中加了两个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;
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;
解决方案 »
- FastReport问题
- 我想修改系统中某个快捷方式的“目标”属性,该如何写代码实现?谢谢
- bde连接也出错,以前一直是可以的,怪!!!哪位知道的?
- 如何在用idftpserver做的服务器中限制传输速度?
- 租房被骗,郁闷..... 散分
- 大家议议:深圳长城宽带、E家宽、ADSL哪个好?本人正犹豫不知装哪个好?
- 关于数据库备份的问题?
- 小意思:如何在两个窗体进行变量的调用!最好举个例子,本人刚学不久!
- 请问怎样在Delphi的窗体上放置动态的GIF动画,Image控件是不行的,有什么好方法吗?
- 急啊!哪位高手请进来帮帮吧。
- clientdataset求助?(高分)
- ADOQuery的传入SQL是不是有长度限制
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.
-------------这样就可以了...
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.
--------------------又省下两句,呵呵
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.
---------------
那里的偏差呀?我做的时候是按image1时全屏的,你所说的偏差有可能出现在这里...
///////上面说错了,image2时全屏的,其实就是根据你的实际情况修改上面那个函数的参数就可以了,大不了把image2.left和image2.top这些参数用进取就可以了...
回家之后重新用五子棋程序调试,完全正常了.谢谢!!!