C++ Builder初學問與答7

53)問:能介紹一下TTreeNodes與TTreeNode?
答:在BCB中,樹狀視圖的節點是通過TTreeNodes對象來管理的,通過這個對象可以對樹狀視圖進行動態的增加、刪除、插入、移動節點等操作。而每一個節點都是一個TTreeNode對象。

TTreeNode的主要屬性和函數:
Count:這個屬性用來返回某個節點所擁有的子節點的數目。它不包括其子節點。
Item:其聲明爲:_property TTreeNode* Item[int Index];這個屬性用來訪問該節點的某個子節點。其中參數Index爲其子節點在所有子節點中的位置。
Index:這個屬性用來返回該節點在其父節點的所有子節點中的位置。
Text:這個屬性用來設置或者返回節點的標籤。
Delete:這個函數用來刪除該節點本身。
DeleteChildren:這個函數用來刪除該節點的所有子節點。
EditText:這個函數用來對節點進行就地編輯。
IndexOf:其聲明爲:int _fastcall IndexOf(TTreeNode* Value);這個函數將返回該節點的某個子節點的序號。子節點由參數value指定。如果參數value指定的節點不是該節點的子節點,函數將返回-1。

TTreeNodes的主要屬性和函數:
Count:這個屬性用來返回樹狀視圖中節點的數目。
Add:其聲明爲:TTreeNode *_fastcall Add(TTreeNode,const System::AnsiString S);這個函數將在樹狀視圖中增加一個節點,新節點成爲參數Node 指定的節點的父節點的最後一個子節點,參數S爲新節點的標籤。
AddChild:其聲明爲: TTreeNode *_fastcall AddChild(TTreeNode,const System::AnsiString S);增加的新節點爲參數Node指定的節點的最後一個子節點。
AddChildFirst:其聲明爲: TTreeNode *_fastcall AddChildFirst(TTreeNode,const System::AnsiString S);這個函數與AddChild不同的是新增加的節點爲Node節點的第一個子節點。
AddFirst :其聲明爲:TTreeNode *_fastcall AddFirst(TTreeNode,const System::AnsiString S);這個函數與Add 相似,不同的是新節點成爲Node節點的父節點的第一個子節點。
Clear:這個函數將把整個樹狀視圖都清空。
Delete:其聲明:void _fastcall Delete(TTreeNode *Node);這個函數將刪除參數Node 指定的節點。
Insert:其聲明爲:TTreeNode _fastcall Insert (TTreeNode* Node,const System::AnsiString S);這個函數用來在參數Node 指定的節點之後插入一個新的節點,新節點的標籤由參數S指定。

7.圖形列表組件ListView
54)問:TreeView組件能夠實現資源管理器左邊顯示區的內容,可是它右邊顯示區能將列表用各種不同的方式顯示,例如大圖標方式、小圖標方式、簡單列表方式和詳細列表方式。這在C++Builder應該怎樣來實現?
答:這可以用ListView組件來實現,ListView組件從功能上講與列表框相似,但是從組件的屬性來看與TreeView相似。ListTiew組件所建立的列表可以用各種不同的方式顯示,例如大圖標方式、小圖標方式、簡單列表方式和詳細列表方式。
ListView組件中的一部分屬性與TreeView組件中的屬性是相同的,例如Items,StateImages等。還有一些屬性是ListView特有的。
LargeImages屬性用來設置存放大圖標的圖標列表,當列表處於大圖標顯示方式時,列表使用這個圖標列表中的圖標顯示。
SmallImages屬性用來設置存放小圖標的圖標列表,當列表處於小圖標顯示方式時,列表使用這個圖標列表中的圖標顯示。
MultiSelected屬性可確定用戶是否可以同時選擇多個項目。缺省值爲false。
屬性ViewStyle確定了顯示風格,可以取這樣一些值。
vsIcon:列表以大圖標方式顯示,可以進行拖放操作。只顯示第一層節點,放置方式由Arrangement決定。
vsSmallIcon:列表以小圖標方式顯示,可以進行拖放操作。只顯示第一層節點,放置方式由Arrangement決定。
vsList:以簡單列表的方式顯示,不能進行拖放操作。節點是豎向放置的,只顯示第一層節點,Arrangement不起作用。
vsReport:以詳細列表的方式顯示,顯示的信息可以分成多列。最左邊的列顯示圖標和文字,其餘的列顯示詳細信息。節點是豎向放置的,每一層均已經展開,只有此時Columns的設置才起作用,Arrangement不起作用。
屬性Columns 當屬性ViewStyle被設置爲vsReport時,列表中的每一項可以分成多列顯示,這個屬性用於設置列數和列的標題。
在設計時,按下Columns屬性Value列中的省略號按鈕可以打開一個ListView Columns編輯器,在這個編輯器中可以生成和編輯列及列的標題。
屬性ColumnClick的值爲True時,列表中的標題可以作爲按鈕使用, 這個屬性最常見的應用是在Windows 95的資源管理器中,單擊文件名或者其它幾個列標題,列表中的文件就會按照文件名重新排序。
屬性Items 包含列表中所有項目的集合。與TreeView組件中的Items屬性類似,這個屬性也有一個項目編輯器,你可以使用這個編輯器在設計時增加、刪除項目,設置項目的圖標索引以及標題等。它的使用方法與TreeView組件的Items編輯器基本相同。
IconOptions屬性用來設置圖標的顯示方式。它還包含幾個子屬性:
(1)Arrangement屬性:當該屬性等於iaTop時,表示圖標從左到右排列在ListView組件的頂部;等於iaLeft時,表示圖標從上到下排列在組件的左邊。
(2)AutoArrange屬性:等於True時,表示增加、刪除或移動圖標時圖標將自動重排。
(3)WrapText屬性:等於True時,表示當項目的標題超過圖標的寬度時標題將換行。
此外,還有運行時態屬性
Selected屬性用來返回列表中被選中的項目。
TopItem屬性用來返回列表中當前可見的最頂端的項目。

