gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:53:49 26 4
gpt4 key购买 nike

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

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

如何解决这个问题?谢谢。

最佳答案

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.

关于delphi - TVirtualStringTree - 单击所选行的任何区域时如何启用拖动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45611481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com