[Delphi] Visualizador de DataSets com Open Tools API – Formulário

Voltei, pessoal!
Até o momento, já aprendemos como registrar um wizard na IDE do Delphi e avaliar uma expressão (Evaluate) automaticamente utilizando as Interfaces do Open Tools API. Em continuidade, a terceira parte do artigo visa a codificação do formulário que exibirá os dados do DataSet. Estamos quase finalizando a série!

Criando o formulário para exibição dos dados

Neste artigo, em especial, não abordaremos outras Interfaces do Open Tools API. Hoje, o objetivo é utilizar a orientação a objetos para desenhar um formulário dinamicamente com apenas quatro componentes: TForm, TDBGrid, TClientDataSet e TDataSource. Faremos a ligação entre esses componentes para exibir o formulário com os dados do arquivo gerado pelo método Evaluate, apresentado na segunda parte da série. Os desenvolvedores que já estão familiarizados com a criação de objetos em tempo de execução não terão dificuldades.

Primeiro, precisamos declarar o método AbrirVisualizador que será chamado pelo Execute ao acionar o menu:

Partiremos, então, para a implementação deste método, iniciando pela criação de um formulário maximizado que será o “dono” dos outros componentes:

O próximo passo é criar o TClientDataSet:

Assim como o artigo anterior, utilizaremos o namespace System.IOUtils para buscar o arquivo gerado e carregá-lo no DataSet com o método LoadFromFile:

Em seguida, associaremos o DataSet a um componente TDataSource:

Por último, criaremos um componente TDBGrid que será conectado ao objeto DataSource. Além disso, para melhorar a visualização, julgo importante configurar a Grid para ocupar toda a área do formulário.

Para concluir, basta exibir o formulário:

Hora de juntar tudo!

Com as codificações apresentadas no artigo, teremos a rotina a seguir. Adicionei alguns comentários para melhorar a compreensão e também envolvi o código em uma estrutura try/finally para garantir que o formulário seja liberado da memória após fechado.

Ao compilar o pacote, a mensagem abaixo provavelmente será exibida, informando que alguns pacotes adicionais serão importados por questões de compatibilidade. Estes pacotes estão relacionados com as units que referenciamos na seção uses. Apenas confirme a importação para prosseguir.

Mensagem de confirmação para importação de pacotes adicionais

Hora de testar!

Já que codificamos o método AbrirVisualizador, podemos remover o comentário da linha que o chama no método Execute:

Para testar, segui o mesmo procedimento do artigo anterior, criando um novo projeto e adicionando um TClientDataSet no formulário. Porém, dessa vez, carreguei um arquivo de dados da pasta de exemplos do RAD Studio, chamado “customer.xml”, para simular uma massa de dados real.

Primeiro, selecionei o DataSet em runtime  no editor de código:

DataSet selecionado no Code Editor do Delphi

Em seguida, acessei o menu Help > Help Wizards > Visualizar DataSet para executar a ação do wizard. Confiram o resultado:

Formulário criado pelo wizard para visualização de dados do DataSet

Impressionante, não?
Garanto que este recurso irá ajudá-los em várias ocasiões! 🙂

Missão cumprida?

Ainda não, pessoal.

Eventualmente, ao acionar a funcionalidade repetidas vezes, talvez você receba a seguinte mensagem de erro:

Mensagem de conflito de acesso ao arquivo

Este evento pode ocorrer em função do tempo dispendido pelo depurador para a avaliação da expressão. Alguns fatores influenciam nessa operação, como a quantidade de registros do DataSet, a memória consumida pelo depurador na parada do breakpoint e até mesmo os recursos disponíveis do sistema operacional, portanto, o tempo é bem relativo.

Por consequência, é possível que, ao abrir o formulário para visualização dos dados, o arquivo ainda esteja sendo gerado na avaliação da expressão. Em termos mais técnicos, no evento em que o nosso wizard carrega o arquivo através do LoadFromFile (no formulário de visualização de dados), o SaveToFile ainda está em processamento (no método Execute).

Resolveremos este problema na quarta e última parte deste artigo!
Até breve!


[Delphi] Visualizador de DataSets com Open Tools API – Pacote
[Delphi] Visualizador de DataSets com Open Tools API – Evaluate
[Delphi] Visualizador de DataSets com Open Tools API – Formulário
[Delphi] Visualizador de DataSets com Open Tools API – Notificador


André Celestino