求代码  无边框窗口如何实现 鼠标按下移动 改变窗口大小的功能!谢谢

解决方案 »

  1.   

    form窗口的borderstyle的屬性為bsnone就是無變阿.在鼠标事件裡面寫阿,
       自己研究以下可以寫出來的,
      

  2.   

    public
        { Public declarations }
        procedure CreateParams(var Params: TCreateParams); override;
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      with Params do
      begin
        Style := (Style or WS_POPUP) xor (ws_dlgframe);
      end;
    end;
    procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      ReleaseCapture;
      PerForm(WM_syscommand,$F012,0);
    end;
      

  3.   

    鼠标按下移动时改变窗口的height ,width值
      

  4.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, 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);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
      private
        { Private declarations }
        startX,startY:integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
            if (ssLeft in Shift) then
            begin
                    screen.Cursor:=crDrag;
                    self.Left:=self.Left+X-startX;
                    self.Top:=self.Top+Y-startY;
            end;
    end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
            screen.Cursor:=crdefault;
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
            startX:=X;
            startY:=Y;
    end;end.
      

  5.   

    好了 根据: heluqing(鉴之小河) ( ) 信誉:100 的代码改了一下
    实现改变窗体大小的功能了不过还有一个问题 就是窗口调整大小的时候没有  调整效果
    我们在调整窗口的时候程序都会给出一个虚框  如何把他做出来呢??
    高手帮忙呀??
      

  6.   

    我程序现在的代码
      private
        { Private declarations }
        startX,startY:integer;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.Button2MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
            startX:=X;
            startY:=Y;
    end;procedure TForm1.Button2MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
    if (ssLeft in Shift) then
            begin
              screen.Cursor:=crSizeNWSE;
           end;
    end;procedure TForm1.Button2MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
        screen.Cursor:=crdefault;
        self.Width := Self.Width + x - startx;
        self.Height := self.Height + y - starty;
    end;end.
      

  7.   

    borderstyle 用默认的bsSizeable,不要用bsnone
      

  8.   

    转贴:把form窗口的borderstyle的屬性為bsnoneunit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        procedure WMNCHITTEST(var Msg : TWMNCHITTEST); message WM_NCHITTEST;  public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    procedure TForm1.WMNCHITTEST(var Msg: TWMNCHITTEST);const  cOffset = 10;var  vPoint: TPoint;begin  inherited;  vPoint := ScreenToClient(Point(Msg.XPos, Msg.YPos));  if PtInRect(Rect(0, 0, cOffset, cOffset),vPoint) then    Msg.Result := HTTOPLEFT  else if PtInRect(Rect(Width - cOffset, Height - cOffset, Width, Height), vPoint) then    Msg.Result := HTBOTTOMRIGHT  else if PtInRect(Rect(Width - cOffset, 0, Width, cOffset), vPoint) then    Msg.Result := HTTOPRIGHT  else if PtInRect(Rect(0, Height - cOffset, cOffset, Height), vPoint) then    Msg.Result := HTBOTTOMLEFT  else if PtInRect(Rect(cOffset, 0, Width - cOffset, cOffset), vPoint) then    Msg.Result := HTTOP  else if PtInRect(Rect(0, cOffset, cOffset, Height - cOffset), vPoint) then    Msg.Result := HTLEFT  else if PtInRect(Rect(Width - cOffset, cOffset, Width, Height - cOffset), vPoint) then    Msg.Result := HTRIGHT  else if PtInRect(Rect(cOffset, Height - cOffset, Width - cOffset, Height), vPoint) then    Msg.Result := HTBOTTOM;end;
    procedure TForm1.FormCreate(Sender: TObject);
    beginend;end.