[Delphi] Customizando um TTreeNode

Fala galera, beleza?

Hoje eu trago para vocês uma forma simples e objetiva de adicionar e manipular propriedades adicionais aos nós de um TreeView.

A classe TTreeView é um dos componentes visuais da aba Win32. Esse componente representa uma estrutura organizada em níveis de profundidade, criado uma relação de “nós pai e nós filhos”.

Visualmente ela lembra uma árvore e provavelmente foi daí que o nome saiu, hehe.

TTreeNode

TTreeNode é a classe que dá suporte à coleção de itens de um TTreeView. Podem ser acessados através da propriedade Items: MyTreeView.Items.

Estendendo a classe TTreeNode nós podemos aproveitar o seu comportamento e então adicionar as nossas particularidades.

A classe TCustomNode

Eu utilizei o recurso de herança da POO para criar uma classe chamada TCustomNode. Nessa classe, adicionei algumas propriedades que julguei serem necessárias para resolver o meu problema. O nome da classe não é uma regra. A mesma classe poderia ter o nome de TBanana ou TItemFinanceiro. Com isso, temos toda a liberdade de adicionar ou remover propriedades e ainda assim, aproveitar as vantagens de um TTreeNode.

Populando a árvore de nós e manipulando as propriedades customizadas.

Implementei um simples método chamado Supply para criar e alimentar os nós da nossa TreeView. Utilizei uma variável do tipo TCustomNode para poder manipular as suas propriedades.

O método AddNode é responsável por adicionar e “aninhar” os nós dentro da estrutura de árvore. O primeiro parâmetro é o nó a ser adicionado. O segundo, é o relativenode, ou seja, o nó “pai” do novo nó adicionado. O terceiro é a string de exibição do novo nó (texto a ser apresentado na estrutura). O quarto parâmetro representa um ponteiro que pode ser atrelado ao nó que está sendo adicionado. Essa pratica do ponteiro é bastante eficaz, mas exige um tratamento e uso de técnicas um pouco mais complexas. E por último, porém não menos importante, temos o NodeAttachMode. O quinto parâmetro determina a forma em que o novo nó será tratado no momento da “adição” à lista de nós.

Graças ao polimorfismo, foi possível utilizar um objeto do tipo TCustomNode no método AddNode.

Feito isso, temos uma rotina que cria um nó principal (nó pai) e que também cria nós filhos do tipo TCustomNode, manipula suas propriedades únicas e os adiciona na estrutura de árvore como filhos do nó principal.

Imagem treeview
Estrutura final da TreeView

Aplicabilidade

Podemos aplicar este recursos em dezenas de casos diferentes. Eu mesmo já tive a oportunidade de operar sistemas que não utilizavam menus convencionais (TMainMenu), mas sim uma estrutura em árvore (criada com uma treeview) que representava os menus disponíveis para navegação.

Na prática

Implementei o evento OnChange da nossa TTreeView de exemplo, confira:

Eu  utilizei um simples typecast para capturar o nó “alvo” do evento e transforma-lo em TCustomNode. Verifiquei se ele realmente é do tipo esperado e manipulei os elementos do meu formulário conforme as propriedades do nó selecionado.

É possível aproveitar este recurso e criar telas dinamicamente, alterar títulos, aplicar filtros e outras coisas.

Uma resposta para “[Delphi] Customizando um TTreeNode”

Deixe uma resposta para Paulo Danilo Farina Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *