MSDN里面介绍得很清楚了。还要别人给你翻译出来不成。

解决方案 »

  1.   

    To GoodHope
    MSDN的那一段
      

  2.   

    To GoodHope
    我查了WM_GETMINMAXINFO的说明但是还是没有办法将虚框去掉.
      

  3.   

    你比较一下用Form的Constraint.MaxWidth,MaxHeight和下面的代码的效果就知道了.type
      TForm1 = class(TForm)
        procedure wmgetminmaxinfo(var msg:tmessage);message wm_getminmaxinfo;
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure TForm1.wmgetminmaxinfo(var msg: tmessage);
    var
      p:^TMinmaxinfo;
    begin
      p:=pointer(msg.LParam);
      p^.ptMaxTrackSize.y:=500;
      p^.ptMaxSize.x:=500;
      p^.ptMaxSize.y:=500;
      p^.ptMaxTrackSize.x:=500;
    end;
      

  4.   

    的确效果不一样,你的方法虚框不会变大
    可是我希望根本不出现边框,不知有没有办法(不要说在显示属性里改一下哦)
    就是象,Word的工具栏拉下来时的窗口一样。也就是说不改显示属性但仍然有那个效果。
      

  5.   

    %^$&@^$@$^@,吐血,Word的什么效果?Word的窗口改变大小的时候也有那个虚框啊.
      

  6.   

    是Word的工具栏拉下来成为一个独立的窗口的时候,这时这个窗口在Move时没有虚框且里面的内容也跟着移动。
      

  7.   

    自己处理,如
    Var  fMoveForm : boolean;
         ptLeftTop, ptCursor : TPoint;
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      If Shift <> [ssLeft] Then Exit;
      fMoveForm := true;
      Screen.Cursor := crSizeAll;
      ptLeftTop := Point(Left, Top );
      GetCursorPos( ptCursor );
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      Var ptNewCursor : TPoint;
    begin
      If Shift <> [ssLeft] Then Exit;
      If Not fMoveForm Then Exit;  GetCursorPos( ptNewCursor );
      If (ptNewCursor.X = ptCursor.X) And (ptNewCursor.Y=ptCursor.Y) Then Exit;
      Left := Left + ptNewCursor.X - ptCursor.X;
      Top := Top + ptNewCursor.Y - ptCursor.Y;
      ptCursor.X := ptNewCursor.X;
      ptCursor.Y := ptNewCursor.Y;
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
    //  If Shift <> [ssLeft] Then Exit;
      Screen.Cursor := crDefault;
      fMoveForm := false;
    end;
      

  8.   

    上述是按住窗口客户区拖动的例子,以下模拟按住窗口标题栏平滑拖动:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;type
      TForm1 = class(TForm)
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
         fMoveForm : boolean;
         ptLeftTop, ptCursor : TPoint;     procedure WMNCLButtonDown( Var msg : TWMNCLButtonDown); message wm_nclbuttondown;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.DFM}procedure Tform1.WMNCLButtonDown( Var msg : TWMNCLButtonDown);
    begin
      If msg.HitTest <> HTCAPTION Then Begin Inherited; Exit; End;
      fMoveForm := true;
      SetCapture( Handle );
      Screen.Cursor := crSizeAll;
      ptLeftTop := Point(Left, Top );
      GetCursorPos( ptCursor );
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
      Var ptNewCursor : TPoint;
    begin
      If Not fMoveForm Then Exit;  GetCursorPos( ptNewCursor );
      If (ptNewCursor.X = ptCursor.X) And (ptNewCursor.Y=ptCursor.Y) Then Exit;
      Left := Left + ptNewCursor.X - ptCursor.X;
      Top := Top + ptNewCursor.Y - ptCursor.Y;
      ptCursor.X := ptNewCursor.X;
      ptCursor.Y := ptNewCursor.Y;
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      If Not fMoveForm Then Exit;
      Screen.Cursor := crDefault;
      fMoveForm := false;
      ReleaseCapture;
    end;end.