Virtual TreeView
Sofistique suas aplicações com um TreeView profissional
A interface de um aplicativo sempre foi um fator determinante no sucesso ou no fracasso de um projeto. De nada adianta um código complexo rodando nos bastidores se a parte visual da aplicação não agradar o “todo-poderoso” usuário. E interagir corretamente com este “ser”, através de controles que tornem a utilização da aplicação mais fácil e intuitiva, pode determinar se você irá receber um email de elogio ou um telefonema mal-educado.
Uma boa maneira de se criar interfaces intuitivas e fáceis de utilizar é seguindo os padrões das grandes empresas de software, como a Microsoft, por exemplo. E esta companhia usa e abusa dos componentes que seu sistema operacional oferece, como o TreeView. O problema deste controle nativo é que ele não oferece muitas opções, tanto de flexibilidade quanto de apresentação. É aí que entra o componente que dá nome a este artigo: VirtualTreeView.
O componente
Criado em 2000 por Mike Lischke, este controle impressiona pela quantidade de recursos, onde a maioria absoluta não existe na opção do Windows. Coisas simples, como exibir checkboxes para cada item, ordenar os dados etc., que exigiriam certo esforço para codificar, estão ao alcance de meras propriedades. Para o leitor ter uma idéia da qualidade deste componente, basta saber que ele foi escolhido pela Borland para compor o IDE da versão 2005/2006 do Delphi. Vamos ver neste artigo as características mais importantes deste componente, que pode dar uma aparência extremamente profissional as suas aplicações.
Baixando e instalando
Acesse o site www.delphi-gems.com/VirtualTreeview/VT.php e baixe o instalador do componente. Certifique-se de ter o Delphi fechado antes de executá-lo. O programa de instalação irá criar automaticamente no registro uma entrada para a BPL necessária. O instalador possui versões para Delphi 4 a 2005 (e até você ler isso provavelmente para 2006) e C++ Builder 4 a 6. Abra o Delphi após o processo e veja a nova paleta adicionada (Figura 1). Observe que há três componentes: VirtualStringTree, VirtualDrawTree e VTHeaderPopupMenu. Neste artigo focaremos principalmente o VirtualStringTree.
Figura 1. Paleta Virtual Controls
Antes de começar: ponteiros
Um pré-requisito essencial para se poder trabalhar corretamente com o VirtualTreeView é conhecer sobre ponteiros. Um ponteiro denota um endereço de memória, armazenando o endereço de outra variável. Dizemos que ele aponta para o local daquela variável, ou para os dados armazenados por ela. Para se declarar um ponteiro de um tipo de dados, usa-se a seguinte sintaxe:
type NomeDoPonteiro = ^TipoDeDado
Isso quer dizer que NomeDoPonteiro representa ponteiros para variáveis do tipo TipoDeDado. O símbolo (^) também tem outra função. Se colocado no final do nome de uma variável do tipo de um ponteiro, ele “de-referencia” (em uma tradução literal de dereferences) o ponteiro, isto é, retorna o valor contido no endereço da memória armazenado por ele. Veja o código na Listagem 1:
Listagem 1. Exemplo de ponteiro
var
S1, S2: string;
P: ^string;
begin
{ S1 recebe um valor }
S1 := 'ClubeDephi';
{ P aponta para o endereço de S1 }
P := @S1;
{ S2 recebe o valor armazenado no endereço salvo
por P }
S2 := P^;
end;
O código anterior copia o valor de S1 em S2. Ou seja, simplesmente S1 := S2. Ponteiros são úteis por diversas razões. Em primeiro lugar, entendê-los irá ajudar você a compreender melhor a Delphi Language, uma vez que ponteiros quase sempre atuam implicitamente em qualquer código que você escreva. Além disso, tipos de dado que precisam de blocos grandes e dinâmicos de memória usam ponteiros. Isso vale para strings longas, como PChar e PWideChar, Algumas técnicas avançadas de programação, como API Hooking, vista até a edição anterior, fazem uso extensivo de ponteiros.
A interface da aplicação
Para começarmos a estudar o componente, vamos montar a interface da aplicação. Adicione no formulário principal de uma nova aplicação, inicialmente, os seguintes controles: um VirtualStringTree (“tvAgenda”), quatro LabeledEdit, um ComboBox, um Label e três Button. Organize-os no formulário conforme a Figura 2.
Figura 2. Interface da aplicação
Definindo uma estrutura de dados
O VirtualTreeView opera da seguinte forma: define-se a estrutura a ser armazenada, e só a preenchemos quando o seu elemento associado for acessado. Tal estrutura pode ser qualquer coisa referenciável através de um ponteiro. Portanto, tipos primitivos, records, arrays, objetos etc.
Tudo praticamente pode ser associado a um elemento dentro do componente. Como já mencionado, isso dá ampla flexibilidade para nós, desenvolvedores. Adicione uma nova unit ao projeto existente, vá ao Code Editor e na seção type da unit digite o código da "
[...] continue lendo...