2014-12-04 77 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