有谁做过有关树型结构的软件,能提供源码吗?(50分)

  • 主题发起人 caoguangchuan
  • 开始时间
C

caoguangchuan

Unregistered / Unconfirmed
GUEST, unregistred user!
有谁做过有关树型结构的软件,能提供源码吗?
 
我有一个程序
关于文件目录的TTreeview+listview
需要请留下email
kunmeng@sina.com
 
Demo里不是有一个吗?可以看看。
 
to kunmeng:你好,谢谢你提供帮助,我的Email:caoguangchuan@163.net
 
我程序里的一段,可以实现无限层:
procedure TForm8.LoadTreeView;
var
strsql,tid:string;
begin
try
DataModule3.ADOTable3.open;
DataModule3.ADOTable3.Locate('DTname',RzComboBox1.Text,[lopartialkey]);
tid:=inttostr(DataModule3.ADOTable3.FieldByName('id').value);
strsql:='select * from T where TypeID='+tid;
DQ.Active :=false;
DQ.SQL.Clear ;
DQ.SQL.Add(strsql);
DQ.Active :=true;
DQ.Filtered :=true;
DQ.Filter := 'Parent=0';
U_DiGui(0,seltv.TopItem );//从当前0层开始递归建树
except
showmessage('字典里没有数据!');
end;
end;
procedure TForm8.U_DiGui(parentID:Cardinal;ParentNode:TTreeNode);
var
tmpTBData:array of TableData;
i,j:integer;
tmpNode:TTreeNode;
begin
j:=DQ.RecordCount;
setlength(tmpTBData,j);//保存递规上一层结点值
for i:=0 to j-1 do
begin
tmpTBData.ID := Cardinal(DQ.fieldbyname('ID').value);
tmpTBData.Name := DQ.fieldbyname('Name').value;
tmpTBData.ParentID := Cardinal(DQ.fieldbyname('Parent').value);
DQ.Next;
end;
for i:=0 to j-1 do
begin
//递规调用建立所有结点
tmpNode:=seltv.Items.AddChild(ParentNode,tmpTBData.Name);
// tmpNode.ImageIndex:=2;
new(pData);
pData^.ID:=tmpTBData.ID;
tmpNode.Data:=pData;
DQ.Filter := 'Parent=' + IntToStr(Integer(tmpTBData.ID));
if DQ.RecordCount >0 then
begin
U_DiGui(tmpTBData.ID,tmpNode );
end;
end;
end;
procedure TForm8.Idelnode(tpnode:TTreeNode);
var
i:Integer;
ListItem:TListItem;
begin
for i := 0 To tpnode.count-1 do
begin
//递归调用遍历所选结点的所有子结点,并相应的删除数据
sellv.Items.begin
Update;
ListItem:=sellv.Items.Add ;
ListItem.Caption:=tpnode.Item.Text;
sellv.Items.EndUpdate;
if tpnode.Item.getFirstChild <> nil then
Idelnode(tpnode.item);
end;
end;

procedure TForm8.FormShow(Sender: TObject);
begin
seltv.Font:=screen.IconFont;
sellv.Font:=screen.IconFont;
seltv.Items.Clear;
sellv.Items.Clear;
RzComboBox1.Items.Clear;
LoadTreeView;
DataModule3.ADOTable3.open;
DataModule3.ADOTable3.First;
while not DataModule3.ADOTable3.Eof do
begin
RzComboBox1.Items.Add(DataModule3.ADOTable3.FieldByName('DTname').asstring);
DataModule3.ADOTable3.Next;
end;
end;
 
to kunmeng:谢谢你提供的源码,但是你的源码编译有错,请原谅,能不能提供编译无误的源码呢?
 
什么错误你也没说明白,我这源码是D5的,全是内部控件,我这编译通过了
请给出错误提示吧!
 
to kunmeng:请看错误列表如下:
[Warning] Main_infoClass.pas(7): Unit 'FileCtrl' is specific to a platform
[Error] DateConv.pas(15): Undeclared identifier: 'VarArrayOf'
[Error] DateConv.pas(15): Ordinal type required
[Error] DateConv.pas(15): Incompatible types: 'Integer' and 'String'
[Error] DateConv.pas(15): Incompatible types: 'Integer' and 'String'
[Error] DateConv.pas(15): Incompatible types: 'Integer' and 'String'
[Error] DateConv.pas(15): Incompatible types: 'Integer' and 'String'
[Error] DateConv.pas(16): Incompatible types: 'Char' and 'String'
[Fatal Error] Main_infoClass.pas(72): Could not compile used unit 'DateConv.pas'
 
to kunmeng:Char_QJ:= VarArray Of (['1','2','3','4','5','6','7','8','9','0','年','月','日']);是否正确
 
在DateConv加上//
uses
System;
我用的是d5,另外告诉我你的delphi版本
 
你学的是 listview and listtree
建议设置断点,将和向学的东西无关的代码//{}
 
to kunmeng:我用的是delphi6
 
to kunmeng:Vararrayof这个函数为什么在dephi6下不能用呢
 
>>Vararrayof=>varray of
Vararray of是个变体类型数组,
看看 d6帮助,是不是使用有什么变化或有什么限制,
要不你把原来定义的string 改为 widestring类型试试
我这没d6,可惜呀
 
to kunmeng:d6没有这样的帮助呀,无奈
 
多人接受答案了。
 
顶部