Buscar

Treeview exibindo plano de contas ou menu

Código

{Para exibir um plano de contas ou menu utilizando banco de dados com o TreeView pode-se utilizar o código abaixo sendo necessário somente um campo com a sua classificação para montagem.
Ex.
Classif.    Descrição
1           ATIVO
11          ATIVO CIRCULANTE
111         DISPONIVEL
11101       CAIXA  
111010001   FINANCEIRO
}



procedure TfrmCadPermissao.Button2Click(Sender: TObject);
var
  index     : Integer;                   {Número sequencial para criação dos itens}
  intLen1   : Integer;                   {Guarda o tamanho da conta de classificação - atual}
  intLen2   : Integer;                   {Guarda o tamanho da conta de classificação - anterior}
  intPosIni : Integer;                   {Determina o tamanho da conta primeira conta de classificação}

  MyNode    : Array[0..10] of TTreeNode; {Matriz que guarda a posição dos níveis}
  NodeSup   : TTreeNode;                 {Node - da Raiz Principal}
  NodeTmp   : TTreeNode;                 {Node - temporaria}

  strTexto  : String;                    {Obtem o nome da conta de classificação}

begin
  inherited;
  TreeView1.Items.Clear;
  index := -1;

  strgSQLTmp  := '';
  strgSQLTmp  := strgSQLTmp + 'SELECT ds_classificacao = rtrim(ltrim(cd_classificacao)),';
  strgSQLTmp  := strgSQLTmp + '       ds_texto         =  descricao ';
  strgSQLTmp  := strgSQLTmp +   'FROM escplano where cd_empresa = 1 order by cd_classificacao ';

  qry_permissao.Close;
  qry_permissao.SQL.Text := strgSQLTmp;
  qry_permissao.Open;
  qry_permissao.First;

  //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  //Inicializacao
  NodeTmp   := nil;
  NodeSup   := nil;
  intLen2   := 0;
  intPosIni := 1;  {numero de digitos da primeira conta de classificação "Plano de contas" que será utilizada como Nó principal no Treeview }

  //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
  //Inicializa a Array que guarda os Nos que determina o grau do plano de contas.
  for intlen1 := 0 to 10 do
    begin
      MyNode[intLen1] := NodeTmp;
    end;
  //

  //Percorre a pesquisa para monta o TreeView
  while not qry_permissao.Eof do
    begin
      //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
      intLen1   := length(qry_permissao.FieldByName('ds_classificacao').AsString);
      strTexto  := qry_permissao.FieldByName('ds_texto').AsString;
      index     := index + 1;

      //¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
      //Contralo a criação do nivel principal
      if intLen1 = intPosIni then
        begin
          MyNode[intLen1] := NodeTmp;
          if intLen2 = 0  then
            begin
              NodeSup := treeview1.Items.Add(nil, strTexto);
              index   := index - 1;
            end
          else
            treeview1.Items.Add(NodeSup, strTexto);
          //
        end
      else
        begin
          if intLen1 > intLen2 then
            begin
              NodeTmp         := TreeView1.Items[index];
              MyNode[intLen2] := NodeTmp;
              treeview1.Items.AddChild(TreeView1.Items[index], strTexto);
            end
          else if intLen1 < intLen2 then
            begin
              NodeTmp := TreeView1.Items[index];
              treeview1.Items.Add(MyNode[intLen1],strTexto);
            end
          //
          else if intLen1 = intLen2 then
            begin
              NodeTmp := TreeView1.Items[index];
              MyNode[intLen1] := NodeTmp;

              treeview1.Items.Add(TreeView1.Items[index], strTexto);
            end;
          //
        end;
     //

     if intLen1 <> intLen2 then
       begin
         intLen2 := intLen1;
       end;
     //

     //Avança para o próximo registro
     qry_permissao.Next;
    end;
  //
end;

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Object pascal
Adicionada dia: 21/12/09
Por: Julio Cesar Domingues
Visualizada: 19245 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009