S sjilong Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-07 #1 怎样截获双击标题栏和拖动标题栏的消息?<br>急用,得到答案后即刻加分。
Z zhihuali Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-07 #3 一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,<br>为 什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠<br>标放置 在窗体上按下就可拖动窗体,下面先看实现代码。在Form1的<br>“Private”部分声明过程:<br><br>在private部分加入下列代码:<br>procedure wmnchittest(var msg:twmnchittest);<br>message wm_nchittest;<br>在程序部分加入以下代码:<br>procedure TForm1.wmnchittest(var msg:twmnchittest);<br>begin<br>inherited;<br>if (htclient=msg.result) then msg.result:=htcaption;<br>end;<br> 上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体<br>的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是<br>当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体<br>中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时<br>产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认<br>为是标题栏被按下,当然就可拖动窗体了。<br>
一般情况下,移动一个窗体需要将鼠标放置在标题栏上才能拖动窗体,<br>为 什么非要使用标题栏呢?其实我们可以使用一个巧妙的方法来实现将鼠<br>标放置 在窗体上按下就可拖动窗体,下面先看实现代码。在Form1的<br>“Private”部分声明过程:<br><br>在private部分加入下列代码:<br>procedure wmnchittest(var msg:twmnchittest);<br>message wm_nchittest;<br>在程序部分加入以下代码:<br>procedure TForm1.wmnchittest(var msg:twmnchittest);<br>begin<br>inherited;<br>if (htclient=msg.result) then msg.result:=htcaption;<br>end;<br> 上面的关键代码虽然只有两行,但它实现了鼠标直接拖动窗体<br>的目的。代码的原理是利用窗体的WM_NCHITTEST消息,这个消息是<br>当光标移动、鼠标按下或释放时发生的,当程序检测到鼠标在窗体<br>中按下的消息后(消息的值为htClient),将鼠标在标题栏上按下时<br>产生的消息(值为htCaption)传递出去,这样就巧妙的欺骗程序认<br>为是标题栏被按下,当然就可拖动窗体了。<br>
Y YB_unique Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-07 #4 点击标题栏的消息是htCaption<br>例如SendMessage(Handle,WM_NCLButtonDown,HTCaption,GetMessagePos); //发送点击标题栏的消息<br>拖动标题栏的消息可以用WM_NCHITTEST或者鼠标自身的sc_DragMove<br>例如SendMessage(handle,wm_SysCommand,sc_DragMove,0); //发送拖动标题栏的消息<br><br>
点击标题栏的消息是htCaption<br>例如SendMessage(Handle,WM_NCLButtonDown,HTCaption,GetMessagePos); //发送点击标题栏的消息<br>拖动标题栏的消息可以用WM_NCHITTEST或者鼠标自身的sc_DragMove<br>例如SendMessage(handle,wm_SysCommand,sc_DragMove,0); //发送拖动标题栏的消息<br><br>
小 小雨哥 Unregistered / Unconfirmed GUEST, unregistred user! 2001-11-08 #5 看 http://www.delphibbs.com/delphibbs/dispq.asp?lid=714857<br>有详细代码。