我想实现在一个树形结构,每个节点的数据都是从数据库取的,树形结构的每个结点要记录文字,显示给用户看,同时也要记住一条记录的键值。比如一职员姓名我可以用TreeNode的Text属性记录,但同时这个职员的编号也要记住,不知道用那个属性。
不知道有没有PB中树形控件data这样的属性。

解决方案 »

  1.   

    type
      PMapNode = ^TMapNode;
      TMapNode = record
        fIndex:Integer;//图片编号
        fCode:String;//图片编码
        fName:String;//图片名称
        fType:Integer;
        FileName:String;//文件名
      end;{***************************************************************
     * 方 法 名  : TfrmMap.AddChildNode
     * 编写目的   :
     * 作    者  : 黄仁光
     * 参    数  : RootNode:TTreeNode;fIndex:Integer;fCode,fName:String;FileName:String
     * 结    果  : None
     * 编写日期   :2002年12月18日
     ****************************************************************}
    procedure TfrmMap.AddChildNode(RootNode:TTreeNode;fIndex:Integer;fCode,fName:String;fType:Integer;FileName:String);
    var
      ChildNode:TTreeNode;
      pMapChild:PMapNode;
    begin
      new(pMapChild);
      pMapChild^.fIndex := fIndex;
      pMapChild^.fCode := fCode;
      pMapChild^.fName := fName;
      pMapChild^.fType := fType;
      pMapChild^.FileName := FileName;
      ChildNode := treImage.Items.AddChildObject(RootNode,fCode,pMapChild);
    end;
      

  2.   

    procedure TfrmMap.treImageClick(Sender: TObject);
    var
      SelectNode:TTreeNode;
      pMapChild:PMapNode;
      fIndex:Integer;
      FileName:String;
    begin
      try
        new(pMapChild);
        SelectNode := treImage.Selected;
        SelectNode.Expanded := true;
        try
          if SelectNode.Level = 1 then
          begin
            Screen.Cursor := crHourGlass;
            pMapChild := PMapNode(SelectNode.Data);        MapEntryMode := 1;//如果选择树里面的图片,说明图片表是编辑
            FileName := pMapChild^.FileName;
            MapFileName := FileName;
            MapIndex := pMapChild^.fIndex;
            MapCode := pMapChild^.fCode; /////////////////////
            p_PicType := pMapChild.fType;//取得图片的类型        if FileName <> OldFileName then
            begin
              fIndex := pMapChild^.fIndex;
              ShowMapRS(fIndex);
              oldFileName := FileName;
            end;
          end;
        except
          Screen.Cursor := crDefault;
          Exit;
        end;
      finally
        Screen.Cursor := crDefault;
      end;
    end;
      

  3.   

    哈哈, 我以前用的也是PB, 感觉它的树真是太好用了, 速度也快
    用Delphi的树如果是用Query的话速度远达不到PB的效果据说要用第三方控件才行
    (TClientDataSet都不行)
      

  4.   

    上面的方法我试过,它的确有个Pointer 的data属性。可我用了 (湖)方法,可是同层的各节点存的值是一样的,而且是最后一个节点的值,难道是同一个针的问题,可我用了指针组也不行,请教