怎样给form1自定义mouse do ubleclick消息响应!!!!!!!!(50分)

  • 主题发起人 主题发起人 jumphigh
  • 开始时间 开始时间
J

jumphigh

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样给form1自定义mouse doubleclick消息响应!!!!!!!!

因为我在程序中定义了如下一个消息,所有原来form的鼠标事件都给屏蔽了
结果无法使用form的FormDblClick事件
我想自定义一个事件,谁来帮帮我

procedure Tbar.WMNChitTest(var Msg: TWMNChitTest);
begin
inherited;

if msg.Result=htclient then msg.Result:=htcaption;
end;
 
不知道你的代码的意思。不过你把两句反过来,dblclick就可以起作用了。
 
我的意思是

当单击form窗口时实现单击标题栏的功能,也就是拖动窗口

双击form窗口时干别的事情
 
在你的WMNChitTest中, 应该首先得到鼠标的位置, 然后检测一下鼠标是否在Control上面,
如果不在的话,可以返回htCaption, 否则返回htClient

检测可以使用Form本身的PointAtPos函数
 
建议重载wndproc函数。
 
重载wndproc的方法我试过了
但WM_LBUTTONDBLCLK还是被WM_NCHITTEST屏蔽掉了
 
我用Delphi4,和Delphi5的Form下测试了一下你的那段程序,没有你说说的屏蔽问题
不知道你的Tbar用的是什么控件里面, 你可以这样:

procedure Tbar.WMNChitTest(var Msg: TWMNChitTest);
begin
inherited;

if (Msg.Result = htClient) and
(ControlAtPos(ScreenToClient(SmallPointToPoint(TWMNCHitTest(Msg).Pos)), False) = nil) then
Msg.Result := htCaption;
end;
 
您还是没有明白我的意思

上述功能完全没有问题

关键是我还要实现double click的响应
问题是用了上面的代码double click也就是WM_LBUTTONDBLCLK被屏蔽了
根本就无法处理double click 事件
 
确实屏蔽了。两者不能共存。
 
你可以在上面的代码中进行判断,再发一个WM_LBUTTONDBLCLK
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
623
import
I
I
回复
0
查看
571
import
I
后退
顶部