现在有一个TStringList 里面存的是Module类
Module类: id,Integer;
  name,String;
  parent,Integer;
  children,TStringList;
数据结构就是这样,类似一个树--------------list中的数据-----------------
modObj1 := Module.create();
modObj1.id := 1;
modObj1.name := '系统管理';
modObj1.parent := -1;//-1代表父节点modObj2 := Module.create();
modObj2.id := 2;
modObj2.name := '字典管理';
modObj2.parent := 1; //父模块的idmodObj1.children := TStringList.create();
modObj1.children.addObject(intToStr(modObj2.id),modObj2);list := TStringList.create();
list.addObject(intToStr(modObj1.id),modObj1);---------------------------------
//.....
treeView : TTreeView;
//.....procedure loadTree();
var modObj : Module;//Module类
begin
  for i:=0 to list.Count-1 do
  begin
    modObj := Module(list.Objects[i]);//这里list就是上面的内容
    //怎么将list中的数据用TTreeView显示出来
  end;
end;

解决方案 »

  1.   

    用TreeView的Add添加节点就可以了。
      

  2.   

    給你一個測試demo...
    1.生成樹的過程如下:procedure TRES_BOM_VIEW_F.CREATETREEVIEWMODEL;
    var
      iLoop:Integer;
      Master,MasterNode:TTreeNode;
    begin
      adoq_getop.Close;
      //SELECT distinct PARN_TYP FROM WWW where parn_typ<>'.' and parn_typ is not null order by PARN_TYP desc
      adoq_getop.SQL.Text:='SELECT distinct PARN_TYP FROM WWW where parn_typ<>''.'' and parn_typ is not null order by PARN_TYP desc';
      adoq_getop.Open;
      adoq_getop.First;
      cx_TV.Items.BeginUpdate;
      cx_TV.Items.Clear;
      Master:=cx_TV.Items.Add(nil,'昆盈BOM表檢視');
      while not adoq_getop.Eof do
      begin
        if adoq_getop.FieldByName('PARN_TYP').AsString<>'' then
        begin
          Screen.Cursor:=crSQLWait;
          MasterNode:=cx_TV.Items.AddChild(Master,VarToStr(adoq_getop.FieldValues['PARN_TYP']));
          Application.ProcessMessages;
          qry_op.Close;
          qry_op.SQL.Text:='SELECT DISTINCT PARN_LITM FROM WWW WHERE PARN_TYP='''+ VarToStr(adoq_getop.FieldValues['PARN_TYP'])+''' GROUP BY PARN_LITM';
          qry_op.Open;
          for iLoop:=0 to qry_op.RecordCount -1 do
          begin
            cx_TV.Items.AddChild(MasterNode,VarToStr(qry_op.FieldValues['PARN_LITM']));
            qry_op.Next;
          end;
          Application.ProcessMessages;
          cx_TV.Items.EndUpdate;
          Screen.Cursor:=crDefault;
        end;
        adoq_getop.Next;
        Application.ProcessMessages;
      end;
     {
      ThreadTView:=cx_TV;
      ViewThread:=TExpandLH.Create;
      ViewThread.Resume;
      }
    end;
      

  3.   

    調用:procedure TRES_BOM_VIEW_F.btnSB_SearchClick(Sender: TObject);
    begin
      inherited;
      try
        RES_LOADING_F:=TRES_LOADING_F.Create(Self);
        RES_LOADING_F.Label1.Caption:='正在檢索相關數據......';
        RES_LOADING_F.Show;
        RES_LOADING_F.Update;
        CREATETREEVIEWMODEL;
      finally
        RES_LOADING_F.Close;
      end;
    end;
      

  4.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Nodes: TTreeNodes;
      node: TTreeNode;
    begin
      Nodes := TreeView1.Items;  {添加第一个元素}
      node := Nodes.Add(nil, '一连长'); {'一连长'好孤独, 旁边没人}  {现在 node 代表"一连长", 继续添加与其平级人员, 当然要参照"一连长"}
      Nodes.Add(node, '二连长');
      Nodes.Add(node, '三连长');  {安排"一连"的下一层: "排长"; 同时让 node 指向"一排长"}
      node := Nodes.AddChild(node, '一排长');
      Nodes.Add(node, '二排长');
      Nodes.Add(node, '三排长');  {添加平级用 Add, 添加下级用 AddChild; 继续:}
      node := Nodes.AddChild(node, '一班长');
      Nodes.Add(node, '二班长');
      Nodes.Add(node, '三班长');  {还有 AddChildFirst 和 AddFirst 是专门添加第一个的, 假如忘了第一个...}
      node := Nodes.AddChild(node, '战士2');
      Nodes.Add(node, '战士3');
      Nodes.Add(node, '战士4');
      Nodes.AddFirst(node, '战士1'); {用 AddFirst 可以让它站在前面}
    end;
    这个是万一老师的例子
    楼主可以找下万一那里好多基础的东西