to flyforlove(为情飞) =============================== 呵呵 我找了半天vcl的源码,我认为其实form、panel、button都是窗体,为什么TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,肯定是vcl里什么地方处理了,所以才会有的只响应WM_NCLBUTTONDOWN这个消息,而不响应WM_LBUTTONDBLCLK这个消息,但是我却找不到,不知道你怎么想。
其实TWinControl下的都是窗体,看看帮助就知道了 TWinControl provides the common functionality for all controls that act as wrappers for Microsoft Windows screen objects ("windows").按道理说TCustomControl类里的应该也可以响应WM_LBUTTONDBLCLK消息的。 但是不知道为什么,就是没有执行,这个还得看看源文件。
这类消息应该是非客户区的消息吧,
不知道你的panel是怎么响应的。
====================================
你自己作个panel组件,然后重写 WM_LBUTTONDOWN 这个消息
Procedure TRollUpTitel.LButtonDown(Var Message: TWMLButtonDown);
Begin
inherited;
releasecapture;
sendmessage(Parent.Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
End;
你看它响应不响应!!!
不知道就说不知道, 何必搞的你和高手一样。
去掉parent
sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
================================
实际上就是鼠标按着form的标题栏拖动的效果, 也就是说发完这个消息,你就可以按着鼠标左键来拖动这个panel了,
那你就理解错了,
你这个消息其实是发送给窗体的,
并不是你得panel来响应的,这几个消息都是非客户区相应的。sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
你这里的handle其实是窗体的handle,csdn上的红星星们可不是吃素的,可不要轻易说人家不懂,哈哈。
================================
怎么会是窗体那, 这个handle是继承自panel的组件。。
tapnel = class(TPanel)
public
Procedure LButtonDown(Var Message: TWMLButtonDown); Message WM_LBUTTONDOWN;
Procedure LButtonDBDown(Var Message: TWMLButtonDblClk); Message WM_LBUTTONDBLCLK;
end;
这里面
procedure tapnel.LButtonDown(var Message: TWMLButtonDown);
begin
releasecapture;
sendmessage(Handle, WM_NCLBUTTONDOWN, HTCAPTION, 0);
end;
的handle会是窗体的handle吗?????? 不懂,请赐教?
原来如此,你想实现在客户区托动窗体的功能,
================================
我实现的并不是托动窗体的功能,而是在窗体中拖动panel的功能
然后把你编写的这个组件拖到窗体里,然后在窗体的一个button click事件里写一个
showmessage(inttostr(form1.handle));你看看这两个handle的值是不是一样的。
===============================
呵呵 没关系 我还要谢谢你有空来看我的问题那不是一样的,看完你的后我试了一下,两个handle值是不一样的。
没想到还有这样的用法,
我试了一下TWinControl类的子类里,
只有TCustomControl里的子类没有办法响应WM_NCLBUTTONDBLCLK消息,
别的都可以,
TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,
至于为什么会是这样的,我也不知道,哈哈。
===============================
呵呵 我找了半天vcl的源码,我认为其实form、panel、button都是窗体,为什么TWinControl类的子类都可以响应WM_NCLBUTTONDOWN消息,肯定是vcl里什么地方处理了,所以才会有的只响应WM_NCLBUTTONDOWN这个消息,而不响应WM_LBUTTONDBLCLK这个消息,但是我却找不到,不知道你怎么想。
TWinControl provides the common functionality for all controls that act as wrappers for Microsoft Windows screen objects ("windows").按道理说TCustomControl类里的应该也可以响应WM_LBUTTONDBLCLK消息的。
但是不知道为什么,就是没有执行,这个还得看看源文件。