form的拖动(50分)

  • 主题发起人 主题发起人 kai
  • 开始时间 开始时间
K

kai

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi设计中,如何在一个没有caption<br>的form中用一个panel来拖动form<br>
 
//只需在mousedown时向form发出move消息即可。<br><br>procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>begin<br>&nbsp; if Button &lt;&gt; mbRight then<br>&nbsp; begin &nbsp;<br>&nbsp; &nbsp; ReleaseCapture;<br>&nbsp; &nbsp; Form1.Perform(WM_SysCommand, $f017, 0);<br>&nbsp; end;<br>end;<br>
 
参见&lt;a href="http://www.gislab.ecnu.edu.cn/delphibbs/DispQ.asp?LID=65010"&gt;这里&lt;/a&gt;
 
可以用在Form的private段加上一个WMNCHittest事件处理器, 当鼠标到form的某个<br>区域内时告诉系统HitCaption.<br><br>private<br>&nbsp; ...<br>&nbsp; procedure WmNCHitTest(var Msg : TWMNCHitTest); message WM_NCHITTEST;<br><br>//The followint code set area (1..100, 1..100) of TForm1 to Caption area<br>procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);<br>var p: TPoint;<br>begin<br>&nbsp; inherited;<br>&nbsp; p := Point(Msg.XPos, Msg.YPos);<br>&nbsp; p := ScreenToClient(P);<br>&nbsp; if (P.X &gt;= 1) And (P.X &lt; 100) and<br>&nbsp; &nbsp; &nbsp;(P.Y &gt;= 1) And (P.Y &lt; 100) then<br>&nbsp; &nbsp; Msg.result := HTCaption<br>&nbsp; else<br>&nbsp; &nbsp; Msg.Result := HTClient;<br>end;
 
menxin的方法是最好的,我已经多次用这个方法了,<br>可以支持拖动所有的twincontrol,所以也可以<br>拖动button等等<br><br>&lt;font color=red&gt;Form1&lt;/font&gt;.Perform(WM_SysCommand, $f017, 0);<br><br>红色部分是指所要拖动的对象,可以随意修改。<br>所以也就可以实现按在一个按钮上拖动一个窗体等等效果了。
 
非常感谢,来分了.
 
后退
顶部