C++ Builder初學問與答6

6.圖形列表組件TreeView
45) 問:有時侯,我希望實現類似資源管理器對文件夾管理的顯示方式,和對文件的管理顯示方式,在C++Builder中應該怎麼辦?
答:在C++Builder中可以直接使用圖形列表組件來實現,它包括TreeView、ListView以及Outline組件。其中Outline組件實際上是基於Windows 3.1環境的組件,而且無論從功能還
是使用的角度來看,它都無法與TreeView相比,因此完全可以用TreeView組件代替Outline。所以我將主要介紹前面兩種組件。這兩個組件都在頁Win32中。


46) 問:TreeView組件是一個怎樣的組件?
答:TreeView組件比較複雜,所以我們首先簡單地介紹一下這個組件的基本使用情況,然後再深入討論。
TreeView組件採用了樹形結構,最典型的例子就是Windows 95的資源管理器,它用樹形結構顯示磁盤上的文件夾和文件。因此TreeView組件能夠清晰地顯示層次關係。

47) 問:請給我演示一下怎樣在設計狀態編輯TreeView好嗎?
答:首先在窗體上放置一個TreeView組件,然後在對象編輯器中單擊屬性Items中的省略號按鈕,就會打開一個項目編輯器。


TreeView組件的項目編輯器是一個在設計時專門增加、刪除節點和爲節點賦予圖標的工具。從屏幕上可以看到,項目編輯器由項目組框和項目屬性組框組成。項目組框由一個項目列表框、
按鈕New Item、按鈕New SubItem、按鈕Delete和按鈕Load組成。當你剛打開項目編輯器時,項目列表框是空的,New SubItem和Delete按鈕處於失效狀態。
項目屬性組框由編輯框Text、編輯框Image Index、編輯框Selected Index和編輯框State Index組成。
項目組框可以創建和刪除節點、子節點。如果要載入一個已經存在的TreeView節點,可以單擊按鈕Load。要創建一個新項目,單擊New Item,然後在文本編輯框中輸入新節點的標題。
這時,New SubItem按鈕由失效變爲有效,允許你在節點下再嵌套子節點。如果項目列表框中顯示了節點,那麼Delete按鈕也會變的有效。你只要在項目列表框中選中這個節點然後單擊
Delete按鈕,就可以刪除這個節點了。
要注意的是:如果刪除的節點還包括子節點,那麼子節點也會被同時刪除。
項目屬性組框主要是爲當前選中的節點(或子節點)設置屬性的。其中編輯框Text可以修改節點的標題。如果要在不是當前被選中的節點的左邊顯示圖像,那麼應該在編輯框Image Index
中輸入圖像的索引號。要禁止顯示圖像可以把這個節點Image Index設置爲缺省值-1。
如果要在被選中的節點的左邊顯示圖像,應該在編輯框Selected Index中指定圖像的索引號,索引號是從0開始的。要禁止顯示圖像可以把它設置爲缺省值-1。
如果要在節點的左邊多顯示一個圖像,可以在編輯框State Index中輸入圖像的索引號。這個索引號代表Tree View組件中的StateImages屬性所表示的圖像列表的索引。要禁止顯示圖像
可以把這個項目設置爲缺省值-1。
注意:Image Index與 Selected Index 使用的是Images指定的ImageList;而State Index使用的是StateImages 指定的ImageList。

