UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUP UPUPUPUP UPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUPUP UPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUP UPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUP UPUPUP UPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UP UP UPUPUPUPUPUP
UPUPUPUPUP UPUP UPUP UPUPUPUPUPUPUP
UPUPUPUPUP UPUP UP UPUPUPUPUPUPUPUPUP
UPUPUPUPUP UPUP UP UPUPUPUPUPUPUPUPUP
UPUPUPUPUP UP UPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUP UP UP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUP UPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUP UPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUP UP UPUPUPUP UPUPUPUPUPUPUPUPUP
UPUPUPUPUP UPUP UPUPUP UPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UP UPUPUP UPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUPUPUPUP UPUPUPUP
UPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUP UPUP
UPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUPUP UPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUPUP UPUP UPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUP UPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUP UPUPUPUPUPUPUPUPUP
UPUPUPUPUPUP UP UPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUP UP UPUP UPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUP UP UPUPUP UPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UP UPUPUPUPUPUP
UPUPUPUPUP UPUPUPUP UPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUP UP UPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUP UPUPUPUP UPUP UPUPUPUPUPUPUPUP
UPUPUPUPUP UP UP UPUPUPUPUPUPUP
UPUPUPUP UP UPUPUPUPUPUPUPUP
UPUPUPUPUPUPUP UP UPUPUPUPUPUPUPUP
UPUPUPUP UP UPUPUPUPUPUPUPUPUP
UPUPUPUP UP UP UP UPUPUPUPUP UPUP
UPUPUPUP UP UPUP UPUPUPUPUP UPUP
UPUPUPUP UP UP UP UP UPUPUPUP UP
UPUPUP UP UPUP UPUPUP UP
UPUPUPUPUP UP UPUP UPUPUP UPUP UP
UPUPUPUP UPUPUPUPUPUPUPUP UPUPUPUPUPUP UP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP UP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
UPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUPUP
//==============================================================================
//任意摆布一个控件(拖动、放大、缩小)******************************************
//==============================================================================
procedure ManipulateControl(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;
example:
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
procedure TForm_Main.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
Caption := IntToStr(X) + '/' + IntToStr(Y);
ManipulateControl((Sender as TControl), Shift, X, Y, 10);
end;