TVirtualStringTree - 单击选定行的任何区域时如何启用拖动?
TVirtualStringTree - How to enable drag when clicked on any area of selected row?
我有一个 toFullRowSelect
的 VST(有几列)。我想在节点上启用拖放功能。
问题是只有在节点 caption 上直接单击才能开始拖动 node/s。如果单击是在行选择上而不是在节点标题上进行的,则拖动操作将不会开始并且 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;
现在,如果您单击节点标题,拖动操作就会开始,但如果您尝试拖动所选节点的其他区域则不会。
如何解决?谢谢。
将 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.
我有一个 toFullRowSelect
的 VST(有几列)。我想在节点上启用拖放功能。
问题是只有在节点 caption 上直接单击才能开始拖动 node/s。如果单击是在行选择上而不是在节点标题上进行的,则拖动操作将不会开始并且 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;
现在,如果您单击节点标题,拖动操作就会开始,但如果您尝试拖动所选节点的其他区域则不会。
如何解决?谢谢。
将 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.