请举一个使用TREEVIEW创建,删除节点的简单例子 |
尚未結案
|
pure
一般會員 發表:16 回覆:13 積分:5 註冊:2003-09-08 發送簡訊給我 |
|
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
在一個新專案里安排一個Button1跟TreeView1二個元件就好,以下的範例就是將Windows底下的所有資料夾全一層一層的放到TreeView1里,用到遞迴的方法(函數自己呼叫自己)........
這是個初級的做法,不使用thread多緒(多線程)呼叫的結果,就是慢到死~~~~如果是xp的系統,整理個c:\到treeview的時間要花掉五到十分鐘
進階一點就用thread object來變化吧.....速度快很多的,不過本題不扯到多緒,暫不討論
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls; type TForm1 = class(TForm) TreeView1: TTreeView; Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } function RetrieveDirToMenu(dir:string;mode:integer;var tn1 : TTreeNode;var tv1:TTreeView ):boolean; public { Public declarations } end; var Form1: TForm1; function checktailslash(dir: string):string; type PMyRec = ^TMyRec; TMyRec = record FName: string; LName: string; end; implementation {$R *.dfm} function checktailslash(dir: string):string; begin if copy(dir,length(dir),1)<>'\' then result:=dir '\'; end; function TForm1.RetrieveDirToMenu(dir:string;mode:integer;var tn1 : TTreeNode;var tv1:TTreeView ):boolean; var mySR : TSearchRec ; dirs : TStringList; tmp:string; x : integer; bTN : TTreeNode; MyRecPtr: PMyRec; begin result := true; dirs:=TStringList.Create; begin if findfirst(CheckTailSlash(DIR) '*.*',faAnyFile,mySR)=0 then begin if ((MySR.Attr and $0000003F)<=$0000003F) and (MySR.name<>'..') and (MySR.Name<>'.') THEN if ((MySR.Attr and $00000010)=$00000010) then dirs.Add(mySR.name); while Findnext(mySR)=0 do if ((MySR.Attr and $0000003F)<=$0000003F) and (MySR.name<>'..') and (MySR.Name<>'.') THEN if ((MySR.Attr and $00000010)=$00000010) then dirs.Add(mySR.name); end ; FindClose(mySR); end; for x := 1 to dirs.Count do begin bTN:=tv1.Items.AddChild(tn1,dirs[x-1]); retrievedirtomenu(checktailslash(dir) dirs[x-1],0,bTN,tv1); application.ProcessMessages; end; dirs.Free; end; procedure TForm1.Button1Click(Sender: TObject); var xTreeNode: TTreeNode; begin xTreeNode:=TreeView1.Items.Add(nil,'C:\'); TreeView1.Items[0].Expand(false); RetrieveDirToMenu('C:\windows',0,xTreeNode,TreeView1); TreeView1.Items[0].Expand(false); end; end.我不懂,不懂,不懂....所以我才來ktop學工夫 |
japhenchen
高階會員 發表:51 回覆:444 積分:184 註冊:2003-07-23 發送簡訊給我 |
這例子沒寫好~~~可能偏離了 class="code">
var parentnode ,childnode,3n ,4n : TTreeNode;
begin
parentnode:=TreeView1.items.add(nil,'我是老爸'); // add到nil就變成root了
parentnode.imageindex:=0; // 如果你有用imagelist的話,定為顯示第零個圖示
childnode:=TreeView1.items.add(parentnode,'我是第一個兒子');
childnode.imageindex:=1;
childnode:=TreeView1.items.add(parentnode,'我是第二個兒子');
childnode.imageindex:=1; 3n:=TreeView1.items.add(childnode,'我是第三代');
4n:=TreeView1.items.add(3n,'我是第三代');
.
.
. // 以此類推,不用釋放這些node ,不然會不見唷! end;
我不懂,不懂,不懂....所以我才來ktop學工夫
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |