假设:
A窗口有一个按钮,鼠标移动到该按钮上,那个按钮会发亮。
请问用sendmessage来发送wm_mousemove怎么实现这种效果,有个前提是,真实的鼠标仍在做它自己的事情。
我的想法是用一个定时线程每30ms往A窗口句柄内的按钮发送wm_mousemove。
但是真实的鼠标仍在做其它的事情,这种30ms sendmessage一个wm_mousemove与真实的鼠标真的移动在按钮上不动,有什么区别吗?比如在事件上?
A窗口有一个按钮,鼠标移动到该按钮上,那个按钮会发亮。
请问用sendmessage来发送wm_mousemove怎么实现这种效果,有个前提是,真实的鼠标仍在做它自己的事情。
我的想法是用一个定时线程每30ms往A窗口句柄内的按钮发送wm_mousemove。
但是真实的鼠标仍在做其它的事情,这种30ms sendmessage一个wm_mousemove与真实的鼠标真的移动在按钮上不动,有什么区别吗?比如在事件上?
解决方案 »
- 怎么实现delphi与asp交互
- 如何获去dbgrideh中的picklist选中的值?
- 求助:ShellExecute!
- 浮点数(即实数)的转换问题?
- 高分贴,有钱的捧个钱场,没钱的帮忙UP!
- 一个关于DBGrid的问题,欢迎大家来看看
- 跪求 医院住院系统的示例代码
- Tworddocument控件中,如何实现将Tworddocument的内容保存到指定的地方(已提供原代码参考)。请教
- 为什么用 SetLength 给动态数组设大小,编译出错
- 求Vcldb50.bpl这个文件,请各位朋友安装了delphi和C++ Bulder留意下谢谢
- RTTI中的TTypeInfo有些奇怪
- 请各位大哥帮忙看看交换机吐出来的话单格式!
onmouseleave(离开控件区域),如果用delphi7是没有这些事件的,需要自己给控件扩展加入这几个事件。
加入这几个事件也很简单,不过如果鼠标快速划过控件区域,这几个事件就不太灵光了,这时需要通过trackmouseevent来精确控制。
var
tme:ttrackmouseevent; // 定义个全局变量或form的成员
。// 在form1的oncreate中初始化tme:ttrackmouseevent结构体
procedure tform1.formcreate(sender: tobject);
begin
tme.cbSize := sizeof(ttrackmouseevent);
tme.dwFlags := tme_leave + tme_hover;//表示要过问leave及hover这两个消息
tme.hwndTrack := form1.handle;// 关联的窗体句柄
tme.dwHoverTime := 100; // 关键在此,关联鼠标移动速度,单位毫秒
// 即鼠标悬停在控件上超过100毫秒发送wm_mousehover消息,表示鼠标悬停了
end;// 接下来自己重写窗口过程WndProc,在里面处理鼠标悬停和离开消息
procedure tform1.wndproc(var m: tmessage);
begin
with m do
begin
case msg of
// 鼠标移动消息
wm_mousemove:
begin
trackmouseevent(tme);
end; // 鼠标悬浮于窗体
wm_mousehover:
begin
// 这里做你所谓的“发光”的处理
end; // 鼠标离开窗体
wm_mouseleave:
begin
// 这里恢复到未“发光”时的状态
end;
end;
inherited wndproc(m);
end;
那么相应的,给tme.hwndTrack 指定按钮的窗口句柄 wndproc改用form1.windowproc
把form1.windowproc指向按钮的windowproc,在里面做同样的处理就可以了
灭啥时间了,就不写了,LZ自己撸定它吧
不好意思,我没有表达好我的问题。
我们打开网页,鼠标移动到 超链接 时,该超链接的文字下方会出现一条线。
如果我不用鼠标,而是用软件不停的发送wm_mousemove到网页句柄该超链接位置时,下方也会出现一条线。
我的问题是:即使不用真实的鼠标移动到该超链接,除了不停的发送wm_mousemove有没有其它的办法。
1.收集总共有多少消息;
2.分辨什么消息,在什么情况下,产生什么结果。
用这个在Delphi下反复测试,
最后在你要的环境下看看达到你要的结果没有。