标题:“抓不到的Button”后续问题,求大神指点~
只看楼主
Begin2011
Rank: 2
等 级:论坛游民
帖 子:60
专家分:61
注 册:2011-6-7
结帖率:83.33%
已结贴  问题点数:15 回复次数:7 
“抓不到的Button”后续问题,求大神指点~
“抓不到的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组件是在主窗体之内随机移动
或者在四个角落移动也可以(随机移动!)
但是鼠标是点不到组件上面的
求大神们指点啊~~~~~~~~~~~~~!!!!!
搜索更多相关主题的帖子: procedure repeat begin 
2011-06-12 20:18
a954624
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2011-5-17
得分:0 
我不会写  给你个思路你看看可以吗

 取屏幕分辨率   取程序位置   取控件相对位置    判断鼠标位置    窗口内随机控件位置
2011-06-12 20:55
a954624
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2011-5-17
得分:3 
又看了一遍你的程序、、还是不懂写的什么。。。。刚开始学习。别介意


再给你个方法

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

2011-06-12 21:00
a954624
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2011-5-17
得分:0 
看了你的程序  虽然看不懂  
但是发现并没有出现FORM 窗口的属性  
你不取窗口的大小  也没有直接定义移动的范围

肯定要出去啊
2011-06-12 21:03
zin5970
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:29
专家分:195
注 册:2008-10-10
得分:12 
先看下你的代码:
你虽然通过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;
2011-06-13 12:38
Begin2011
Rank: 2
等 级:论坛游民
帖 子:60
专家分:61
注 册:2011-6-7
得分:0 
回复 5楼 zin5970
谢谢大神的指导
非常的感谢!!!
本人实在是太菜了
所以非常感谢这位大哥给我的帮助
对我非常有用!!
谢谢
谢谢!
2011-06-15 19:56
Begin2011
Rank: 2
等 级:论坛游民
帖 子:60
专家分:61
注 册:2011-6-7
得分:0 
回复 3楼 a954624
谢谢
谢谢你啦
虽然说没有答案
但是你的思路还是对我有帮助的
楼下有个人给出了答案
你也去看看吧
谢谢你的好心
2011-06-15 19:57
yuutian
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:137
专家分:686
注 册:2010-10-27
得分:0 
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;
2011-06-27 21:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-342612-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.162613 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved