2011-08-23 110 views
4

如果我沒有弄錯,不可能在 TVirtualStringTree樹視圖中看到不可見節點,因爲沒有啓用,可見或其他 屬性來執行此操作。我對嗎?如何隱藏TVirtualStringTree節點?

如果是,我是如何設法擁有一個不可見的節點的?

我的樹結構:

One Node 
Another node 
    Subnode 1 
    Subnode 2 
    ... 
    Subnode 15 
    Subnode 16 [which is not visible!] 
Yet another node 
    Subnode 1 from yet another node 
    Subnode 2 from yet another node 

我能找到的子節點16,當我做在 整個樹FirstNode/GetNextNode循環,讓我打印出來的文本的第一列。我可以 也檢查點,看到他有一個同級,但例如沒有 下一個兄弟和節點高度爲18

所以我怎麼做呢?

問候

馬庫斯

+3

歡迎堆棧溢出。在目前的狀態下,這個問題需要我們猜測,我們都不會從中受益。請提供填充樹的代碼示例以及生成上述文本的驗證代碼。 – NGLN

+5

這是一種遊戲節目,我們必須猜測你的代碼,最好的猜測贏得快艇嗎? –

回答

21

,如果我沒有記錯的話這是不可能有隱形節點的樹狀TVirtualStringTree,因爲沒有啓用,可見光或其他屬性這樣做。我對嗎?

你錯了,有可能同時擁有不可見和禁用的節點。要切換節點的可視狀態使用

vtree.IsVisible[Node] := boolean; 

啓用/禁用節點使用

vtree.IsDisabled[Node] := boolean; 

您也可以初始化樹的OnInitNode事件節點爲禁用狀態,增加ivsDisabledInitialStates參數。

+0

使用'.IsVisible []'調整樹視圖畫布的整體高度,使垂直滾動條反映隱藏節點。如果您僅使用'Exclude(Node.States,vsVisible)'或'Node.States:= Node.States - vsVisible'從節點中刪除可見狀態,則它不會調整樹視圖的畫布高度,垂直滾動條將會不會改變,並且用戶可能會在最後顯示的節點下面有很多空白區域。 –

1

除了AINS答案,遞歸你可以使用下面的功能樹:

遞歸所有節點

Tree.GetFirst(); 
Tree.GetNext(); 
Tree.GetPrevious(); 

遞歸唯一可見的節點:

Tree.GetFirstVisible(); 
Tree.GetNextVisible(); 
Tree.GetPreviousVisible();