Imagem no ultimo nivel do treeview

Delphi

04/03/2011


Galera, consegui colocar uma imagem no ultimo nível do meu treeview, mas quando clico no nivel acima onde a imagem não deveria aparecer, a imagem aparece assim como mostra a figura acima.

Estou usando um imagelist ligado ao treeview e no evento show do pagecontrol que o treeview é preenchido de acordo com o código abaixo:

procedure TFormDlgEFD.tbResultadoShow(Sender: TObject);
var
  i,x, ind : Integer;
  stLinha, nota, titulo : String;
begin
  // 1º Nó         -> Contém os números da nota
  //    Nós filhos -> Testes referentes áquela nota
  trvResultado.Images := Situacao01;
  ClearTree;
    for i := 0 to AnaliseEFD1.Cruzamentos.Count-1 do
    begin
      if i mod 3 = 0 then
         Inc(x);
      AnaliseEFD1.Cruzamentos.ItemCruzamento[i].Documento.NumeroDocumento := FormatFloat('000', x);
    end;

  stLinha := 'Análise de Sped Fiscal 2011 - Teste Executado em '+ DateToStr(Date);
  trvResultado.Items.Add(nil,stLinha);
  i := 0;
  nota := '';
  while i < AnaliseEFD1.Cruzamentos.Count  do
  begin
     if (nota = '') or ( AnaliseEFD1.Cruzamentos.ItemCruzamento[i].Documento.NumeroDocumento <> nota ) then
     begin
        nota := AnaliseEFD1.Cruzamentos.ItemCruzamento[i].Documento.NumeroDocumento;
        trvResultado.Items.AddChild(trvResultado.Items[0],nota);
        ind := trvResultado.Items[0].Count - 1;
        trvResultado.Items.Item[0].SelectedIndex := ind;
        trvResultado.Items[0].Item[ind].ImageIndex := 2;
     end;
     AnaliseEFD1.Regras.ItemSelecionado := AnaliseEFD1.Cruzamentos.ItemCruzamento[i].NrRegra;
     titulo := AnaliseEFD1.Regras.RegraAtual.ID + ') ' + AnaliseEFD1.Regras.RegraAtual.Regra;
     trvResultado.Items.AddChild(trvResultado.Items[0].Item[ind],titulo);
     trvResultado.Items[0].ImageIndex := 2;
     trvResultado.Items[0].Item[ind].ImageIndex := 2;
     trvResultado.Items.Item[0].SelectedIndex := ind;
     Inc(i);
  end;
end;

A questão é qua a imagem não deveria aparecer no nivel 001. Espero uma ajuda.
Jordelino Santos

Jordelino Santos

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

04/03/2011

No evento GetImageIndex da sua TreeView, coloque:
var
  idxImagem: integer;
begin
  idxImagem := -1;
  if  not Node.HasChildren then
      idxImagem := 0 { Coloque aqui o indice da sua imagem }
  ;

  Node.ImageIndex    := idxImagem;
  Node.SelectedIndex := idxImagem;
  Node.StateIndex    := idxImagem;
end;


Isto é só para vc ter uma idéia...

Espero ter colaborado.
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

04/03/2011

não entendi muito bem a situação, mas creio que deva estar aparecendo a imagem por conta da instrução das linhas:

trvResultado.Items[0].Item[ind].ImageIndex := 2;


veja da forma abaixo o resultado é o esperado:

procedure TFormDlgEFD.tbResultadoShow(Sender: TObject);
var
  i, x, ind : Integer;
  stLinha, nota, titulo: string;
  tvItem1, tvItem2: TTreenode;
begin
  // 1º Nó         -> Contém os números da nota
  //    Nós filhos -> Testes referentes áquela nota

  trvResultado.Images := Situacao01;
  trvResultado.Items.BeginUpdate; // prepara a treeview para atualizações

  trvResultado.Items.Clear; // limpa os itens da treeview
 
  for i := 0 to AnaliseEFD1.Cruzamentos.Count-1 do
  begin
    if i mod 3 = 0 then
      Inc(x);
    AnaliseEFD1.Cruzamentos.ItemCruzamento[i].Documento.NumeroDocumento := FormatFloat('000', x);
  end;

  stLinha := 'Análise de Sped Fiscal 2011 - Teste Executado em '+ DateToStr(Date);
  trvResultado.Items.Add(nil,stLinha); // item 0

  i := 0;
  nota := '';

  while i < AnaliseEFD1.Cruzamentos.Count do
  begin
    if (nota = '') or (AnaliseEFD1.Cruzamentos.ItemCruzamento[i].Documento.NumeroDocumento <> nota) then
    begin
      nota := AnaliseEFD1.Cruzamentos.ItemCruzamento[i].Documento.NumeroDocumento;
      tvItem1 := trvResultado.Items.AddChild(trvResultado.Items[0],nota);
    end;
    AnaliseEFD1.Regras.ItemSelecionado := AnaliseEFD1.Cruzamentos.ItemCruzamento[i].NrRegra;
    titulo := AnaliseEFD1.Regras.RegraAtual.ID + ') ' + AnaliseEFD1.Regras.RegraAtual.Regra;
    tvItem2 := trvResultado.Items.AddChild(tvItem, titulo);
    tvItem2.ImageIndex := 2;
    tvItem2.SelectedIndex := 2;
    Inc(i);
  end;

  trvResultado.Items.EndUpdate; // aplica as atualizações efetuadas na treeview

end;
GOSTEI 0
Jordelino Santos

Jordelino Santos

04/03/2011

Quero agradecer ao Emerson e ao Lehapan. Funcionou.
GOSTEI 0
POSTAR