我有一个toFullRowSelect
的VST(有几列)。我想启用拖放功能放在节点上。
问题是,只有在节点标题上单击“直接”时,才能开始绘制节点。如果单击是在行选择上而不是在节点标题上,则拖动操作将不会启动,OnDragAllowed
不会触发。
MCVE很简单。在表单上删除TVirtualStringTree
(将其命名为VST
)并为VST添加OnCreate
和OnDragAllowed
:
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;
现在,如果单击节点标题,则会开始拖动操作,但如果您尝试拖动所选节点的其他区域则不会。
如何解决这个问题?感谢。
答案 0 :(得分:3)
在 MiscOptions 选项集中包含 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一起使用。