默认使用VirtualTreeView时,拖动操作为[doCopy,doMove]
。移动操作由带有小方框的箭头指针指示,复制操作由相同的指针图标指示,但旁边添加了[+]。
默认情况下,VT使用复制操作,如果按下修改键( SHIFT 键),它会修改操作以移动,从而从指针中删除[+]。
这就是我需要的:
任何指向正确方向的指标都值得赞赏。
答案 0 :(得分:5)
除了更改修饰符之外,您应该在OnDragOver
事件处理程序中更改您将要执行的操作。因此,要添加 CTRL 键作为复制操作修饰符,您可以编写如下内容。此事件中设置的Effect
参数值也会更改拖动光标,具体取决于所选操作。除了传递给OnDragDrop
事件的值,您可以根据该事件确定如何处理已删除的源:
procedure TForm1.VirtualStringTree1DragOver(Sender: TBaseVirtualTree;
Source: TObject; Shift: TShiftState; State: TDragState; Pt: TPoint;
Mode: TDropMode; var Effect: Integer; var Accept: Boolean);
begin
Accept := True;
if Shift = [ssCtrl] then
Effect := DROPEFFECT_COPY;
end;
在OnDragDrop
事件处理程序中,您可以确定使用的效果:
procedure TForm1.VirtualStringTree1DragDrop(Sender: TBaseVirtualTree;
Source: TObject; DataObject: IDataObject; Formats: TFormatArray;
Shift: TShiftState; Pt: TPoint; var Effect: Integer; Mode: TDropMode);
begin
case Effect of
DROPEFFECT_COPY: ShowMessage('DROPEFFECT_COPY');
DROPEFFECT_MOVE: ShowMessage('DROPEFFECT_MOVE');
end;
end;