我的菜单转树代码如下,但是怎么设置成没有子节点的节点都是显示第3张图片,有子节点的节点收缩时显示第1张图片,展开时显示第2张图片,就像CSDN 论坛左边的树菜单?
function   Tfrmmain.InitMenu(MainMenu:   TMainMenu;   ItemsOwner:   TTreeView):   TTreeNodes;
      procedure   lop(SubMenu:TMenuItem;var   TreeItem:TTreeNodes;SubNode:TTreeNode);
      var
          SCount,Slop:integer;
          SSubNode:TTreeNode;
      begin
          SCount   :=   SubMenu.Count;
          For   Slop   :=   1   to   SCount   do
          begin
              if SubMenu.items[Slop-1].Caption='-' then break;
              SSubNode   :=   TreeItem.AddChild(subNode,SubMenu.items[Slop-1].Caption);
              SSubNode.StateIndex   :=   1;
              Lop(SubMenu.Items[Slop-1],TreeItem,SSubNode);
          end;
      end;
  var
      RetuMenu:TTreeNodes;
      SubItem,ParentItem:TTreeNode;
      MenuCount,lops:integer;
  begin
      Result   :=   nil;
      RetuMenu   :=   TTreeNodes.Create(ItemsOwner);
      ParentItem   :=   RetuMenu.AddFirst(nil,'系统菜单');
      ParentItem.ImageIndex:=0;
      parentitem.SelectedIndex:=1;
          MenuCount   :=   MainMenu.Items.Count;
          for   lops   :=   0   to   MenuCount-1   do
          begin
              SubItem   :=   RetuMenu.Addchild(ParentItem,MainMenu.Items[lops].Caption);
              SubItem.StateIndex   :=   1;
              lop(MainMenu.Items[lops],RetuMenu,SubItem);
          end;
          Result   :=   RetuMenu;
  end;

解决方案 »

  1.   

    procedure TForm1.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
    begin
      if Node.HasChildren then
        Node.ImageIndex := 3
      else
      begin
        if Node.Expanded then
          Node.ImageIndex := 2
        else
          Node.ImageIndex := 1;
      end;
    end;
      

  2.   

    etomahawk兄,用下面代码不行啊
    procedure Tfrmmain.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
    begin
      if Node.HasChildren=false then
        Node.ImageIndex := 2
      else 
      begin 
        if Node.Expanded then 
          Node.ImageIndex := 1
        else 
          Node.ImageIndex := 0;
      end;
    end;
      

  3.   

    有什么问题?
    你在下面调用一下TreeView1.Update方法再试试。
      

  4.   

    我初始的状态是所有节点都显示图像0.
    按上面的方法展开节点遇到的问题是:
    当点父节点的时候,图片1和图片0重叠,而没有子节点的node图像没有发生变化,还是显示图片0.只有点击最末节点时才改变成图片2.
      

  5.   

    TreeView有的Item图标有两个属性的
    一个是未选中状态  Node.ImageIndex := X;
    一个是选中状态的图标  Node.SelectedIndex := X;例如:
      if SSubNode.HasChildren = false then 
      begin
        SSubNode.ImageIndex := 2; 
        SSubNode.SelectedIndex := 2;
      end;两个都给写上去,这样点跟没点,展开跟没展开就不会乱了
      

  6.   


    楼上兄弟,用下面代码出现错误
    procedure Tfrmmain.TreeView1Expanded(Sender: TObject; Node: TTreeNode);
     VAR
     SSubnode:TTreeNode;
    begin
      if SSubnode.HasChildren=false then
       SSubnode.ImageIndex := 2
       SSubnode.SelectedIndex := 2
      else
      begin
        if SSubnode.Expanded then
          SSubnode.ImageIndex := 1
          SSubnode.SelectedIndex :=1
          else  
          SSubnode.ImageIndex := 0;
          SSubnode.SelectedIndex :=0;
      end;end;
    错误如下:
    [Error] mainform.pas(489): Missing operator or semicolon
    [Error] mainform.pas(494): Missing operator or semicolon
    [Fatal Error] ZHGLXT.dpr(22): Could not compile used unit 'mainform.pas'
      

  7.   

    TreeView的Item图标设置就是这两个了,其他的你再看看是不是还有其他地方写错吧
      

  8.   

    不是意思,打错字了,是:少了begin  end