procedure TFrm_main.TreeView1Click(Sender: TObject); var i:integer; begin i:=0; if TreeView1.Selected.Level=0 then with Frm_DM.Q_tree2 do begin Frm_DM.Q_tree2.Close; Frm_DM.Q_tree2.Sql.Clear; Frm_DM.Q_tree2.SQL.Add('select * from h_code_tree where sysname=:sysname'); Frm_DM.Q_tree2.SQL.Add(' and id in(select id from h_limit where menu=''1'' and flag=:flag)'); Frm_DM.Q_tree2.ParamByName('sysname').AsString:=TreeView1.Selected.Text; Frm_DM.Q_tree2.ParamByName('flag').AsString:=Frm_login.p_userflag; Frm_DM.Q_tree2.Open; ListView1.Clear; end; if TreeView1.Selected.Level=1 then with Frm_DM.Q_tree2 do begin Frm_DM.Q_tree2.Close; Frm_DM.Q_tree2.Sql.Clear; Frm_DM.Q_tree2.SQL.Add('select * from h_code_tree where menuname=:menuname'); Frm_DM.Q_tree2.SQL.Add(' and id in(select id from h_limit where menu=''1'' and flag=:flag)'); Frm_DM.Q_tree2.ParamByName('menuname').AsString:=TreeView1.Selected.Text; Frm_DM.Q_tree2.ParamByName('flag').AsString:=Frm_login.p_userflag; Frm_DM.Q_tree2.Open; ListView1.Clear; end; while not Frm_DM.Q_tree2.Eof do begin list1:=ListView1.Items.Add; list1.ImageIndex:=i; list1.Caption:=Frm_DM.Q_tree2.FieldByName('meno').AsString; Frm_DM.Q_tree2.Next; inc(i); end; end;
出现下面的错误,还是不行啊?type TRecUnit=record unitID:string; unitName:string; end;procedure TGBRMSQZCT.BizFormCreate(Sender: TObject); /////////////////////////////////////////////////////////////// // 功能描述: // 显示单位编码树和人员名单,其中单位树只显示跟节点和第一层子节点 // 输入: // 输出: // 编写人: // 编写时间: ////////////////////////////////////////////////////////////// var rootUnit:string; myUnit:Trecunit; begin rootUnit:=''; //保存跟节点的单位编码值 with datasetbroker1 do begin dataset.Active := true; //打开数据集 while not (dataset.eof) do begin if DataSet.FieldByName('parent1').AsString ='-1' then //根节点 begin node1:=treeunit.Items.Add (nil,dataset.fieldbyname('name').AsString ); //rootUnit:=dataset.fieldbyname('unitid').asstring; new(Trecunit); Trecunit^.Unitid:=rootunit; // ERROR:Unexpected token: Trecunit Trecunit^.unitname:=dataset.fieldbyname('name').asstring;// ERROR:Unexpected token: Trecunit node1.data:=^Trecunit;// ERROR:Unexpected token: Trecunit dataset.Next; end else begin if dataset.FieldByName('parent').AsString=rootUnit then begin //第一层子节点 treeUnit.Items.AddChild (node1,dataset.fieldbyname('name').asstring); dataset.next; end else dataset.Next ; end; end; end; end;
是要动画式的一级级打开吗?
另外,在vb中,treeview的每个节点都有自己的唯一标志,可以存在key里面。Delphi的treeview怎么没有这个属性?
procedure TfrmDDraw030000.tvSubTreeExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
begin
//加节点代码
end;
var
i:integer;
begin
i:=0;
if TreeView1.Selected.Level=0 then
with Frm_DM.Q_tree2 do
begin
Frm_DM.Q_tree2.Close;
Frm_DM.Q_tree2.Sql.Clear;
Frm_DM.Q_tree2.SQL.Add('select * from h_code_tree where sysname=:sysname');
Frm_DM.Q_tree2.SQL.Add(' and id in(select id from h_limit where menu=''1'' and flag=:flag)');
Frm_DM.Q_tree2.ParamByName('sysname').AsString:=TreeView1.Selected.Text;
Frm_DM.Q_tree2.ParamByName('flag').AsString:=Frm_login.p_userflag;
Frm_DM.Q_tree2.Open;
ListView1.Clear;
end;
if TreeView1.Selected.Level=1 then
with Frm_DM.Q_tree2 do
begin
Frm_DM.Q_tree2.Close;
Frm_DM.Q_tree2.Sql.Clear;
Frm_DM.Q_tree2.SQL.Add('select * from h_code_tree where menuname=:menuname');
Frm_DM.Q_tree2.SQL.Add(' and id in(select id from h_limit where menu=''1'' and flag=:flag)');
Frm_DM.Q_tree2.ParamByName('menuname').AsString:=TreeView1.Selected.Text;
Frm_DM.Q_tree2.ParamByName('flag').AsString:=Frm_login.p_userflag;
Frm_DM.Q_tree2.Open;
ListView1.Clear;
end;
while not Frm_DM.Q_tree2.Eof do
begin
list1:=ListView1.Items.Add;
list1.ImageIndex:=i;
list1.Caption:=Frm_DM.Q_tree2.FieldByName('meno').AsString;
Frm_DM.Q_tree2.Next;
inc(i);
end;
end;
AddChildObject()
把地区用TreeView显示出来.有3000多个..
要是开始时全创建至少要5秒.
所以只能当点中其中某个节点展开时再创建子节点.
不知楼主是否要实现这样的功能?
在刚开始创建时要判断一下.该节点下面是否要放子节点.把+号显示出来
还有.在展开时要判断一下其下面是否已经有子节点了.再次展开时会重复的创建.
type PRec = ^TRec;
TRec = record
ID: string; //工程编号
Name: string; //工程名称
C_id: string; //合同编号
C_Name: string; //合同名称
Flag: ShortInt; //1 工程节点;0合同节点;
////////////////////////////lah 2004-06-28
Money_dec: ShortInt; // 金额小数位数
op_flow: string; // 程序业务流程
Gq: Integer; // 工期
GqName: string;
GqBegDate: TDateTime; //当前工期开始时间
GqEndDate: TDateTime; // 工期结束时间
IsPayment: Boolean; // 是否支付
Js_xx: string; //结算信息
Flag_w: boolean; //千分位标志
{ TODO : sun 05-04-13 }
C_Bdmc: string; //标段名称
end;
var
ptr: Prec;
NewNode: TTreeNode;
begin
TreeView.Items.Clear;
new(ptr);
ptr^.ID := htbh;
Ptr^.Name := htName;
Ptr^.Flag := 2;
NewNode := TreeView.Items.AddObject(nil, Ptr^.Name, ptr);
NewNode.ImageIndex := 3;
NewNode.SelectedIndex := 3;
TRecUnit=record
unitID:string;
unitName:string;
end;procedure TGBRMSQZCT.BizFormCreate(Sender: TObject);
///////////////////////////////////////////////////////////////
// 功能描述:
// 显示单位编码树和人员名单,其中单位树只显示跟节点和第一层子节点
// 输入:
// 输出:
// 编写人:
// 编写时间:
//////////////////////////////////////////////////////////////
var
rootUnit:string;
myUnit:Trecunit;
begin rootUnit:=''; //保存跟节点的单位编码值
with datasetbroker1 do
begin
dataset.Active := true; //打开数据集
while not (dataset.eof) do
begin
if DataSet.FieldByName('parent1').AsString ='-1' then
//根节点
begin
node1:=treeunit.Items.Add (nil,dataset.fieldbyname('name').AsString );
//rootUnit:=dataset.fieldbyname('unitid').asstring;
new(Trecunit);
Trecunit^.Unitid:=rootunit; // ERROR:Unexpected token: Trecunit
Trecunit^.unitname:=dataset.fieldbyname('name').asstring;// ERROR:Unexpected token: Trecunit
node1.data:=^Trecunit;// ERROR:Unexpected token: Trecunit
dataset.Next;
end
else
begin if dataset.FieldByName('parent').AsString=rootUnit then
begin
//第一层子节点
treeUnit.Items.AddChild (node1,dataset.fieldbyname('name').asstring);
dataset.next;
end
else
dataset.Next ; end;
end;
end;
end;
RecUnit=^TRecUnit;
TRecUnit=record
unitID:string;
unitName:string;
end;