48) 問:TreeView的屬性太多了,我想問我一定要清楚哪些主要屬性?
答: Items : 該屬性包含TreeView組件中的所有節點,它是TtreeNodes的對象,在設計時,你可以使用項目編輯器來增加、刪除和修改節點。在運行期間,可以通過Items屬性訪問每
一個節點,並且也能夠增加、刪除和修改節點。而每一個節點又都是一個TtreeNode對象。
AutoEWxpand:布爾類型。爲true時,則當前被選擇的節點將自動擴展,沒有被選擇節點將自動摺疊。缺省爲false,這時擴展和摺疊要用戶自己指定。
DragMode:其聲明爲:_property TdragMode DragMode;這個屬性用來設置樹狀視圖的拖放模式。缺省爲dmManual,用戶要拖放節點需要調用BeginDrag才能拖放。若設置爲
dmAutomatic,則樹狀視圖將支持自動拖放,用戶可以把一個節點拖到另一個位置。
Images:用來設定TreeView中的不同節點的圖標。
StateImages:用不同的的圖像來表示節點的不同狀態。
在TreeView組件中,每個節點除了可以有一個文字標題外,還可以附加圖標,這樣可以使用戶界面更加直觀。這兩個屬性就包含着節點所使用的圖標。
這兩個屬性都是TImageList的對象,所以如果要在TreeView組件中給節點添加圖標,就必須使用圖標列表組件給這兩個屬性賦值。如果在窗體中放置了圖標列表組件,那麼單擊屬性Ima
ges中的下拉按鈕,就可以選取這個組件了。
ShowButtons屬性值爲True時表示凡是有子節點的節點將自動具有擴展按鈕(即+號按鈕)和摺疊按鈕(即減號按鈕),單擊它們就可以擴展和摺疊節點。屬性值爲False時,不顯示這兩
個按鈕,缺省值爲True。
ShowLines屬性用來確定是否顯示在節點和子節點之間的連線。缺省值爲True。
ShowRoot屬性用來確定與頂層節點連線是否顯示。缺省值爲True。
HideSelection屬性用來確定當輸入焦點從TreeView移動到其它控件上時,被選中的節點是否處於被選中狀態。當屬性值爲True時,不再處於選中狀態。缺省值爲True。
Indent屬性用來設置子節點與父節點之間縮進顯示的距離。
ReadOnly用來確定用戶是否可以直接修改節點的標題。當屬性值爲False時,表示可以修改。修改方法是,選中要修改的節點並單擊進入編輯狀態。缺省值爲False。
SortType用來設置節點進行排序的方式。它有以下幾種取值:
stNone:不排序(缺省值);
stData:當節點所關聯的對象發生改變時重新排序;
stText:當節點的標籤發生變化時重新排序;
stBoth:當節點所關聯的對象或者節點的標籤發生改變時重新排序。
以上排序原則爲在同一層的節點以標籤的字母順序排序。
此外,還有一些運行時態屬性。
TopItem:這個屬性用來設置一個節點,這個節點將顯示在樹狀視圖的最上面。
RowSelcet:缺省爲false。若設置爲true,則表示當前選擇的節點所在的整行都將加亮顯示。當ShowLines設置爲true時,這個屬性無效。
Selected:用來返回當前選擇的節點。

49) 問:屬性Images和StateImages有什麼區別呢?
答:每一個節點可以有兩個附帶的圖標。一般情況下只需要顯示一個圖標,這時我們經常使用Images來指定圖標,也就是說給屬性Images賦予一個ImageList對象。如果某個節點要顯示
兩個圖標,那麼還需要給屬性StateImages賦予一個ImageList對象。然後給節點的屬性StateIndex指定圖標的索引號。具體的方法是在項目編輯器中,修改編輯框State Index的值。
其實在顯示一個圖標時,也可以使用屬性StateImages。但是使用Images屬性有一個優點,就是它可以爲處於不同狀態的節點指定不同的圖標。例如在Windows 95的資源管理器中,
被選中的節點顯示一個打開的文件夾,而沒有選中的節點顯示一個關閉的文件夾。要實現這一點很簡單,因爲項目編輯器中的編輯框Image Index指定的圖標在節點未選中時顯示,而編輯
框Seleted Index指定的圖像在節點選中時顯示。

50) 問:請在前面設計的TreeView組件的基礎上,給TreeView組件中的節點增加圖標。好嗎?
答:好的,首先在窗體上放置兩個ImageList組件,這兩個組件將具有缺省的名字ImageList1和ImageList2。
其次、編輯ImageList組件:ImageList組件實際上是一個圖標列表,它可以包含大量的圖標,這些圖標的大小由屬性Width和Height確定,缺省值都是16。
ImageList剛建立時不包含任何圖標,你需要把已創建好的圖標引入到ImageList中。這個工作可以通過ImageList編輯器完成。
用鼠標右鍵單擊ImageList組件,在快捷菜單中選擇ImageList Editor或雙擊一下該組件,就會出現下面這個編輯器。

 

[1] [2] 下一頁  

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章