这需要用到imageindex,很简单的

解决方案 »

  1.   

    用一个ImageList1,设Treeview1的 images为 ImageList1procedure TForm1.TreeView1Click(Sender: TObject);
    var
      i: integer;
    begin
    for i := 0 to treeview1.Items.Count-1 do  {设置当前打开项目的图标与未打开项目的图标互异}
        TreeView1.Items[i].ImageIndex := 0;
        
      for i := 0 to treeview1.Items.Count-1 do
        if treeview1.Items[i].Selected then
        begin
          TreeView1.Items[i].ImageIndex := 1;
    end;
      

  2.   

    sorry,发错!用一个ImageList1,设Treeview1的 images为 ImageList1procedure TForm1.TreeView1Click(Sender: TObject);
    var
      i: integer;
    begin
    for i := 0 to treeview1.Items.Count-1 do  {设置当前打开项目的图标与未打开项目的图标互异}
        TreeView1.Items[i].ImageIndex := 0;
        
      for i := 0 to treeview1.Items.Count-1 do
        if treeview1.Items[i].Selected then
        begin
          TreeView1.Items[i].ImageIndex := 1;
        end;
    end;   
      

  3.   

    同样可以用TreeView1.Items[i].StateImage,也是设置这个属性的值就可以了,还可以实现对子节点父节点的设置。
    //设置当前结点及上下级的复选关系。
    procedure TForm1.TreeView1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    var
        Node:TTreeNode;
        MyHitTest : THitTests;begin
        MyHitTest:=Form1.TreeView1.GetHitTestInfoAt(X,Y);
        if (htOnItem in MyHitTest)or(htOnIcon in MyHitTest) And (Button=mbLeft) then
        Begin
            Node:=Form1.TreeView1.GetNodeAt(X,Y);
            Case Node.StateIndex Of
                ST_CHECK:Begin
                    SetChildState(Node,ST_UNCHECK);
                end;
                ST_UNCHECK:Begin
                    SetChildState(Node,ST_CHECK);
                End;
                ST_CHECKING:Begin
                    SetChildState(Node,ST_UNCHECK);
                End;
            End;
            SetParentState(Node);
        End;
    end;//将结点子树(含该结点)标为复选或清除状态
    Procedure SetChildState(Node:TTreeNode;State:Integer);
    var
    level:integer;Begin
        Node.StateIndex:=State;
        level:=Node.Level;
        Node:=Node.getFirstChild;
        while (Node<>nil)and(Node.Level>level) do
        begin
          Node.StateIndex:=State;
          Node:=Node.GetNext;
        end;
    End;//根据指定结点状态,设置父结点状态
    Procedure SetParentState(Node:TTreeNode);
    var
        flag:integer;
        PNode:TTreeNode;
    begin
        PNode:=Node.Parent;
        if PNode<>nil then
        begin
            PNode:=PNode.getFirstChild;
            flag:=PNode.StateIndex;
            while PNode<>nil do
            begin
                if PNode.StateIndex<>flag then
                    flag:=2;
                PNode:=PNode.getNextSibling;
            end;
            Node.Parent.StateIndex:=flag;
            SetParentState(Node.Parent);
        end;
    end; 
      

  4.   

    //设置复选类别的常量
        ST_UNCHECK=0;
        ST_CHECK=1;
        ST_CHECKING=2;
      

  5.   

    还是不对,ttreeview 有很多子节点时,左边不是有个加号吗,按了加号后就变成了减号,所以我想要的是,被展开的节点是一张图片,没展开是另一张图片
      

  6.   

    用treeview1.Selected.Expanded属性判断是否展开,然后用treeview1.selected.image来设置图标
      

  7.   

    上面的有些参数都看不懂,
    tommychim(大脚鸟):你这个,我用onclick事件做,怎么效果不佳
      

  8.   

    最容易的方法就是
    procedure Tform1.TreeView1GetImageIndex(Sender: TObject;
      Node: TTreeNode);
    begin
      with Node do
      if HasChildren then
        if Expanded then
          ImageIndex:=17
        else
          ImageIndex:=16
      else
        ImageIndex:=19;
      //Node.ImageIndex:=14;
    end;procedure Tform1.TreeView1GetSelectedIndex(Sender: TObject;
      Node: TTreeNode);
    begin
      with Node do
      if HasChildren then
        SelectedIndex:=ImageIndex
      else
        SelectedIndex:=18;
    end;
      

  9.   

    JonHua(玉龙) 兄弟,你的程序,怎么出现图片重叠的现象