delphi 在运行的EXE拖动控件及改变控件的大小

1.在private添加

procedure ComponentControl(Control: TControl; Shift: TShiftState;

X,Y,Precision: integer);

2.添加代码

procedure TForm1.ComponentControl(Control: TControl; Shift: TShiftState;

X, Y, Precision: integer);

var

SC_MANIPULATE: Word;

begin

if (X<=Precision) and (Y>Precision) and (Y<Control.Height-Precision) then

begin

SC_MANIPULATE := $F001;

Control.Cursor := crSizeWE;

end

else if (X>=Control.Width-Precision) and (Y>Precision) and (Y<Control.Height-Precision) then

begin

SC_MANIPULATE := $F002;

Control.Cursor := crSizeWE;

end

else if (X>Precision) and (X<Control.Width-Precision) and (Y<=Precision) then

begin

SC_MANIPULATE := $F003;

Control.Cursor := crSizeNS;

end

else if (X<=Precision) and (Y<=Precision) then

begin

SC_MANIPULATE := $F004;

Control.Cursor := crSizeNWSE;

end

else if (X>=Control.Width-Precision) and (Y<=Precision) then

begin

SC_MANIPULATE := $F005;

Control.Cursor := crSizeNESW ;

end

else if (X>Precision) and (X<Control.Width-Precision) and (Y>=Control.Height-Precision) then

begin

SC_MANIPULATE := $F006;

Control.Cursor := crSizeNS;

end

else if (X<=Precision) and (Y>=Control.Height-Precision) then

begin

SC_MANIPULATE := $F007;

Control.Cursor := crSizeNESW;

end

else if (X>=Control.Width-Precision) and (Y>=Control.Height-Precision) then

begin

SC_MANIPULATE := $F008;

Control.Cursor := crSizeNWSE;

end

else if (X>5) and (Y>5) and (X<Control.Width-5) and (Y<Control.Height-5) then

begin

SC_MANIPULATE := $F009;

Control.Cursor := crSizeAll;

end

else

begin

SC_MANIPULATE := $F000;

Control.Cursor := crDefault;

end;

if Shift=[ssLeft] then

begin

ReleaseCapture; //释放鼠标的捕获功能,使之能得到所有鼠标输入!

Control.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);

end;

end;

3.在需要拖动或改变大小的控件的OnMouseMove:

ComponentControl((Sender as TControl), Shift, X, Y, 10);