各位老师好。
怎样去掉一个窗体的标量栏并且可让窗体自由移动?我试了borderstyle:=bsnone的方法,此法可去掉窗体的标量栏但不能让窗体自由移动。急需此功能,请诸位老师指点。

解决方案 »

  1.   

    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    const
      SC_DragMove = $F012;  { a magic number }
    begin
      ReleaseCapture;
      form1.perform(WM_SysCommand, SC_DragMove, 0);
    end;在鼠标按下事件里写上面的代码
      

  2.   

    采用模拟标题栏消息功能。
    type
      TFmNoneTitle = class(TForm)
      private
        { Private declarations }
        procedure OnNcHitTest(var msg: TWmNcHitTest); message WM_NCHITTEST;
      public
        { Public declarations }
      end;var
      FmNoneTitle: TFmNoneTitle;implementation{$R *.dfm}procedure TFmNoneTitle.OnNcHitTest(var msg: TWmNcHitTest);
    begin
      inherited;
      if (HTClient=msg.result) then msg.result:=HTCaption;
    end;
      

  3.   

    2楼的可以,不过楼主也可以加其他控件,比如 image 或panel 等等,只要在这些控件MouseDown里写
    const 
        SC_DragMove   =   $F012;     {   a   magic   number   } 
    begin 
        ReleaseCapture; 
        form1.perform(WM_SysCommand,   SC_DragMove,   0); 
    end; 就可以了
      

  4.   

    1.borderstyle:=bsnone;2.重写消息 WM_NCHITTEST 
    procedure drag(var M: twmnchittest); WM_NCHITTEST;procedure TForm1.drag(var M: twmnchittest);
    begin
        inherited;
      if m.Result = htclient then
        m.result := htcaption;
    end;
      

  5.   

    简单处理WM_NcHitTest消息,可以达到效果,但会导致窗口上的非TWincontrol无法接收到鼠标消息,不信的话可以在上放个SpeedButton控件或Image控件试试或Label控件。