Delphi中的TreeView
生活随笔
收集整理的這篇文章主要介紹了
Delphi中的TreeView
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以前總是循環(huán)展開,現(xiàn)在有這個(gè)屬性,就簡單多了
RzTreeView_DWDept.FullExpand; ?這樣就可以全部 展開了。
還有一個(gè)問題,設(shè)置節(jié)點(diǎn)選中
RzTreeView_DWDept.SetFocus;
if RzTreeView_DWDept.Selected = nil then
? ? ? RzTreeView_DWDept.Selected := RzTreeView_DWDept.Items.Item[0];
這個(gè)的重點(diǎn)是 ?RzTreeView_DWDept.SetFocus; 如果當(dāng)前焦點(diǎn)沒有在樹上,你怎么設(shè)置都不起作用。
**************************************************************
.1.添加、刪除、修改節(jié)點(diǎn):
靜態(tài)的方法可以在設(shè)計(jì)時(shí)通過Items的編輯器設(shè)置各節(jié)點(diǎn)的內(nèi)容。
在添加和刪除前必須保證有節(jié)點(diǎn)被選中(Treeview.Selected = nil)
用AddFirst, AddFirstChild, AddChild等先添加根節(jié)點(diǎn),如Treeview.Items.AddFirst( nil, 'Root');
然后以此為基礎(chǔ),添加此項(xiàng)的子節(jié)點(diǎn)。
刪除節(jié)點(diǎn)
Treeview.Selected.Delete
編輯節(jié)點(diǎn)內(nèi)容
Treeview.Selected.EditText
注意:由于根節(jié)點(diǎn)沒有父節(jié)點(diǎn) (TTreeNode.Parent= nil)
此外,在大批量添加數(shù)據(jù)到Treeview中時(shí)最好使用
TreeView.Items.BeginUpdate;
添加節(jié)點(diǎn)
TreeView.Items.EndUpdate
這樣能加快顯示速度。
2.在節(jié)點(diǎn)上添加圖象
Treeview中幾個(gè)與圖象相關(guān)的屬性:
SelectedIndex:當(dāng)節(jié)點(diǎn)被選中時(shí)在TimageList 中選什么樣的圖象
OverlayIndex:選那副圖象作為掩圖(一幅圖象透明地顯示在另一幅圖象的前面),比如一個(gè)節(jié)點(diǎn)不可用時(shí)加一副X圖象在其前面。
ImageIndex:在常態(tài)時(shí)選用的圖的序號
StateIndex: 在StateImages這個(gè)ImageList中對應(yīng)的序號,-1時(shí)不顯示圖象
比較典型的,象在文件管理器中的所顯示的一樣,Treeview控件在節(jié)點(diǎn)之前也可以顯示圖象。在Form中放置一ImageList控件,加入幾個(gè)圖 片,分別被Index為0,1,…在Treeview的Image屬性項(xiàng)填入你所加入的ImageList的控件名稱。TreeNode的 ImageIndex表示節(jié)點(diǎn)未被選中時(shí)(Selected=nil)的圖片序號,SelectedIndex表示節(jié)點(diǎn)被選中時(shí)圖片序號。
3.關(guān)于Level
Level的概念可以用下圖表示:
Level0 Level1 Level2
4.排序
SortType決定什么時(shí)候進(jìn)行排序;
TreeView.AlphaSort對節(jié)點(diǎn)進(jìn)行排序,如果不能滿足要求,你可以定義自己的CustomSort方法。
5.Drag&Drop操作,與標(biāo)準(zhǔn)的拖放操作使用方法一樣
下面是我寫的一個(gè)TREEVIEW小程序的代碼 ??
? var ? ? ? rootnode,subnode,personnode,matenode:ttreenode; ??
? ? ? ? ? ? ? i,j,k:integer; ??
? ? ? begin ??
? ? ? rootnode:=tv1.items.add(nil,'公司'); ??
? ? ? qrymaster.Close; ??
? ? ? qrymaster.sql.add('select ? * ? from ? master'); ??
? ? ? qrymaster.Open; ??
? ? ? qrymaster.First; ??
? ? ? for ? i:=0 ? to ? qrymaster.RecordCount-1 ? do ??
? ? ? begin ??
? ? ? ? ? ? ? ? ? subnode:=tv1.Items.Addchild(rootnode,qrymaster.FieldByName('company').AsString); ??
? ? ? ? ? ? ? //原形:rootnode=tv1.items.add(nil,string); ??
? ? ? ? ? ? ? // ? ? ? rootnode.ImageIndex ? :=0; ??
? ? ? ? ? ? ? // ? ? ? rootnode.stateIndex ? =0; ??
? ? ? ? ? ? ? ? ? ? qrysub.Close; ??
? ? ? ? ? ? ? ? ? ? qrysub.SQL.clear; ??
? ? ? ? ? ? ? ? ? ? qrysub.SQL.Add('select ? * ? from ? submaster ? where ? companyid=:dd'); ??
? ? ? ? ? ? ? ? ? ? qrysub.ParamByName('dd').asinteger:=qrymaster.FieldByName('companyid').asinteger; ??
? ? ? ? ? ? ? ? ? ? qrysub.Open; ??
? ? ? ? ? ? ? ? ? ? qrysub.First; ??
? ? ? ? ? ? ? ? ? ? ? for ? j:=0 ? to ? qrysub.RecordCount-1 ? do ??
? ? ? ? ? ? ? ? ? ? ? begin ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? personnode:=tv1.Items.AddChild(subnode,qrysub.FieldByName('personname').AsString); ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? // ? subnode.ImageIndex ? :=-1; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? // ? subnode.StateIndex ? :=-1; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.close; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.sql.clear; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.sql.add('select ? * ? from ? comunication ? where ? personid=:personid'); ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.parambyname('personid').asinteger:=qrysub.fieldbyname('personid').asinteger; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.open; ??
? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? for ? k:=0 ? to ? qrymate.recordcount-1 ? do ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? matenode:=tv1.items.addchild(personnode,qrymate.fieldbyname('name').asstring); ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.next; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qrysub.Next; ??
? ? ? ? ? ? ? ? ? ? ? end; ??
? ??
? ? ? ? ? ? ? qrymaster.Next; ??
? ? ? ? ? end; ??
? ? ? ? end;
RzTreeView_DWDept.FullExpand; ?這樣就可以全部 展開了。
還有一個(gè)問題,設(shè)置節(jié)點(diǎn)選中
RzTreeView_DWDept.SetFocus;
if RzTreeView_DWDept.Selected = nil then
? ? ? RzTreeView_DWDept.Selected := RzTreeView_DWDept.Items.Item[0];
這個(gè)的重點(diǎn)是 ?RzTreeView_DWDept.SetFocus; 如果當(dāng)前焦點(diǎn)沒有在樹上,你怎么設(shè)置都不起作用。
**************************************************************
.1.添加、刪除、修改節(jié)點(diǎn):
靜態(tài)的方法可以在設(shè)計(jì)時(shí)通過Items的編輯器設(shè)置各節(jié)點(diǎn)的內(nèi)容。
在添加和刪除前必須保證有節(jié)點(diǎn)被選中(Treeview.Selected = nil)
用AddFirst, AddFirstChild, AddChild等先添加根節(jié)點(diǎn),如Treeview.Items.AddFirst( nil, 'Root');
然后以此為基礎(chǔ),添加此項(xiàng)的子節(jié)點(diǎn)。
刪除節(jié)點(diǎn)
Treeview.Selected.Delete
編輯節(jié)點(diǎn)內(nèi)容
Treeview.Selected.EditText
注意:由于根節(jié)點(diǎn)沒有父節(jié)點(diǎn) (TTreeNode.Parent= nil)
此外,在大批量添加數(shù)據(jù)到Treeview中時(shí)最好使用
TreeView.Items.BeginUpdate;
添加節(jié)點(diǎn)
TreeView.Items.EndUpdate
這樣能加快顯示速度。
2.在節(jié)點(diǎn)上添加圖象
Treeview中幾個(gè)與圖象相關(guān)的屬性:
SelectedIndex:當(dāng)節(jié)點(diǎn)被選中時(shí)在TimageList 中選什么樣的圖象
OverlayIndex:選那副圖象作為掩圖(一幅圖象透明地顯示在另一幅圖象的前面),比如一個(gè)節(jié)點(diǎn)不可用時(shí)加一副X圖象在其前面。
ImageIndex:在常態(tài)時(shí)選用的圖的序號
StateIndex: 在StateImages這個(gè)ImageList中對應(yīng)的序號,-1時(shí)不顯示圖象
比較典型的,象在文件管理器中的所顯示的一樣,Treeview控件在節(jié)點(diǎn)之前也可以顯示圖象。在Form中放置一ImageList控件,加入幾個(gè)圖 片,分別被Index為0,1,…在Treeview的Image屬性項(xiàng)填入你所加入的ImageList的控件名稱。TreeNode的 ImageIndex表示節(jié)點(diǎn)未被選中時(shí)(Selected=nil)的圖片序號,SelectedIndex表示節(jié)點(diǎn)被選中時(shí)圖片序號。
3.關(guān)于Level
Level的概念可以用下圖表示:
Level0 Level1 Level2
4.排序
SortType決定什么時(shí)候進(jìn)行排序;
TreeView.AlphaSort對節(jié)點(diǎn)進(jìn)行排序,如果不能滿足要求,你可以定義自己的CustomSort方法。
5.Drag&Drop操作,與標(biāo)準(zhǔn)的拖放操作使用方法一樣
下面是我寫的一個(gè)TREEVIEW小程序的代碼 ??
? var ? ? ? rootnode,subnode,personnode,matenode:ttreenode; ??
? ? ? ? ? ? ? i,j,k:integer; ??
? ? ? begin ??
? ? ? rootnode:=tv1.items.add(nil,'公司'); ??
? ? ? qrymaster.Close; ??
? ? ? qrymaster.sql.add('select ? * ? from ? master'); ??
? ? ? qrymaster.Open; ??
? ? ? qrymaster.First; ??
? ? ? for ? i:=0 ? to ? qrymaster.RecordCount-1 ? do ??
? ? ? begin ??
? ? ? ? ? ? ? ? ? subnode:=tv1.Items.Addchild(rootnode,qrymaster.FieldByName('company').AsString); ??
? ? ? ? ? ? ? //原形:rootnode=tv1.items.add(nil,string); ??
? ? ? ? ? ? ? // ? ? ? rootnode.ImageIndex ? :=0; ??
? ? ? ? ? ? ? // ? ? ? rootnode.stateIndex ? =0; ??
? ? ? ? ? ? ? ? ? ? qrysub.Close; ??
? ? ? ? ? ? ? ? ? ? qrysub.SQL.clear; ??
? ? ? ? ? ? ? ? ? ? qrysub.SQL.Add('select ? * ? from ? submaster ? where ? companyid=:dd'); ??
? ? ? ? ? ? ? ? ? ? qrysub.ParamByName('dd').asinteger:=qrymaster.FieldByName('companyid').asinteger; ??
? ? ? ? ? ? ? ? ? ? qrysub.Open; ??
? ? ? ? ? ? ? ? ? ? qrysub.First; ??
? ? ? ? ? ? ? ? ? ? ? for ? j:=0 ? to ? qrysub.RecordCount-1 ? do ??
? ? ? ? ? ? ? ? ? ? ? begin ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? personnode:=tv1.Items.AddChild(subnode,qrysub.FieldByName('personname').AsString); ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? // ? subnode.ImageIndex ? :=-1; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? // ? subnode.StateIndex ? :=-1; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.close; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.sql.clear; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.sql.add('select ? * ? from ? comunication ? where ? personid=:personid'); ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.parambyname('personid').asinteger:=qrysub.fieldbyname('personid').asinteger; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.open; ??
? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? for ? k:=0 ? to ? qrymate.recordcount-1 ? do ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? begin ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? matenode:=tv1.items.addchild(personnode,qrymate.fieldbyname('name').asstring); ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qrymate.next; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? end; ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? qrysub.Next; ??
? ? ? ? ? ? ? ? ? ? ? end; ??
? ??
? ? ? ? ? ? ? qrymaster.Next; ??
? ? ? ? ? end; ??
? ? ? ? end;
總結(jié)
以上是生活随笔為你收集整理的Delphi中的TreeView的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 『震惊』秘密报告披露转基因食品危害
- 下一篇: 周鸿祎:谷歌Chrome不是浏览器