procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if dragging then with Sender as TControl do begin Left := X - downX + Left; Top := Y - downY + Top; end; end;
procedure TfrmMain.ControlMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if dragging then begin dragging := False; TMoveCracker(Sender).MouseCapture := False; ///////////////////// end;
可以捕获application的鼠标消息,判断当前活动组件是不是treeview
type
TMoveCracker = class(TControl);
procedure TfrmMain.ControlMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
downX := X;
downY := Y;
dragging := TRue;
TMoveCracker(Sender).MouseCapture := True; ////////////////
end;
procedure TfrmMain.ControlMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if dragging then
with Sender as TControl do
begin
Left := X - downX + Left;
Top := Y - downY + Top;
end;
end;
procedure TfrmMain.ControlMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if dragging then
begin
dragging := False;
TMoveCracker(Sender).MouseCapture := False; /////////////////////
end;