主题:[原创]有个问题想要得到区友们的验证!
baige0228
[专家分:110] 发布于 2006-04-06 23:06:00
随机BUTTON的生成时有属性它
array_button[i].top:=50+((i-1) div x) *20;//x是全局变量
array_button[i].left:=2+((i-1) mod x)*20;
array_button[i].onmousedown:=mybuttonclick;
在mybuttonclick()中用(sender as TButton).控制属性和事件
但还是不知道具体的array_button[i]的i
我想问:是不是用
var weizhi,a,b :integer
begin
a:=(sender as TButton).left;
b:=(sender as TButton).top;
weizhi:=(((b-50)div 20)*x+(a-2)div 20)+1;
end;
就可以反向得到 i的值啊?或者说还有什么更好的办法,比如直接用某个函数实现呢?
回复列表 (共8个回复)
沙发
sunriver [专家分:1330] 发布于 2006-04-07 09:23:00
1、你用的是动态的事件,又是很多Button公用一个事件,好像只有Sender能取到。
板凳
cilix [专家分:1030] 发布于 2006-04-07 09:28:00
没这么复杂,你可以用很多种方法实现,如tag例:
for i=1 to 20 do begin
mybutton[i] := Tbutton.create(nil);
mybutton[i].tab := i;end;
onbuttonclick:
showmessage('你按的是第'+inttostr(sender.tag)+'个button');
3 楼
cilix [专家分:1030] 发布于 2006-04-07 09:29:00
打错一个字母,mybutton[i].tag:=i;
4 楼
baige0228 [专家分:110] 发布于 2006-04-07 10:11:00
好的,谢谢你,我去试试你的做法,但我用了我的方法,用(SENDER AS BUTTON)的TOP和 LEFT两个属性,编译是没有问题,我想应该还是可以反向求得I值的,因为虽然是动态产生的,但在其没有生成另外的BUTTON组之前它们的TOP和LEFT 还是不会变的
5 楼
baige0228 [专家分:110] 发布于 2006-04-07 10:53:00
我试了一下.果然高手的方法就是好,能够运行,而我用的哪个方法提示错误
[Fatal Error] Could not create output file 'D:\Program Files\Borland\Delphi7\Projects\Project1.exe'
现在这个问题是解决了,但我还有点担心,想问:我的button1.tag 为0是什么意思,会不会与mybutton[i].tag:=i;发生冲突啊?要是我还还有静态button2,那会不会通过mybutton[i].tag:=i;把我的button2.tag覆盖或者存在重复啊~~
6 楼
baige0228 [专家分:110] 发布于 2006-04-07 10:57:00
并且 为什么我用
var weizhi,a,b :integer
begin
a:=(sender as TButton).left;
b:=(sender as TButton).top;
weizhi:=(((b-50)div 20)*x+(a-2)div 20)+1;
end; 这个方法会产生这样的错误
[Fatal Error] Could not create output file 'D:\Program Files\Borland\Delphi7\Projects\Project1.exe'
而用了cilix
的方法就没有这个问题了呢?很难想通哦
7 楼
cilix [专家分:1030] 发布于 2006-04-07 12:13:00
delphi下所有的控件在创建时TAG值都为0,所以应该让I从非0的值开始
6楼的那个方法理论上编译应该不会有问题,出现那个问题应该还有其他的警告或是错误信息
8 楼
baige0228 [专家分:110] 发布于 2006-04-07 18:04:00
cilix 请问可以加你的QQ吗?感觉这样问与答 太慢了,不过要是加了你的QQ的话,你在分数上可能会有点损失,呵呵~~~理解
我来回复