回 帖 发 新 帖 刷新版面

主题:[原创]随机BUTTON数组产生后...高分重谢

var
Form1: TForm1;
array_button:array of Tbutton;//随机BUTTON组动态申请
num_x,num_y:integer;


//随机产生BUTTONS组过程
procedure Tform1.G_Buttons();
var
i,n,x,y: integer;

begin
 x:= num_x;//全局变量
 y:= num_y;
 n:=(num_x)*(num_y);
 setlength(myarray1,n+1);
 for i:=1 to n do
 begin
 array_button[i]:=Tbutton.create(self);
 array_button[i].Parent:=form1;
 array_button[i].height:=20;
 array_button[i].width:=20;
 array_button[i].Top:=50+((i-1) div x) *20;
 array_button[i].left:=2+((i-1) mod y)*20;
 array_button[i].Caption:=' ';

 end;

end;

现在的问题是,我要定义一个array_button[i]的mousedown(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Integer);的事件,并且该事件要区分鼠标的左击 还是右击 来对应不同的代码

回复列表 (共5个回复)

沙发

这个简单我知道,但我不是高人所以我不能答

板凳


之所以 要高手进 是因为,怕很多的人,跑到里面一顿乱讲,最后搞的我头晕,既然你能够回答这个问题,那还请帮帮忙啊,没有必要气愤于"高手请进"这几个字把

3 楼

先自定义一个鼠标按下事件:
procedure CustomButtonMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
然后把动态创建的按钮的OnMouseDown事件指向它:
  array_button[i].OnMouseDown:=CustomButtonMouseDown;
判断左右键:
  if button=mbRight then
  begin
   
  end
  else
  begin
  end;

4 楼

呵呵 谢谢 aizaixiiii,你这个方法其实我正在用,我也不知道行不行,因为
我在 下面要做
  if button=mbRight then
  begin
   //调用一个普通函数
  end
  else 
  begin
  //调用一个递归函数
 end;
在 普通函数中要改变array_button[i].caption 的值可以用
(sender as TButtong).caption:=  改变
并且要在 递归函数中改变其他的array_button[X].caption 的值 恐怕就不能用
(sender as TButtong).caption:=  改变了把
哎 真的是难啊,我才学了一个月的DELPHI就遇到了这么多的难题
其实我正在编一个扫雷游戏的程序,就快要成功了,基本上就这个难关了,很感谢你的帮忙啊

5 楼

呵呵 这个问题我解决了,其实可以根据(sender as tbutton).left 和
(sender as tbutton).top 值来反向计算出是哪个array_button[i]调用了它
可以把I值计算出来
谢谢大家 给我的帮助!

我来回复

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