表单的拖动(50分)

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

kebin

Unregistered / Unconfirmed
GUEST, unregistred user!
当表单设为BsDiaolog模式(对话框模式)时,怎样用鼠标拖动表单?
 
可以这样解决,响应MouseDown和MouseMove以及MouseUP事件,在
事件处理中用程序移动这个Form;
如下:

=================================
Var MousePressTag : Boolean;
Oldx : integer;
Oldy : integer;
procedure TForm1.FormMouseDown(...);
begin
MousePressTag := True;
Oldx:=x;
Oldy:=y;
end;

procedure TForm1.FormMouseUp(...);
begin
MousePressTag := False;
end;

procedure TForm1.FormMouseMove(...);
begin
if MousePressTag then
begin //如果要获得和Windows的Form移动完全一样的效果,
//你可以在这儿画虚框,这好象就不难了。
left:=left+x-Oldx;
Top:=Top+y-Oldy;
end;
end;

=======
 
aimingoo回答基本正确,有点问题:
修改如下:
procedure TForm1.FormMouseUp(...);
begin
MousePressTag := False;
end;

procedure TForm1.FormMouseMove(...);
begin
if MousePressTag then
begin //如果要获得和Windows的Form移动完全一样的效果,
//你可以在这儿画虚框,这好象就不难了。
left:=left+x-Oldx;
Top:=Top+y-Oldy;
oldx:=form1.Left;//form位置改变后,必须重新保存!
oldy:=form1.Top;
end;
end;
 
麻烦谁解释一下这个问题的意思,
form的borderstyle为bsDialog时,
难道不能用鼠标拖动吗?

 
如果是bsNone的话,这是最简单而又最完美的方法:
procedure TForm1.FormMouseDown(Sender: Tobject; Button: TMouseButton;
Shift: TShiftState; x, y: Integer);
begin
ReleaseCapture;
TWinControl(Application.Mainform).Perform(WM_SYSCOMMAND, $F012, 0);
end;

否则,如果为bsDialog,你只需用鼠标按住Form的标题栏拖动即可。 :)
 
喂,东西要了,还不付钱?版主太过分,问问题从“专家分”中扣,我现在“专家
分”为-108,求求你了,我等钱用! (:-(
 
抢分的来了!
$F017 可以用于任何有Handle 的控件。
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const
SC_DragMove = $F017; {WM_SysCommand 's param means Move.}
begin
if Button <> mbRight then
begin
ReleaseCapture;
Form1.Perform(WM_SysCommand, SC_Dragmove, 0);
end;
end;
 
报表的问题虽然无人回答,这个问题
几位大虾的解释总该够了?
 
再不结案,也算我抢分一份子!
 
多人接受答案了。
 
后退
顶部