2014-12-04 81 views
4

禁用节点我有我的VirtualStringTree 5个节点:跳绳/在VirtualTreeView

tree

节点#4没有标题,当用户按下VK_DOWN或VK_UP应该被跳过。

当用户点击它时也不应该被选中。

我写了这个代码(即作品)跳过所述节点使用键盘时:

if Key = VK_DOWN then 
begin 
    node := VirtualTree.GetNext(VirtualTree.FocusedNode); 
    if not Assigned(node) then Exit; 

    data := VirtualTree.GetNodeData(node); 
    if data^.Caption = '' then 
    begin 
    VirtualTree.GetNext(node); 
    VirtualTree.FocusedNode := node; 
    VirtualTree.Selected[node] := true; 
    end; 
end 
else if Key = VK_UP then 
begin 
    node := VirtualTree.GetPrevious(VirtualTree.FocusedNode); 
    if not Assigned(node) then Exit; 

    data := VirtualTree.GetNodeData(node); 
    if data^.Caption = '' then 
    begin 
    VirtualTree.GetPrevious(node); 
    VirtualTree.FocusedNode := node; 
    VirtualTree.Selected[node] := true; 
    end; 
end; 

的问题是,该节点仍然得到通过点击它的重点。

我试过禁用节点VirtualTree.IsDisabled[node] := true; - 但没有运气。

任何人都知道一种方法来实现这一点?

回答

4

处理OnFocusChanging事件并将False返回到您选择的节点的Allowed参数。

+0

我不知何故错过了这个事件。谢谢:-) – ChrisB 2014-12-04 21:58:00

+4

不客气!无论如何,最好处理键盘处理的'OnKeyAction'事件。此外,通过'GetPreviousVisible'和'GetNextVisible'方法搜索最近的非空节点。不要忘记,还有更多的钥匙可以处理,至少例如(请注意,OnFocusChanging会阻止节点通过键盘进行聚焦,因此您需要为所有导航键找到最近的可聚焦节点,否则将获得键值没有做任何事情)。 – TLama 2014-12-04 22:17:05