+ A
| |--1
| |--2
| |--3
| |+B
| |--1
| |--2
| |--3
| |+C
| |--1
| |--2
| |--3
+ D
|--1
|--2
|--3
| |--1
| |--2
| |--3
| |+B
| |--1
| |--2
| |--3
| |+C
| |--1
| |--2
| |--3
+ D
|--1
|--2
|--3
解决方案 »
- 能不能把编译后产生临时文件放在指定的目录?
- dbgrideh+tquery如何设置下拉列表,请高手帮帮忙,谢谢!!!!!
- 关于自定义函数的应用
- 我在label1中设置了这样一个caption:3/8,如何才能将它化成float型数据呢?
- 键盘响应一问
- 有关speetbution按钮加入图片问题
- 测试 <=> =B2=E2=CA=D4
- treeview的问题,item和image
- 请教:delphi5跟vfp6在数据库处理上强的地方和弱的地方在哪里呢?
- delphi5, 如何使用Server页上的控件?
- Web Service多线程调用!!
- XPMemu控件,在98系统开始运行时,为什么启动很慢?
用循环链表?具体如何定义?to pandarus(Delphi/Asp里流浪的云) :
能否说详细点?
給一個遞歸函數的例子你:表結構
父阶 子阶 名稱
a b 1
a c 3
b d 1
c g 2
c E 8遞歸函數:
procedure TFm_main.treeviwe(treenode:ttreenode;roods:string);
var mytreenode:Ttreenode;
book1:Tbook;
begin
while not adoquery1.Eof do
begin
if treenode=nil then
begin
mytreenode:=treeview1.Items.Add(nil,adoquery1.Fieldbyname('node_text').AsString);
treeviwe(mytreenode,adoquery1.Fieldbyname('node_id').AsString);
end
else
begin
if adoquery1.Fieldbyname('parent_node_id').AsString=roods then
begin
mytreenode:=treeview1.Items.AddChild(treenode,adoquery1.Fieldbyname('node_text').AsString);
Book1:=adoquery1.GetBook;
treeviwe(mytreenode,adoquery1.Fieldbyname('node_id').AsString);
adoquery1.GotoBook(Book1);
adoquery1.FreeBook(Book1);
end;
end;
adoquery1.Next;
end;
end;
TreeView1.LoadFromFile();
procedure TTreeStrings.LoadTreeFromStream(Stream: TStream);
var
List: TStringList;
ANode, NextNode: TTreeNode;
ALevel, i: Integer;
CurrStr: string;
begin
List := TStringList.Create;
Owner.BeginUpdate;
try
try
Clear;
List.LoadFromStream(Stream);
ANode := nil;
for i := 0 to List.Count - 1 do
begin
CurrStr := GetBufStart(PChar(List[i]), ALevel);
if ANode = nil then
ANode := Owner.AddChild(nil, CurrStr)
else if ANode.Level = ALevel then
ANode := Owner.AddChild(ANode.Parent, CurrStr)
else if ANode.Level = (ALevel - 1) then
ANode := Owner.AddChild(ANode, CurrStr)
else if ANode.Level > ALevel then
begin
NextNode := ANode.Parent;
while NextNode.Level > ALevel do
NextNode := NextNode.Parent;
ANode := Owner.AddChild(NextNode.Parent, CurrStr);
end
else TreeViewErrorFmt(sInvalidLevelEx, [ALevel, CurrStr]);
end;
finally
Owner.EndUpdate;
List.Free;
end;
except
Owner.Owner.Invalidate; // force repaint on exception
raise;
end;
end;procedure TTreeStrings.SaveTreeToStream(Stream: TStream);
const
TabChar = #9;
EndOfLine = #13#10;
var
i: Integer;
ANode: TTreeNode;
NodeStr: string;
begin
if Count > 0 then
begin
ANode := Owner[0];
while ANode <> nil do
begin
NodeStr := '';
for i := 0 to ANode.Level - 1 do NodeStr := NodeStr + TabChar;
NodeStr := NodeStr + ANode.Text + EndOfLine;
Stream.Write(Pointer(NodeStr)^, Length(NodeStr));
ANode := ANode.GetNext;
end;
end;
end;
我想用记录+动态数组可以吗?
TreeView1.LoadFromFile();
可以的吧