4

使用 VirtualTreeView 的拖拽操作时默认为[doCopy,doMove]. 移动操作由带小框的箭头指针指示,复制操作由相同的指针图标指示,但旁边添加了 [+]。

默认情况下,VT 使用复制操作,如果您按下修饰键 ( SHIFTkey),它会修改操作以移动,因此从指针中删除 [+]。

这是我需要的:

  • 反转操作(默认是移动,按下修改键 - 复制),因此也反转指针箭头
  • 替换修饰键 -CTRL而不是SHIFT
  • 读取发生了两个操作中的哪一个并开始复制或移动操作

任何指向正确方向的指针表示赞赏。

4

1 回答 1

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;
于 2012-10-20T22:52:58.483 回答