Delphi執行時拖拉、改變元件大小

應要求在程式執行時還要可以拉拖、改變元件大家~
分享一個不錯的函數

procedure   DragResizeControl(WinControl:   TControl;   Shift:   TShiftState;X,   Y,   Precision:   integer);
var
  SC_MANIPULATE:   Word;
begin
  if (X<=Precision) and (Y>Precision)   and   (Y<WinControl.Height-Precision)   then begin
    SC_MANIPULATE     := $F001;
    WinControl.Cursor := crSizeWE;
  end else if   (X>=WinControl.Width-Precision)
             and   (Y>Precision)   and   (Y<WinControl.Height-Precision)   then begin
    SC_MANIPULATE     := $F002;
    WinControl.Cursor := crSizeWE;
  end else if (X>Precision)
             and (X<WinControl.Width-Precision)   and   (Y<=Precision)   then begin
    SC_MANIPULATE     := $F003;
    WinControl.Cursor := crSizeNS;
  end else if (X>Precision)
             and (X<WinControl.Width-Precision)   and   (Y>=WinControl.Height-Precision)   then begin
    SC_MANIPULATE     := $F006;
    WinControl.Cursor := crSizeNS;
  end else if (X<=Precision)   and   (Y<=Precision)   then begin
    SC_MANIPULATE     := $F004;
    WinControl.Cursor := crSizeNWSE;
  end else if (X>=WinControl.Width-Precision)   and   (Y<=Precision)   then begin
    SC_MANIPULATE     := $F005;
    WinControl.Cursor := crSizeNESW   ;
  end else if (X<=Precision)   and   (Y>=WinControl.Height-Precision)   then begin
    SC_MANIPULATE     := $F007;
    WinControl.Cursor := crSizeNESW;
  end else if (X>=WinControl.Width-Precision) and (Y>=WinControl.Height-Precision)   then begin
    SC_MANIPULATE     := $F008;
    WinControl.Cursor := crSizeNWSE;
  end else if (X>5)   and   (Y>5)   and   (X<WinControl.Width-5)
             and (Y<WinControl.Height-5)   then   begin
    SC_MANIPULATE     := $F009;
    WinControl.Cursor := crSizeAll;
  end else begin
    SC_MANIPULATE     := $F000;
    WinControl.Cursor := crDefault;
  end;

  if Shift=[ssLeft] then begin
    ReleaseCapture;
    WinControl.Perform(WM_SYSCOMMAND,   SC_MANIPULATE,   0);
  end;
end;

如用方法很簡單,在元件的MouseMove裡加上

DragResizeControl((Sender as TWinControl),Shift,X,Y,10);