如何让编辑器在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