不好意思!今天才看到!
对于多选和单选有另外一种方法其实原理和现在差不多。
procedure TFrmmain.listview1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if lvShortCut.Selected = nil then
exit;
if Button = mbleft then
begin
dx := x;
dy := Y;
end;
end;
procedure TFrmmain.listview1DragDrop(Sender, Source: TObject; X,
Y: Integer);
var
dxx,dyy : integer
i : integer
begin
//算出当前鼠标离拖动前的距离。
dxx := x-dx; dyy := y-dy;
//来一个For循环找出所有选中的节点
for i:=0 to ListView1.Items.Count-1 do
if ListView1.Items.Selected = True
begin
ListView1.Items.Left :=ListView1.Items.Left + dx;
ListView1.Items.Top := ListView1.Items.Top + dy;
end;
end;
这样就可以实现整体拖动了!
另
Delphi中的BeginDrag事件还重新发了一个Mouse消息
源码!
Perform(WM_LBUTTONUP, 0, Longint(PointToSmallPoint(P)));
所以定位的好像有点不准。MouseDown的事件被触发两次!
我也就知道这么多了!