DELPHI控制項學習之TreeView

2022-04-12 12:06:23 字數 3357 閱讀 8473

一. 如何初始化乙個treeview?

弄乙個視窗,放上乙個treeview和乙個button,分別取名為tv1和btn1。如果需要

在每個節點前有個圖,請在視窗上放上乙個imagelist,取名為imagelist1,雙擊

它,加入六個圖示。還要記得記得將tv1的images屬性改為imagelist1噢。雙擊按

鈕btn1,在裡面填入以下**,然後按f9執行,點選btn1就可以看到效果了。

procedure tform1.btn1click(sender: tobject);

const

mydocdir = 'c:\my documents';

persondir = '3hsoft';

varvar

i : word;

subnodename : array [1..5] of shortstring;

rootnode, subnode : ttreenode;

p : pstring;

begin

subnodename[1] := '便箋';

subnodename[2] := '發件箱';

subnodename[3] := '聯絡人';

subnodename[4] := '任務';

subnodename[5] := '日記';

tv1.items.clear;

tv1.items.beginupdate;

new(p);

p^ := mydocdir + '\' + persondir;

rootnode := tv1.items.addobject(nil, '個人資料夾', p);

// 此 node 的圖示已對 images 屬性中取第 0 個了。

for i := 1 to 5 do

begin

new(p);

p^ := mydocdir + '\' + persondir + '\' + subnodename[i];

subnode := tv1.items.addchildobject(rootnode, subnodename[i], p);;

// 如果不想使用圖示的話請刪除以下兩行

subnode.imageindex := i;

subnode.selectedindex := i;

end;

tv1.items.endupdate;

end;

二.在treeview中如何設定選中結點

vari:integer;

begin

if i>treeview1.items.count then

treeview1.items[i].selected:=true;

或treeview1.selected:=treeview1.items[i];

三。設定treeview結點的圖形

1. 設定treeview的images屬性為已存在的images物件

treeview1.images:=imagelist1;

2. 在加入結點後執行:

varanode:ttreenode;

begein

anode:=treeview1.add(nil,'item1');

anode.imageindex:=0;

anode.selectedindex:=1;

end3. 如果結點圖形在改變後未發生變化,可以執行:

treeview1.refresh;

四。如何批量處理treeview結點

使用treeview的items屬性的beginupdate和endupdate方法,例:

treeview1.items.beginupdate;

for i:=0 to treeview1.items.count-1 do

begin

file ://將每個結點的文字改成為小寫字母

treeview1.items[i].text:=lowercase(treeview1.items[i].text);

end;

treeview1.items.endupdate;

五。實現treeview結點拖拽的例項

下面的程式片段演示了如何實現拖拽treeview構件結點的例子

procedure tform1.treeview1mousedown(sender: tobject;

button: tmousebutton; shift: tshiftstate; x, y: integer);

begin

if ( button = mbleft ) and

( htonitem in treeview1.gethittestinfoat( x, y ) ) then

begin

treeview1.begindrag( false );

end;

end;

procedure tform1.treeview1dragover( sender, source: tobject;

x, y: integer; state: tdragstate; var accept: boolean);

varnode : ttreenode;

begin

if source = treeview1 then

begin

node := treeview1.getnodeat( x, y );

if node <> nil then

accept := true;

end;

end;

procedure tform1.treeview1dragdrop( sender, source: tobject;

x, y : integer );

vartempnode : ttreenode;

attachmode : tnodeattachmode;

begin

if treeview1.selected = nil then

exit;

attachmode := naaddchild;

treeview1.items.beginupdate;

trytempnode := treeview1.items.addchild( treeview1.droptarget,

'temp' );

trytreeview1.selected.moveto( treeview1.droptarget, attachmode );

finally

tempnode.free;

end;

finally

treeview1.items.endupdate;

end;

end;

easyui之控制項Tree

這篇文章先介紹tree的兩種用法,一種是一次性取完,一種是非同步載入。取完的 如下 這個是一次性取完的 返回的是json格式。下面是非同步載入,只載入第一級的資料。其實你也發現了,這2個方法的呼叫資料都是一樣的,為什麼會出現乙個非同步乙個一次性呢,因為tree這個控制項已經封裝了非同步載入的方法。上...

SendMessage 操縱Tree控制項

應先傳送 tvm getnextitem 訊息獲取每個專案的控制代碼,而且要根據其是否含有子項來決定是否展開這個專案,傳送 tvm expand 訊息展開每個含有子項的專案。現假定 treeview 控制項的控制代碼為 hwnd hrootitem htreeitem sendmessage hwn...

delphi 控制項簡介

一 codegear interbase express 自帶的資料庫 dataset mybase dataaccess 伺服器遠端資料 data snap connection 遠端資料庫 dbexpress delphi 自己連線 db2,informix,interbase,mssql,my...