TreeNode.Data := Pointer(psmallint);psmallint := PSmannInt(TreeNode.Data)

解决方案 »

  1.   

    为什么不看看Delphi自己提供的帮助呢?我替你粘过来了,呵呵,给分吧^_^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;
      

  2.   

    其实,我私下觉得,对一个构件的了解,就是读他的属性、方法和事件了。一边读,一边做些试验,一开始觉得很困难,但是,过一段时间就觉得得到很多,也很系统,同时在看别的构件的时候也简单了。然后可以慢慢对整个Delphi的构件结构有了解了,可以开始看看它们的原码,可以开始做自己的构件,然后,呵呵,不知道一下如何?
      

  3.   

    ok,你的程序果然不错!
    那么我写的程序错在那里,请帮我看一下
    procedure TForm1.Button1Click(Sender: TObject);
    var pp:psmallint;
    aa:smallint;
    begin
      aa:=100;
      pp:=@aa;
      treeview1.Items.addobject(nil,'smallint',pointer(pp));
    end;procedure TForm1.Button2Click(Sender: TObject);
     var pp:psmallint;
    begin
     pp:=psmallint(treeview1.Selected.data);
     edit1.text:=inttostr(pp^);
    end;
      

  4.   

    搞错了吧,你的aa,pp都是button1Click的局部变量,这个函数一结束,
    aa释放,pp也释放,items中保存的东西都失效了。你在别的函数中读
    取,当然没用了。如果你想保存aa的值,就直接:
     treeview1.Items.addobject(nil,'smallint',pointer(aa));
    用的时候:
    edit1.text:=inttostr(smallint(treeview1.Selected.data));
      

  5.   

    朋友,找个控件用,不是很好吗?我曾经也用TREEVIEW,但总是有问题,dream infotree控件
      

  6.   

    我明白了,用全局变量可以了,
    谢谢!楼上的朋友,dream infotree 好用吗,哪儿下载呢?
      

  7.   

    那么,TreeView所有的节点的data都要指向全局变量了吧
    是不是太浪费资源了?
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    var 
      pp:psmallint;
      TmpItem:TTreeNode;
    begin
      New(pp);
      PP^:=100;
      aa:=100;
      TmpItem:=TreeView1.Items.AddChild(nil,'smallint');
      TmpItem.Data=pp;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var pp:psmallint;
    begin
      pp:=psmallint(treeview1.Selected.data);
      edit1.text:=inttostr(pp^);
    end; 记得在TreeView的Items.Clear的时候要Dispose分配的指针内存
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    var 
      pp:psmallint;
      TmpItem:TTreeNode;
    begin
      New(pp);
      PP^:=100;
      TmpItem:=TreeView1.Items.AddChild(nil,'smallint');
      TmpItem.Data=pp;
    end;procedure TForm1.Button2Click(Sender: TObject);
    var pp:psmallint;
    begin
      pp:=psmallint(treeview1.Selected.data);
      edit1.text:=inttostr(pp^);
    end; 记得在TreeView的Items.Clear的时候要Dispose分配的指针内存