抄的,能拖动或改变大小,但只对TWinControl类有效:<br>---------------------------------------<br>unit Unit1;<br><br>interface<br><br>uses<br> Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,<br> ExtCtrls;<br><br>type<br> TForm1 = class(TForm)<br> Panel1: TPanel;<br> procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,<br> Y: Integer);<br> private<br> { Private declarations }<br> public<br> { Public declarations }<br> end;<br><br>var<br> Form1: TForm1;<br><br>implementation<br><br>{$R *.DFM}<br><br>procedure ManipulateControl(Control: TControl; Shift: TShiftState; X, Y, Precision: integer);<br>var<br> SC_MANIPULATE: Word;<br>begin<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的最左侧**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> if (X<=Precision) and (Y>Precision) and (Y<Control.Height-Precision)<br> then begin<br> SC_MANIPULATE := $F001;<br> Control.Cursor := crSizeWE;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的最右侧**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X>=Control.Width-Precision) and (Y>Precision) and (Y<Control.Height-Precision)<br> then begin<br> SC_MANIPULATE := $F002;<br> Control.Cursor := crSizeWE;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的最上侧**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X>Precision) and (X<Control.Width-Precision) and (Y<=Precision)<br> then begin<br> SC_MANIPULATE := $F003;<br> Control.Cursor := crSizeNS;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的左上角**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X<=Precision) and (Y<=Precision)<br> then begin<br> SC_MANIPULATE := $F004;<br> Control.Cursor := crSizeNWSE;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的右上角**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X>=Control.Width-Precision) and (Y<=Precision)<br> then begin<br> SC_MANIPULATE := $F005;<br> Control.Cursor := crSizeNESW ;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的最下侧**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X>Precision) and (X<Control.Width-Precision) and (Y>=Control.Height-Precision)<br> then begin<br> SC_MANIPULATE := $F006;<br> Control.Cursor := crSizeNS;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的左下角**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X<=Precision) and (Y>=Control.Height-Precision)<br> then begin<br> SC_MANIPULATE := $F007;<br> Control.Cursor := crSizeNESW;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的右下角**********************************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X>=Control.Width-Precision) and (Y>=Control.Height-Precision)<br> then begin<br> SC_MANIPULATE := $F008;<br> Control.Cursor := crSizeNWSE;<br> end<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> //光标在控件的客户区(移动整个控件)******************************************<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> else if (X>5) and (Y>5) and (X<Control.Width-5) and (Y<Control.Height-5)<br> then begin<br> SC_MANIPULATE := $F009;<br> Control.Cursor := crSizeAll;<br> end<br> else begin<br> SC_MANIPULATE := $F000;<br> Control.Cursor := crDefault;<br> end;<br> //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br> if Shift=[ssLeft] then<br> begin<br> ReleaseCapture;<br> Control.Perform(WM_SYSCOMMAND, SC_MANIPULATE, 0);<br> end;<br>end;<br><br><br><br>procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,<br> Y: Integer);<br>begin<br> //Caption := IntToStr(X) + '/' + IntToStr(Y);<br> ManipulateControl((Panel1 as TControl), Shift, X, Y, 10);<br>end;<br><br>end.<br>