怎么能让被拖动的控件响应MouseMove事件(100分)

  • 主题发起人 主题发起人 coolnet
  • 开始时间 开始时间
C

coolnet

Unregistered / Unconfirmed
GUEST, unregistred user!
我用
ReleaseCapture;
TWinControl(Sender).Perform(WM_SYSCOMMAND,$F012,0);
实现了BitBtn的拖动,是写在MouseUp和MouseMove事件中的
但是在Move的过程中无法触发MouseMove中的其他程序
 
没有人知道吗?
是不是用了
ReleaseCapture;
TWinControl(Sender).Perform(WM_SYSCOMMAND,$F012,0);
后,系统就接管了此控件的鼠标事件了呢?
我发现控件的MouseDown事件倒是马上触发了,但在拖动的过程中始终无法触发MouseMove
事件,拖动结束后在控件上移动又能触发MouseMove事件了
 
噢,对呀
可是在拖动的过程中会触发什么事件呢?我试过FormMouseMove不触发。
 
Tobject1=class(tobject)
private
procedure whenmousemove(var msg:tmwmouse);message wm_mousemove;
end;
...
Tobject1.whenmousemove(var msg:twmmouse);
begin
?????:=msg.xpos;
?????:=msg.ypos;
end;

.....
begin
var yourobject:tobject1;

end;


 
这位朋友,你在拖动控件的时候,鼠标在控件上是不移动的啊~~~这时怎么触发onMouseMove事件?
此时的焦点在按钮上,不在FORM上~~~~~~
 
rolinyang
能说具体点吗?我照你的方法试了,却没成功.
 
说一说你要干什么?你这样做有必要吗?
 
在form的ondragover事件写,看看行不行,当然先判断移动的是不是你想要的控件
 
我想有一个办法,就是用TApplicationEvents的OnMessage事件,然后取Message的.Pt.X和.Pt.Y,您试试看。
 
rolinyang的意思是不是要我把BitBtn再封装一次,多写一个procedure呀?
To重载Corser:我想做一个类似画流程图的软件,用BitBtn代表节点,节点之间有
连线,拖动节点的时候连线也要跟着拖动。
ToBrave:OnDragOver事件试过了,也无法触发。
 
诸位大侠没有知道的了吗?
刚才看了一下Help,说Perform会跳过Windows的消息队列,直接向控件所在的窗口发消息,
意思是不是用了Perform后就不能响应队列中的消息了呢?
难道不能用Perform吗?
(急急急)
 
实际上,你把button拖到那个控件上,那个控件就响应ondragover事件

你看到的帮助,perform不进入Windows的队列,也就不触发application.onmessage事件
 
OK,明白了
不能用Perform了
 
后退
顶部