我自己做了一个无边框窗体,现在我想缩放这个窗体,就像正常的窗体一样,当很鼠标移动到边缘的的时候出现的那个行状

解决方案 »

  1.   

    我做了一个例子,不过只是实现了在点击上沿,鼠标向上拉动的时候窗体会增大,其他的没有做,希望对你有一些帮助,我使用的Form1.BorderStyle := bsNone
    不知道是不是和要求,  看完后多多指教
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;type
      TForm1 = class(TForm)
        procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    var
      bReSize: boolean;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
      OriginTop, OriginLeft, OriginWidth, OriginHeight: integer;
    begin
      X := Mouse.CursorPos.x;
      Y := Mouse.CursorPos.Y;
      if bReSize then
      begin
        OriginTop := Form1.Top;
        OriginHeight := Form1.Height;
        Form1.Height := OriginHeight + OriginTop - Y;
        Form1.Top := Y;
        bReSize := False;
      end;
    end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      if Button=mbLeft then
      begin
        if Screen.Cursor <> crDefault then
        begin
          bReSize := True;
        end;
      end;
    end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
        x := Mouse.CursorPos.x;
        y := Mouse.CursorPos.Y;
        if (Y=Form1.Top) or (Abs(Y-Form1.Top-Form1.Height)<3) then
        begin
          Screen.Cursor := crSizeNS;
          Exit;
        end;    if (X=Form1.Left) or (Abs(X-Form1.Left-Form1.Width)<3) then
        begin
          Screen.Cursor := crSizeWE;
          Exit;
        end;    if ((Y=Form1.Top) and (X=Form1.Left)) or
           ((Y=Form1.Top+Form1.Height) and (X=Form1.Left+Form1.Width)) then
        begin
          Screen.Cursor := crSizeNWSE;
          Exit;
        end;    if ((Y=Form1.Top) and (X=Form1.Left+Form1.Width)) or
           ((Y=Form1.Top+Form1.Height) and (X=Form1.Left)) then
        begin
          Screen.Cursor := crSizeNESW;
          Exit;
        end;    Screen.Cursor := crDefault;
    end;end.