关于拖动问题(50分)

  • 主题发起人 主题发起人 zengxi
  • 开始时间 开始时间
Z

zengxi

Unregistered / Unconfirmed
GUEST, unregistred user!
form上有一个panel,现想通过鼠标在panel上拖动来拖动窗体,怎么办。<br>不能使用普通的“在窗体的任意位置拖动窗体”的方法
 
简单的方法如下:<br>procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift:  TShiftState; X, Y: Integer);<br>const <br>&nbsp;SC_DragMove = $F012; // a magic number <br>begin <br>&nbsp;ReleaseCapture; <br>&nbsp;Form1.perform(WM_SysCommand, SC_DragMove, 0);<br>end; <br>但是有缺陷,窗体向上不能移出屏幕,需要自己写代码记录鼠标位置。<br>简单通用的方法可以看我的主页《MovePanel》。<br>eagleboost.myrice.com
 
magic number?<br>原理好象是骗windows点在标题栏上吧
 
&nbsp;private<br>&nbsp; &nbsp; { Private declarations }<br>&nbsp; &nbsp; P: TPoint;<br><br>procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,<br>&nbsp; Y: Integer);<br>begin<br>&nbsp; if ssLeft in Shift then<br>&nbsp; begin<br>&nbsp; &nbsp; Left := Left + x - P.x;<br>&nbsp; &nbsp; Top := Top + y - P.y;<br>&nbsp; end;<br>end;<br><br>procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;<br>&nbsp; Shift: TShiftState; X, Y: Integer);<br>begin<br>&nbsp; P.x := x;<br>&nbsp; P.y := y;<br>end;
 
多人接受答案了。
 
后退
顶部