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



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

问题是,只有当您在节点标题上单击时,您才能开始拖动节点。 如果单击了行选择而不是节点标题,则拖动操作将不会启动,并且不会触发OnDragAllowed

MCVE 很简单。 在表单上放置一个TVirtualStringTree(命名为VST(,然后添加OnCreateOnDragAllowed用于 VST:

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

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

最新更新