Delphi 中有哪一种控件,拥有树的功能并且每个节点前有CheckBox的功能?

解决方案 »

  1.   

    给你一个例子procedure TfrmUserPurview.TreeView2Click(Sender: TObject);
    var
      selectNode:TTreeNode;
      ParentNode:TTreeNode;
      nState:integer;
    begin
       selectNode:=TreeView2.Selected;
       if selectNode<>nil then
       begin
         nState:=selectNode.StateIndex;
         changeStateOfNode(selectNode,nState);
         if nState=1 then
         begin
             ParentNode:=selectNode.Parent;
             while (ParentNode<>nil) and (ParentNode<>TreeView2.Items.Item[0]) do
             begin
                changeStateOfNode(ParentNode,nState,False);
                ParentNode:=ParentNode.Parent;
             end;
         end;   end;
    end;
    //-----------------------------------------------------------------------------
    //过程函数:TfrmUserPurview.changeStateOfNode
    //功能描述:改变指定功能节点,及其所有子节点的状态
    //作者:
    //日期:2003-1-7 11:45:52
    //版本:
    //调用模块:
    //全局变量:
    //入口参数:1、Node : 要改变状态的节点
    //          2、State: 节点原来的状态
    //其他:
    //-----------------------------------------------------------------------------
    procedure TfrmUserPurview.changeStateOfNode(Node:TTreeNode;State:Integer;ChangeChildren:boolean=true);
    var i,n:integer;
        checkFlag:Integer;
    begin
      if Node <> nil then
      begin    if State = 1 then
           checkFlag := 2
        else
           checkFlag := 1;
        Node.StateIndex := checkFlag;    if ChangeChildren then
        begin
            //用递归的方法改变所有子节点的状态
            n:=Node.Count;
            for i:=0 to n-1 do
               changeStateOfNode(Node.Item[i],State);
        end;
      end;
      m_GrantChanged:=true;
    end;
      

  2.   

    最好是自己继承TTreeView写个控件,应该不会太复杂,用图片表示是否选中,加上checked属性就行了
      

  3.   

    你不能用第三方控件吗?
    很多第在方控件都有这样的功能!
    如Raize控件包等!
      

  4.   

    不用这么麻烦,自己写。我已经写好了,加入到jvcl控件包中。
    到www.playicq.com下载。或直接到jvcl.sourceforge.net下载,同时下载jcl。