我想在动态生成的树中使每个节点附加一段信息对应数据库中的唯一值

解决方案 »

  1.   

    TreeView1.selected.data := table1.getbook;
      

  2.   

    type
      PMyTree=^TMyTree;
       TMyTree =Record
        OldText:string;
        NewText:String;
    endvar
      root :TTreeNode;New(p);
    p^.OldText :='bbbb';
    p^.NewText :='aaaa';
    Root := AddChild(Root,p^.OldText);
    Root.Data :=p;
      

  3.   

    treeview的data属性是一个指针,当然,指针指向的位置可以存储你想存储的任何内容:
    首先,得声明你的指针和你想要在节点存储的数据(如果有多个字段,可以用记录来处理);
    type
      ptr=^schar
      schar=record
        field1:string,
        field2:integer,
        ...
      end;
    在加载树时你可以将你想要存储到节点的数据放进schar:
    var
     p:ptr
    ....
     new(p);
     p^.field1:='aaa';//在此可读入数据
     p^.field2:=1; 
    ....
     treeview.items.addchildobject(node,'',p);
    ...
     这样,附加信息就写入了节点的data;如何读取呢:
    下面是一段删除选中节点及子节点的代码(同时删除数据库中对应数据):
    procedure TForm1.detree(node: ttreenode);
    var
      tnode:ttreenode;
      i:integer;
      s1,s2:string;
    begin
      if node.HasChildren then
      begin
        for i:=node.Count-1 downto 0 do
        begin
          if node.Item[i].HasChildren then
          detree(node.Item[i]);
          s1:=pchar(node.Item[i].Data)^.mcaption;
          s2:=pchar(node.Item[i].data)^.tcaption;
          with form1.pub do
          begin
            close;
            sql.Clear;
            sql.Add('delete BOMMD where MD001=:AA and MD003=:BB');
            parameters[0].Value:=s1;
            parameters[1].Value:=s2;
            ExecSQL;
          end;
          node.Item[i].Delete;
        end;
      end;
      node.Delete;
    end;
      

  4.   

    注意:
    s1:=pchar(node.Item[i].Data)^.mcaption;
    s2:=pchar(node.Item[i].data)^.tcaption;
    这两句读取Data属性存储的附加数据,这里申明的指针及记录与前面不一样。
      

  5.   

    用这种方法好像取不出数据,Record,object or class type required
      

  6.   

    The following code defines a record type of TMyRec and a record pointer type of PMyRec.type
    PMyRec = ^TMyRec;
    TMyRec = record
      FName: string;
      LName: string;
    end;Assuming these types are used, the following code adds a node to TreeView1 as the last sibling of a specified node. A TMyRec record is associated with the added item. The FName and LName fields are obtained from edit boxes Edit1 and Edit2. The Index parameter is obtained from edit box Edit3. The item is added only if the Index is a valid value.procedure TForm1.Button1Click(Sender: TObject);var
      MyRecPtr: PMyRec;
      TreeViewIndex: LongInt;
    begin
      New(MyRecPtr);
      MyRecPtr^.FName := Edit1.Text;
      MyRecPtr^.LName := Edit2.Text;
      TreeViewIndex := StrToInt(Edit3.Text);
      with TreeView1 do
      begin
        if Items.Count = 0 then
          Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
        else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then      Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);
      end;
    end;After an item containing a TMyRec record has been added, the following code retrieves the FName and LName values associated with the item and displays the values in a label.procedure TForm1.Button2Click(Sender: TObject);begin
      Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
                      PMyRec(TreeView1.Selected.Data)^.LName;
    end;
      

  7.   

    可以了,wdsimon把schar写成pchar了