55)問:請您編寫一個程序來幫助我理解和記憶ListView控件好嗎?
答:好的,選擇File菜單的New Application菜單項,打開一個空的工程,在窗體上放置一個ListView控件,兩個ImageList控件,一個ListBox控件。



選中ImageList1控件,將它的Height和Width屬性設置爲32。雙擊ImageList1控件,打開圖像列表編輯框。點擊Add按鈕,選擇一個大圖標文件。點擊打開按鈕。然後點擊OK按鈕。同樣方法給ImageList2控件加上小圖標。選擇TreeView控件,將它的LargeImages屬性修改爲ImageList1。
將它的SmallImages屬性修改爲ImageList2。在ListView控件上點擊鼠標右鍵,選擇Columns Editor選項(當然我們只要點擊屬性Columns右邊的“…”就可以了)。彈出Columns編輯對話框。點擊Add New工具按鈕加入四個列表,選中它們,將它們的caption屬性修改爲名稱、大小、類型、修改時間。
關閉列表編輯對話框。
在ListView控件上點擊鼠標右鍵(同樣我們只要點擊 Itmes屬性右邊的“…”也一樣),選擇Items Editor選項。彈出Items編輯對話框(與TreeView的Items Editor差不多),輸入樹型結構文檔。在這裏,點擊“New Item”按鈕可以新建一個項,“NewSubItem”按鈕用來設置這個項的子項。“Delete”用來刪除某個項,包括它的子項。項司性編輯框中,Caption爲這個項的標題,另外兩個爲項的圖標。

編寫列表框的OnClick事件代碼如下:
void __fastcall TForm1::ListBox1Click(TObject *Sender)
{
switch(ListBox1->ItemIndex)
{
case 0: ListView1->ViewStyle=vsIcon;
break;
case 1: ListView1->ViewStyle=vsSmallIcon;
break;
case 2: ListView1->ViewStyle=vsList;
break;
case 3: ListView1->ViewStyle=vsReport;
break;
}
}
//---------------------------------------------------------------------------
把ListView中的ViewStyle屬性改爲vsReport,否則你將得不到上面的那種顯示方式。
最後,編譯並運行這個程序,選擇不同的類型,我們可以看到TreeView控件的效果。
56)問:在TreeView、ListView中的圖標管理能再說一下嗎?
答:圖形列表組件很難理解的,主要問題是不太容易掌握它使用圖標的方式。圖形列表組件使用一個名爲ImageList的組件管理所有的圖標,ImageList給每個圖標提供一個索引號,這樣在TreeView或ListView組件引用時就不必指出圖標的名字而直接指定索引號就可以了。用ImageList集中管理圖標,用戶使用圖標索引號的方式的確從某種角度減輕了編程人員的負擔,但是也使得他們在編程時必須記住一大堆編號代表的各是哪一種圖標,這就在一定程度上削弱了ImageList的優勢,也許在C++Builder以後的版本中能有更好的方法。
57)問:如何動態的創建一個列表視圖呢?
答:我們舉例說明。我先建立如圖的界面。

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