You can hook the OnCreateNodeClass of the TTreeView.
try this:
type
TMyNode = class(TTreeNode)
private
  FMyProp: string;
public
  MyProp: string read FMyProp write FMyProp;
end;procedure TForm1.TreeView1CreateNodeClass(Sender: TCustomTreeView;
  var NodeClass: TTreeNodeClass);
begin
  NodeClass := TMyNode;
end;

解决方案 »

  1.   

    不过还要改其他地方!^
    当treeview重建的时候,你的属性值就会丢失,
    比如enabled操作,或者color等操作,
    如果程序中涉及到treeview重建,则需要修改treenodes的procedure
    procedure TTreeNodes.ReadData(Stream: TStream);
    var
      I, Count: Integer;
      NodeInfo: TNodeInfo;
    begin
      Clear;
      Stream.ReadBuffer(Count, SizeOf(Count));
      for I := 0 to Count - 1 do
        Add(nil, '').ReadData(Stream, @NodeInfo);
    end;procedure TTreeNodes.WriteData(Stream: TStream);
    var
      I: Integer;
      Node: TTreeNode;
      NodeInfo: TNodeInfo;
    begin
      I := 0;
      Node := GetFirstNode;
      while Node <> nil do
      begin
        Inc(I);
        Node := Node.GetNextSibling;
      end;
      Stream.WriteBuffer(I, SizeOf(I));
      Node := GetFirstNode;
      while Node <> nil do
      begin
        Node.WriteData(Stream, @NodeInfo);
        Node := Node.GetNextSibling;
      end;
    end;
      

  2.   

    item都有Data属性呀,直接用吧,哦,对了是Pointer型的哟不过我没有做到往里面写字符串且可以保存的,只是写一些数值还行也没有像上面两位所写的那么麻烦,也可能是我没有理解你的问题的意思
      

  3.   

    何必这样做呢,你直接在你的单元里重新声明一个TTreeNode的子类多好。
    改源码毕竟是有危险的。既然已经改了,那就把这个comctrls.pas放到delphi的lib目录下就行了。
      

  4.   

    是这样的。我在使用treeview这个控件,然后每个节点node上再保存一个数值,
    这样我就不用去使用data那个属性,每次用又有申请又要释放,所以我想如果可以
    增加一个属性那就很好用了。   其实用那个DATA 是可以实现 的,但嫌那个太麻烦了,每次使用都得申请后又得释放。   如果能够给每个节点中增加了一些属性用于保存就很方便了。  先照楼上两位的试试,不过看得有点不明了。
      

  5.   

    wisenowa(127.0.0.1) 的方法是正确的。关于释放,你不要担心,TTreeView 有一个事件 OnDeletion, 即在你删除某一结点时会激发此事件,你只要在此事件中写释放 Data 的代码即可。