應要求在程式執行時還要可以拉拖、改變元件大家~
分享一個不錯的函數
[pascal]
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;
[/pascal]
如用方法很簡單,在元件的MouseMove裡加上
[pascal]
DragResizeControl((Sender as TWinControl),Shift,X,Y,10);
[/pascal]