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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TVirtualStringTree - 如何在单击所选行的任何区域时启用拖动?相关的知识,希望对你有一定的参考价值。

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

问题是只有在节点标题上单击“直接”时才能开始拖动节点。如果单击是在行选择上而不是在节点标题上,则拖动操作将不会启动,并且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;

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

怎么解决这个问题?谢谢。

答案

在FiscOptions选项集中包含toFullRowDrag选项:

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选项在源代码中描述为:

通过单击其中的任意位置而不是仅在标题或图像上单击开始节点拖动。必须与toDisableDrawSelection一起使用。

以上是关于TVirtualStringTree - 如何在单击所选行的任何区域时启用拖动?的主要内容,如果未能解决你的问题,请参考以下文章

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

如何在TVirtualStringTree中自动调整跨越列的大小?

如何快速在单例中使用此代码?

如何在单引号字符串中使用变量?

如何在单引号字符串中使用变量?

如何在单例中传递参数