TVirtualStringTree - 单击选定行的任何区域时如何启用拖动?

TVirtualStringTree - How to enable drag when clicked on any area of selected row?

我有一个 toFullRowSelect 的 VST(有几列)。我想在节点上启用拖放功能。

问题是只有在节点 caption 上直接单击才能开始拖动 node/s。如果单击是在行选择上而不是在节点标题上进行的,则拖动操作将不会开始并且 OnDragAllowed 不会触发。

MCVE 很简单。在表单上拖放一个 TVirtualStringTree(将其命名为 VST)并为 VST 添加 OnCreateOnDragAllowed

procedure TForm1.FormCreate(Sender: TObject);
begin
  VST.TreeOptions.SelectionOptions := VST.TreeOptions.SelectionOptions + [toFullRowSelect];
  VST.RootNodeCount := 5;
end;

procedure TForm1.VSTDragAllowed(Sender: TBaseVirtualTree;
  Node: PVirtualNode; Column: TColumnIndex; var Allowed: Boolean);
begin
  Allowed := True;
end;

现在,如果您单击节点标题,拖动操作就会开始,但如果您尝试拖动所选节点的其他区域则不会。

如何解决?谢谢。

toFullRowDrag 选项包含到 MiscOptions 选项集中:

procedure TForm1.FormCreate(Sender: TObject);
begin
  VST.TreeOptions.SelectionOptions := VST.TreeOptions.SelectionOptions + [toFullRowSelect];
  VST.TreeOptions.MiscOptions := VST.TreeOptions.MiscOptions + [toFullRowDrag];
  VST.RootNodeCount := 5;
end;

toFullRowDrag 选项在源代码中描述为:

Start node dragging by clicking anywhere in it instead only on the caption or image. Must be used together with toDisableDrawSelection.