如果我想把Treeview展开的时候,节点显示一种图标,如果折叠起来的时候,节点显示另一种图标,应该怎么做?

解决方案 »

  1.   

    看delphi自带例子 D:\Delphi7\Demos\CustomDraw
      

  2.   

    procedure TPublicClass.TreeViewAddT(MFieldStr, DFieldStr,
      TableNameValue: String; Sender: TTreeView; ImageValue: TImageList);
    var
      PNode , CNode : TTreeNode;
      I : Integer;
    begin
      Sender.Items.Clear;
      Sender.Images := ImageValue;
      With DataModuleFrm.Temp1ADOQuery do
      begin
        if Active then
          Active := False;
        SQL.Clear;
        SQL.Add('Select Distinct ' + MFieldStr + ' from ' + TableNameValue);
        Prepared;
        Open;
        First;
        While Not Eof do
        begin
          PNode := Sender.Items.AddChild(Nil,Trim(FieldByName(MFieldStr).AsString));
          PNode.ImageIndex := 0;
          if PNode.Level = 1 then
          begin
            PNode.ImageIndex := 2;
            Pnode.StateIndex := 4;
          end; {}
          Next;
        end;
      end;
      With DataModuleFrm.LSB_ADOQuery do
      begin
        Sender.SetFocus;
        For I := Sender.Items.Count -1 DownTo 0 do
        begin
          PNode := TTreeNode.Create(Nil);
          PNode := Sender.Items[I];
          if Active then
            Active := False;
          SQL.Clear;
          SQL.Add('Select ' + DFieldStr + ' from ' + TableNameValue + ' Where ' +
            MFieldStr + ' = ' + #39 + Sender.Items[I].Text + #39);
          Prepared;
          Open;
          First;
          While Not Eof do
          begin
            CNode := Sender.Items.AddChild(PNode,Trim(FieldByName(DFieldStr).AsString));
            CNode.ImageIndex := 1;
            if PNode.Level = 1 then
            begin
              PNode.ImageIndex := 2;
              Pnode.StateIndex := 4;
            end;{}
            Next;
          end;
        end;
      end;
    end;
    ---------------------
    沉沦中......