程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++ Builder 初學問與答(六)

C++ Builder 初學問與答(六)

編輯:C++入門知識
  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。   更多內容請看C/C++技術專題專題,或   假如要在節點的左邊多顯示一個圖像,可以在編輯框State Index中輸入圖像的索引號。這個索引號代表Tree View組件中的StateImages屬性所表示的圖像列表的索引。要禁止顯示圖像可以把這個項目設置為缺省值-1。 <!-- frame contents --> <!-- /frame contents -->   注重: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組件中給節點添加圖標,就必須使用圖標列表組件給這兩個屬性賦值。假如在窗體中放置了圖標列表組件,那麼單擊屬性Images中的下拉按鈕,就可以選取這個組件了。   ShowButtons屬性值為True時表示凡是有子節點的節點將自動具有擴展按鈕(即+號按鈕)和折疊按鈕(即減號按鈕),單擊它們就可以擴展和折疊節點。屬性值為False時,不顯示這兩個按鈕,缺省值為True。   ShowLines屬性用來確定是否顯示在節點和子節點之間的連線。缺省值為True。   ShowRoot屬性用來確定與頂層節點連線是否顯示。缺省值為True。   HideSelection屬性用來確定當輸入焦點從TreeView移動到其它控件上時,被選中的節點是否處於被選中狀態。當屬性值為True時,不再處於選中狀態。缺省值為True。   Indent屬性用來設置子節點與父節點之間縮進顯示的距離。   ReadOnly用來確定用戶是否可以直接修改節點的標題。當屬性值為False時,表示可以修改。修改方法是,選中要修改的節點並單擊進入編輯狀態。缺省值為False。   SortType用來設置節點進行排序的方式。它有以下幾種取值:   stNone:不排序(缺省值);   stData:當節點所關聯的對象發生改變時重新排序;   stText:當節點的標簽發生變化時重新排序;   stBoth:當節點所關聯的對象或者節點的標簽發生改變時重新排序。   以上排序原則為在同一層的節點以標簽的字母順序排序。   更多內容請看C/C++技術專題專題,或   此外,還有一些運行時態屬性。   TopItem:這個屬性用來設置一個節點,這個節點將顯示在樹狀視圖的最上面。   RowSelcet:缺省為false。若設置為true,則表示當前選擇的節點所在的整行都將加亮顯示。當ShowLines設置為true時,這個屬性無效。 <!-- frame contents --> <!-- /frame contents -->   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或雙擊一下該組件,就會出現下面這個編輯器。   單擊Add按鈕,在彈出的Add Images對話框中選擇要引入的圖像文件,圖標就會出現在Images框內。從圖中可以看出,引入的圖標被自動賦予索引號。   為了使用上的方便,每一個圖標都有一個編號,這個編號就是這個圖標的索引號。假如要引用某個圖標,只需要使用它的索引號就可以了。   要注重的是:這個編輯器會自動把引入的圖像分解成16×16的圖標,之所以尺寸為16×16是因為ImageList的屬性Width和Height被設置成了16。假如圖標的尺寸不一樣,那麼可以修改這兩個屬性,使其滿足圖標的要求。   更多內容請看C/C++技術專題專題,或   然後、繼續用項目編輯器給節點增加圖標:我們已經在圖標列表組件中加入了兩個圖標,其索引號分別為0和1,接著可以使用項目編輯器給節點增加圖標。   再次打開項目編輯器,輸入所有節點。 <!-- frame contents --> <!-- /frame contents -->   修改節點的ImageIndex, SelectedIndex屬性,      要注重的是,編輯框Image Index中的索引號是0,編輯框Selected Index中的索引號是1。也就是說,在選中或未選中狀態下,該節點顯示的圖標不同。   修改所有節點的圖標索引號,使包含子節點的節點有兩種不同的圖標,而不含子節點的節點只有一種圖標,也就是編輯框Image Index和Selected Index的索引號相同。   最後,修改TreeView1組件的Images屬性,從下拉列表中選擇ImageList1組件。   從屏幕上可以看到,圖標已經出現在控件裡面了。   51)問:那怎樣給節點增加第二個圖標呢?   答:要給節點增加第二個圖標,首先必須再創建一個圖標列表組件,然後把這個圖標列表賦值給TreeView組件的屬性StateImages。當然還要給這個圖標列表引入圖標。   完成這些工作後,我們就可以進入項目編輯器,選中要增加第二個圖標的節點,修改編輯框State Index中的索引號即可。   52)問:TreeView有哪些重要的函數呢?   答:AlphaSort:其聲明為:bool _fastcall AlphaSort(void);這個函數用來對所有的節點按標簽的字母順序排序。若排序成功,則返回true。   FullCollapse:其聲明為void _fastcall FullCollapse(void);這個函數的作用是折疊所有的節點,直到最頂層為止。   FullExpand:其聲明為 void _fastcall FullExpand(void);這個函數的作用是展開所有的節點,直到最底層為止。若ShowButtons屬性為true,則所有的“+”都會變成“-”。   GetHitTestInfoAt:其聲明為THitTests _fastcall GetHitTestInfoAt(int X,int Y);這個函數返回指定點與樹狀視圖之間的位置關系。這個點的位置由參數X、Y確定。THitTests是個集合,它可能包含下面的元素:   HtAbove:在樹狀視圖的客戶區上方;   HtBelow:在樹狀視圖的客戶區下方;   HtNowhere:在樹狀視圖的客戶區內但在最後一個節點下面;   HtOnItem:在某個節點的標簽或者圖標上;   HtOnButton:在某個節點的左邊的圖標上;   HtOnIcon:在某個節點的圖標上;   HtOnIndent:在某個節點的縮進線上;   HtOnLabel:在某個節點的標簽上;   htOnRight:在某個節點的右邊;   htOnStateIcon:在某個節點的狀態圖標上;   htToLeft:在客戶區的右邊;   htToRight:在客戶區的的左邊。   GetNodeAt:其聲明為TTreeNode*_fastcall GetNodeAt(int X,int Y);這個函數用來返回指定點所在的節點。參數X、Y為這個點的坐標。假如這個點沒有節點,則返回NULL。
  
   更多內容請看C/C++技術專題專題,或
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved