就是用的普通delphi自带的treeview即可
那个检查框用的是图标,你可以用几种图标来代替显示状态

解决方案 »

  1.   

    找不到就自己写,VCL控件(treeview,CkeckBox)代码都可以看
    这也需要现成就太偷懒了!:)
      

  2.   

    直接用 TTreeView 和 TImageList 控件就行了,操作如下:
    1. 在 ImageList1 中加三个图标,未选择,已选择,灰选择。
    2. 设置 TreeView1.Images := ImageList1;
    3. 在 TreeView1.OnClick 事件中写:const
       ImageIndex_NoChecked = 0;    // 未选择
       ImageIndex_IsChecked = 1;    // 已选择
       ImageIndex_GrayChecked = 2;  // 灰选择var
       boolNeedGrayChecked: Boolean = False;  // 是否需要灰选择// TreeView1 的 OnClick 事件过程
    procedure TForm1.TreeView1Click(Sender: TObject);
    var
       pointPos: TPoint;
       nodeTemp: TTreeNode;
    begin
       GetCursorPos(pointPos);
       pointPos := TreeView1.ScreenToClient(pointPos);
       nodeTemp := TreeView1.GetNodeAt(pointPos.x, pointPos.y);
       if nodeTemp = TreeView1.Selected then
          case nodeTemp.ImageIndex of
             ImageIndex_NoChecked:
                if boolNeedGrayChecked then
                   nodeTemp.ImageIndex := ImageIndex_GrayChecked
                else
                   nodeTemp.ImageIndex := ImageIndex_IsChecked;         ImageIndex_IsChecked:
                nodeTemp.ImageIndex := ImageIndex_NoChecked;         ImageIndex_GrayChecked:
                if boolNeedGrayChecked then
                   nodeTemp.ImageIndex := ImageIndex_IsChecked
                else
                   nodeTemp.ImageIndex := ImageIndex_NoChecked;
          end;
    end;以上三步即可实现你所需要的。
      

  3.   

    直接用 TTreeView 和 TImageList 控件就行了,操作如下:
    1. 在 ImageList1 中加三个图标,未选择,已选择,灰选择。
    2. 设置 TreeView1.Images := ImageList1;
    3. 在 TreeView1.OnClick 事件中写:const
       ImageIndex_NoChecked = 0;    // 未选择
       ImageIndex_IsChecked = 1;    // 已选择
       ImageIndex_GrayChecked = 2;  // 灰选择var
       boolNeedGrayChecked: Boolean = False;  // 是否需要灰选择// TreeView1 的 OnClick 事件过程
    procedure TForm1.TreeView1Click(Sender: TObject);
    var
       pointPos: TPoint;
       nodeTemp: TTreeNode;
    begin
       GetCursorPos(pointPos);
       pointPos := TreeView1.ScreenToClient(pointPos);
       nodeTemp := TreeView1.GetNodeAt(pointPos.x, pointPos.y);
       if nodeTemp = TreeView1.Selected then
          case nodeTemp.ImageIndex of
             ImageIndex_NoChecked:
                if boolNeedGrayChecked then
                   nodeTemp.ImageIndex := ImageIndex_GrayChecked
                else
                   nodeTemp.ImageIndex := ImageIndex_IsChecked;         ImageIndex_IsChecked:
                nodeTemp.ImageIndex := ImageIndex_NoChecked;         ImageIndex_GrayChecked:
                if boolNeedGrayChecked then
                   nodeTemp.ImageIndex := ImageIndex_IsChecked
                else
                   nodeTemp.ImageIndex := ImageIndex_NoChecked;
          end;
    end;以上三步即可实现你所需要的。
      

  4.   

    把 
    if nodeTemp = TreeView1.Selected then
    改为:
    if (nodeTemp <> Nil) and (nodeTemp = TreeView1.Selected) then