如何让编辑器在Virtualtreeview中保持活跃?

我正在尝试基于VirtualTreeView构建一个简单的2列网格“属性编辑器”。

(我想模仿在Delphi的IDE对象检查器上看到的外观和用户体验)


该组件几乎可以工作,并且可以处理多个编辑器, 但是我正面临一个烦人的错误:

当我点击一个新节点(一个新行)时,节点被选中并且编辑器出现,无论我点击了哪一列。 这是预期的和确定的。

然后,当我点击同一行的第一列时,我希望看到我的编辑内容得到验证,并且编辑器保持焦点(就像在delphi的对象检查器中一样)。

但编辑器的内容被验证,然后消失,并选择整个节点(行)。 编辑器不会回来(即使我点击第二列),直到我选择另一个节点并单击以前选择的节点。

编辑:增加了关于我的代码的插图和精度。

问题的例证

关于代码:我没有在这里插入代码,因为我使用了与高级演示(属性页)上找到的代码完全相同的代码(作为出发点)


我试过并发现的:

在这里找到的2003年编译的高级演示(属性树页面)看起来像我期望从我的组件(以及从虚拟树视图)中工作。

但是,当我编译这个相同的演示(我尝试从谷歌代码上的当前主干版本,在delphi 2007和2009版本4.5.2,4.8.7甚至5.0.0),错误再次出现!

我首先认为在2003年和更新的版本之间有记录的突变,但我找不到任何东西。 我也玩过所有可用的解决方案,但没有成功。

我仍然不知道这个问题是来自于新的delphi RTL还是虚拟树视图中的重大更改(bug?)。

所以我的问题:

  • 编译高级演示文件时是否有同样的问题?
  • 代码中的任何提示或解决方法来解决我的问题?

  • 作为一个便笺,我几乎放弃了virtualtreeview今天下午,我想尝试与另一个组件的解决方案...我发现了这个有趣的问题,并决定尝试berg的组件,但在阅读一个建议他们的主页(请参阅我对相关问题的评论)


    VSTs onChange只是通过更改节点的选择来调用。 如果节点已被选中,状态将不再改变。 所以,你必须自己实现一个类似于Object Inspector的行为,例如调用VSTs EditNode() - OnClick-Callback中的方法:

    procedure TMainForm.VSTClick(Sender: TObject);
    var node: PVirtualNode;
    begin
      node:= VST.GetFirstSelected();
      if(node <> nil) then
        VST.EditNode(node, EDITABLE_COLUMN_INDEX);
    end;
    
    链接地址: http://www.djcxy.com/p/10817.html

    上一篇: How to keep editor alive in Virtualtreeview?

    下一篇: Safari (Mac OS X Lion) returns wrong epochtime value to position.timestamp call