狂送300分!!速回答:鼠标的移动使得控件的相应移动(300分)

  • 主题发起人 主题发起人 陈宜秋
  • 开始时间 开始时间

陈宜秋

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在要使得鼠标一移动到控件的中心(如一个BUTTON)时,但鼠标不发生任何动作,该控
件能相应移动到另一地方,请问此时用什么命令能够实现?急!!!
 
没看明白。什么是“鼠标不发生任何动作”?既然说“相应”是不是要拖动啊?
如果是,试试在Button的OnMouseMove里写——
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
P: TPoint;
begin
if not bCenter then//bCenter是一个全局变量,至于什么时候设为False看你的需要了,比如在OnMouseUp里。
if (X = Button1.Width div 2) and (Y = Button1.Height div 2) then bCenter := True;
if bCenter then begin
P := ScreenToClient(Button1.ClientToScreen(Point(X, Y)));
Button1.Left := P.x - Button1.Width div 2;
Button1.Top := P.y - Button1.Height div 2;
end;
end;
 
说明白点。
 
在OnMouseMove事件中写点东西不就行了吗
 
onmousemove 中写点,如果必要再加个定时器
 
有时可能要刷新一下控件。
 
控件的onenter事件
 
最好在控件的OnMouseDown、OnMouseMove和OnMouseUp事件中编写代码
在mouseUp事件中设置一个移动的标志为true
在MouseMove事件中编写具体位置的代码
在Mousedown事件中把移动标志设置为false
 
陈宜秋,老实交待,是不是要搞得捉弄人的程序?
 
哈哈,害人啊,鼠标一上去,按钮就跑了,让人点不中,老兄很有创意,是不是想迷 MM ?

只要在 MouseMove 里面改变坐标就可以了。
 
真的想捉弄人吗?,不会吧
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
P: TPoint;
begin
P := ScreenToClient(Button1.ClientToScreen(Point(X, Y)));
Button1.Left :=P.X+Button1.Width ;
Button1.Top :=P.Y+Button1.Height ;
end;
 
能说的他们都说了。
我只补一下,把这个button的parent容器的doublebuffer设为true,移动时会少一些省烁
 
在onMouseMove事件中编写代码,程序运行比较慢,当鼠标快速运行时,
有时会出现“误”动作或“不反应”。
比如,当鼠标运动到IE的按钮或菜单上时,按钮马上变的有立体感。我用
在onMouseMove事件中编写代码的方法,很难达到实用效果。
请问,谁有妙法?

 
何必呢?....
何苦呢?....
 
多人接受答案了。
 
后退
顶部