delphi - 更改 VirtualTreeView 中的拖动光标

标签 delphi c++builder virtualtreeview

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

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

这是我需要的:

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

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

最佳答案

除了更改修饰符之外,您还应该在 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;

关于delphi - 更改 VirtualTreeView 中的拖动光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12993003/

相关文章:

c++ - 在 64 位系统上更大的指针有什么好处?

c++ - C 样式转换是否添加程序集(代码)或仅供编译器了解情况?

Delphi,VirtualStringTree - 类(对象)而不是记录

delphi - 选择更改后如何检索 VirtualStringTree 中选定的节点?

delphi - 如何解决DSServerModule1.ClientHeight : Property does not exist error

delphi - 点击透明表格

c++ - 需要 std::vector 优化

delphi - VirtualTreeView 的 Firemonkey 版本

Delphi - 让用户控制容器而不从现有容器继承

delphi - 全系统共享数据