注册 登录
编程论坛 Delphi论坛

“抓不到的Button”后续问题,求大神指点~

Begin2011 发布于 2011-06-12 20:18, 578 次点击
“抓不到的Button”一帖https://bbs.bccn.net/thread-342076-1-1.html



我自己按照这个思路去试了一下,
发现还是不行
我的代码如下:
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Button1.Left:=Button1.Left-10;
  Button1.Top := BUtton1.Top-5;
  if (button1.left - button1.width<0) or
  (Button1.Top-button1.Height<0) then
  repeat Button1.Left:=Button1.Left+10
  until button1.Left+button1.width>form1.Width;
end;
结果到最后那个Button还是消失在了窗体之中
希望各位大神给出详细代码
本人乃是一菜鸟
诚心希望大神们的指点.
再次给出以下要求:
我希望做出来的是Button组件是在主窗体之内随机移动
或者在四个角落移动也可以(随机移动!)
但是鼠标是点不到组件上面的
求大神们指点啊~~~~~~~~~~~~~!!!!!
7 回复
#2
a9546242011-06-12 20:55
我不会写  给你个思路你看看可以吗

 取屏幕分辨率   取程序位置   取控件相对位置    判断鼠标位置    窗口内随机控件位置
#3
a9546242011-06-12 21:00
又看了一遍你的程序、、还是不懂写的什么。。。。刚开始学习。别介意


再给你个方法

定义2个随机数 大小肯定是程序内最大的宽度 跟高度的值
然后随机~~随机。。随机 不就OK?

#4
a9546242011-06-12 21:03
看了你的程序  虽然看不懂  
但是发现并没有出现FORM 窗口的属性  
你不取窗口的大小  也没有直接定义移动的范围

肯定要出去啊
#5
zin59702011-06-13 12:38
先看下你的代码:
你虽然通过repeat until 来控制了Button1的left值,
但你并没有对Button1的Top值进行控制,而是单纯的进行Button1.Top := BUtton1.Top-5;
这样你的button1就会一直变高,最后超出范围。
我记得曾对你说过,这个程序的实质就是对Button1的Left和Top两个属性进行范围内的控制啊。我帖给你一个我刚写的窗体内随机移动的代码

procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  NewLeft,NewTop:Integer;  //定义的新的button坐标的x,y值
begin
  Randomize;    //随机数
  repeat
    NewLeft :=Random(form1.Width-Button1.Width); // 随机一个0到窗体宽度之内的随机数
  until
    NewLeft <> X;    //新的坐标最好不要与当前坐标相同

  repeat
    NewTop :=Random(form1.Height-Button1.Height); // 随机一个0到窗体高度之内的随机数
  until
    NewTop <> Y;   //新的坐标最好不要与当前坐标相同

  Button1.Left := NewLeft;   //给按钮赋新的left
  Button1.Top := NewTop;    //给按钮赋新的top

end;
#6
Begin20112011-06-15 19:56
回复 5楼 zin5970
谢谢大神的指导
非常的感谢!!!
本人实在是太菜了
所以非常感谢这位大哥给我的帮助
对我非常有用!!
谢谢
谢谢!
#7
Begin20112011-06-15 19:57
回复 3楼 a954624
谢谢
谢谢你啦
虽然说没有答案
但是你的思路还是对我有帮助的
楼下有个人给出了答案
你也去看看吧
谢谢你的好心
#8
yuutian2011-06-27 21:50
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin                                       //这里设置窗体的大小为300*200
    if button1.left<=300 then
       button1.letf:=button1.left+50
    else
       button1.left:=0;
    if button1.top<=200 then
       button1.top:=button1.left+25
    else
       button1.top:=0;
end;
1