2012-03-20 144 views
4

如何使用VirtualTreeView組件檢查節點是否可見(屏幕上)?事情是這樣的:VirtualTreeView:檢查節點是否可見

if not Grid.NodeVisible (Node) then 
    Grid.ScrollIntoView (Node, True); 

節點應該是居中的,如果它是不可見的,但仍然它在哪裏,如果它是可見的。

請注意,我不是在談論節點的可見標誌,而是關於屏幕上的可見性。 對我而言,IsVisible屬性總是返回True

+1

現在我不認爲有這樣的屬性或功能。也許'GetDisplayRect'並檢查樹視圖剪切矩形的交點。 – TLama 2012-03-20 08:39:40

回答

3

我認爲是最接近的就是GetDisplayRect()方法:

確定客戶座標給定節點覆蓋,這取決於滾動,拓邦等 如果無法找到指定的節點(因爲一個的父母已經崩潰或者看不見),那麼返回一個空的 矩形。

不知道它返回的情況下,節點是「看得見,在視野」 - 你可能需要寫一個檢查是VT的客戶矩形內返回的矩形輔助函數...

+0

+1,沒錯。仍然問題是爲什麼要檢查這個,如果'ScrollIntoView'爲你做這個。 – TLama 2012-03-20 08:54:38

+1

@TLama因爲'ScrollIntoView'沒有我想要的行爲:我想要節點居中,如果它不可見,但保持它的位置,如果它是可見的。這不能通過單獨的ScrollIntoView來實現。 – jpfollenius 2012-03-20 09:09:32

+0

的確,它的返回值甚至表明是否有任何滾動操作完成......但是,OP寫了「Something like」,所以也許在除了ScrollIntoView調用之前檢查其他情況下實際上需要它。 – ain 2012-03-20 09:11:40

0

的ISVISIBLE屬性僅在節點已隱藏或未找到時返回。查找節點是否在屏幕上的唯一方法是使用建議的GetDisplayRect,然後根據樹視圖的客戶端矩形對其進行測試。

但是,如果我理解你正在嘗試正確地做什麼,VirtualTreeView的SelectionOption中的toCenterScrollIntoView選項將爲您提供所需的行爲,而無需測試節點是否在可見區域中。

即(C++):

TreeView->TreeOptions->SelectionOptions = 
TreeView->TreeOptions->SelectionOptions << toCenterScrollIntoView ; 
... 
ScrollIntoView(Node);