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

问题描述 投票:3回答:1

我有一个带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;

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

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

delphi virtualtreeview tvirtualstringtree
1个回答
3
投票

在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一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.