一般情況下,移動一個(gè)窗體需要將鼠標(biāo)放置在標(biāo)題欄上才能拖動窗體,為 什么非要使用標(biāo)題欄呢?其實(shí)我們可以使用一個(gè)巧妙的方法來實(shí)現(xiàn)將鼠標(biāo)放置 在窗體上按下就可拖動窗體,下面先看實(shí)現(xiàn)代碼。在Form1的“Private”部分聲明過程:
在private部分加入下列代碼:
procedure wmnchittest(var msg:twmnchittest);
message wm_nchittest;
在程序部分加入以下代碼:
procedure TForm1.wmnchittest(var msg:twmnchittest);
begin
inherited;
if (htclient=msg.result) then msg.result:=htcaption;
end;
上面的關(guān)鍵代碼雖然只有兩行,但它實(shí)現(xiàn)了鼠標(biāo)直接拖動窗體的目的。代碼的原理是利用窗體的WM_NCHITTEST消息,這個(gè)消息是當(dāng)光標(biāo)移動、鼠標(biāo)按下或釋放時(shí)發(fā)生的,當(dāng)程序檢測到鼠標(biāo)在窗體中按下的消息后(消息的值為htClient),將鼠標(biāo)在標(biāo)題欄上按下時(shí)產(chǎn)生的消息(值為htCaption)傳遞出去,這樣就巧妙的欺騙程序認(rèn)為是標(biāo)題欄被按下,當(dāng)然就可拖動窗體了。