存:
var  
  A: ^string;
  i: integer;
  strXH: string;
begin
  data.close;
  data.commandtext := Sql;
  data.open;
  for i := 0 to data.recordcount-1 do
  begin
    strxh := data.fieldbyname('field').asstring;
    A := @strXH;
    Treeview.items.Add(nil,strxh);
    Treeview.items.item[i].data := @A;
    data.next;
  End;
  End;取:
    var
  A: ^string;
  str: string;
begin
  A := TV_resultList.Items.Item[TV_resultList.Selected.Index].Data;
  str := A^;
  showmessage(str);
end;取不出来。什么问题?
先谢了1

解决方案 »

  1.   

    是不是 ???
    Treeview.items.item[i].data := @A;==>>Treeview.items.item[i].data := A;
      

  2.   

    按照老兄的方法,还是取出来为空
      A := TV_resultList.Items.Item[TV_resultList.Selected.Index].Data;
      str := A^;
      showmessage(str);
    showmessage();为空。什么原因?
      

  3.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
      str: string;
    begin
      Str := 'ccc';
      TreeView1.Items.AddChild(nil, 'aaa');
      TreeView1.Items.Item[0].Data := Pointer(str);
    end;procedure TForm1.TreeView1Change(Sender: TObject; Node: TTreeNode);
    begin
      ShowMessage(pchar(Node.Data));
    end;
      

  4.   

    for i := 0 to data.recordcount-1 do
      begin
        strxh := data.fieldbyname('field').asstring;
        A := @strXH;
        ....
        data.next;
      End;
    按以上的写法:当进入下一次循环时,strxh 被重新赋值,由于String是生存期自管理类型,所以系统给strxh重新分配内存,而原先所占的内存被自动回收;所以上次循环时得到的A 即“@strXH”此时已五任何意义!