本人不是专业编程,问题很菜。TreeView的 Items需要携带几个整数,用Items.AddChildObject(Node,Str,Pointer(ID)即使分段也不够,Items又是动态的,携带数组也麻烦,于是把ComCtrls.pas复制到我的目录,修改源码ComCtrls.pas
  TNodeInfo = record
    ImageIndex: Integer;
    SelectedIndex: Integer;
    StateIndex: Integer;
    OverlayIndex: Integer;
    Data: Integer;
    Count: Integer;
    Text: string[255];
    AdditionalProperty1:integer;   //添加几条就能携带几个数据
    ....
  end;+读写事件
  
然后把ComCtrls.pas加入工程编译,这种方法可以吗?
是否需要派生一个新的控件?会不会把原始的ComCtrls.pas的和修改的ComCtrls.pas都编译到执行代码?编程

解决方案 »

  1.   

    只要一个整数就可以存储一个指针或者对象啊,指针或者对象就可以包含n多个整数了!
    比如:
    TObj = class
      a,b,c: Integer;//一下就包含了3个整数!
    end;
      

  2.   

    简化了的模型,比如itme.text是货物, 我要携带ID、单价、数量,详细一点好吗?
    我前面的方式是不是简单一些?
      

  3.   

    我只给Ttreenode加过一个datastring:String
    新旧版本的确比较麻烦一个string可以包含几乎任意的record(所有field)了,通过编码的方式(ini或base64)
      

  4.   

    其实对TreeView 的Node添加属性的过程比较简单,已经完成,我就是想知道这么处理是否有些副作用
      

  5.   

    一个String可以代替多个intgger,只要转换一下,有些提示,效率稍低
      

  6.   

    使用1stTreeView,节点上可以直接带两个Data。
      

  7.   

    结点可以带一个 Data, 把 TStrings 放进去就好了。
    function AddData(node:TTreeNode):TStrings;
    begin
        Result := TStringList.Create;
        node.Data := Pointer(Result);
    end;function GetData(node:TTreeNode):TStrings;
    begin
        if node.Data <> nil then
            Result := TStrings(node.Data);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
        ts : TStrings;
    begin
        ts := AddData(TreeView1.Items[0]);
        ts.Add('1');
        ts.Add('2');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
        i : Integer;
        ts : TStrings;
    begin
        ts := GetData(TreeView1.Items[0]);
        for i:=0 to ts.Count-1 do
        begin
            ShowMessage(ts[i]);
        end;
    end;procedure TForm1.TreeView1Deletion(Sender: TObject; Node: TTreeNode);
    var
        ts : TStrings;
    begin
        ts := GetData((node);
        if ts<>nil then
        begin
            ts.Free;
            node.Data := nil;
        end;
    end;
      

  8.   

    还是需要创建和释放。
    只有string是完全自动的