数据库结构
id         型号    其他字段   ......
1          A001    ........
2          A001    ........
3          A002    ........
7          A003    ........
9          A008    ........我生成了这个树,树中显示的是“型号”字段,当点击树时,系统根据点的东西,查询数据库,然后显示该型号的所有属性,问题是怎样该树的text是型号,查询肯定得不到唯一的纪录,问:点击树时怎样返回id

解决方案 »

  1.   

    可以用AddChildObject方法.
    取值再用TreeItem的Data屬性.例如:type
      PObj = ^TObj;
      TObj = record
        lObjKey: string;
        lObjKeyValue: string;
      end;
    var
      lObj: PObj;
    begin
      New(lObj);
      lObj.lObjKeyValue := 'ID';
      lObj.lObjKey := '型號';
      TreeView.Items.AddChildObject(父節點, lObj.lObjKey + '-' + lObj.lObjKeyValue, TObject(lObj));
      //取值
      PObj(TreeView.Selected.Data).lObjKey;
    end;隨便寫的, 沒調試, 還要注意釋放資源.
      

  2.   

    麻烦再问一下,在树的click事件中怎样返回这个lObjKey,根据他查询数据库?
      

  3.   

    pobj这个咚咚是在建树的函数中定义的,在click的函数中怎样调用?
      

  4.   

    new(P);
    P.iImageCode := qryImage.FieldByName('iii_image_code').AsInteger;
    P.iImageCategoryCd := qryImage.FieldByName('iii_image_category_cd').AsInteger;
    P.sImageName := qryImage.FieldByName('iii_image_name').AsString;
    P.sAbsolutePath := qryImage.FieldByName('iii_absolute_path').AsString;
    P.sCameraAuthor := qryImage.FieldByName('iii_camera_author').AsString;
    P.sCameraDate := qryImage.FieldByName('iii_camera_date').AsString;
    P.sCameraPlace := qryImage.FieldByName('iii_camera_place').AsString;
    P.sImageFormat := qryImage.FieldByName('iii_image_format').AsString;
    P.sImageDesc := qryImage.FieldByName('iii_image_desc').AsString;
    P.nType := wntImage; intImageIndex := GetImageIndex(qryImage.FieldByName('iii_image_format').AsString);
    tndImage.StateIndex := intImageIndex;
    tndImage.ImageIndex := intImageIndex;
    tndImage.SelectedIndex := intImageIndex;
    tndImage.Data := P; <-- 这里是保存ID其中P和楼上的意思一样~~希望你能看明白~~
      

  5.   

    我看懂了,: konhon(优华) ( ) 回的  TreeView.Items.AddChildObject(父節點, lObj.lObjKeyValue, TObject(lObj));
    这样做可以,但是怎样释放New(lObj);建立的lObj啊?
    相当于建树的每个节点时先创建一个变量,然后data指向他,用完后怎样释放呢?
    还有,我只想把id带过去,不要用record类型,怎样写?
      

  6.   

    使用TreeNode的Data属性可以解决关联任意对象的问题。
      

  7.   

    使用TreeNode的Data属性完全可以解决的啊,不过你只想让ID的话,不防用以下方法   aa:=tv_1.Items.Add(nil,'根节点');   for .....   tv_1.Items.AddChild(aa,Format('%.8d', fieldbyname(id).asinteger)
                         +fieldbyname('型号').asstring);
       
       id:=left(tv_1.Selected.Text,8)
      

  8.   

    procedure Dispose(var P: Pointer);
    释放