//拖动 procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); const SC_DragMove=$f012; begin ReleaseCapture; button1.perform(WM_SysCommand, SC_DragMove, 0); // this is the key ! end;
下面是一个网友贴的: procedure TForm1.ManipulateControl(WinControl: TWinControl; 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 (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 (X < WinControl.Width - Precision) and (Y >= WinControl.Height - Precision) then begin SC_MANIPULATE := $F006; WinControl.Cursor := crSizeNS; 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;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Caption := IntToStr(X) + '/' + IntToStr(Y); ManipulateControl((Sender as TWinControl), Shift, X, Y, 10); end;
procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
const SC_DragMove=$f012;
begin
ReleaseCapture;
button1.perform(WM_SysCommand, SC_DragMove, 0); // this is the key !
end;
procedure TForm1.ManipulateControl(WinControl: TWinControl;
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 (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 (X < WinControl.Width - Precision) and (Y >= WinControl.Height - Precision) then
begin
SC_MANIPULATE := $F006;
WinControl.Cursor := crSizeNS;
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;procedure TForm1.Button1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Caption := IntToStr(X) + '/' + IntToStr(Y);
ManipulateControl((Sender as TWinControl), Shift, X, Y, 10);
end;
所以没有什么用。
等等,也许可实现一个类,让我想想怎么做
过几天我再开题请您来拿分。