Artigo Clube Delphi 78 - Criando formulários dinamicamente a partir de registros em um BD

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (1)  (0)

A partir dos exemplos mostrados neste artigo, desenvolveremos um componente que fará a conexão a um banco de dados que contém os registros dos controles a serem criados no novo formulário, bem como uma aplicação exemplo desse novo componente.

 

Esse artigo faz parte da revista Clube Delphi Edição 78. Clique aqui para ler todos os artigos desta edição

Win32

Criando formulários dinamicamente a partir de registros em um BD

 

Um dos recursos interessantes na linguagem Pascal é a possibilidade de criar controles mesmo quando não sabemos de qual classe iremos instanciar. Através desse recurso, podemos entender a forma pela qual o Delphi trabalha em seu ambiente integrado de desenvolvimento quando clicamos em um SpeedButton da paleta de componentes e em seguida no formulário onde desejamos adicionar o mesmo.

A partir dos exemplos mostrados neste artigo, desenvolveremos um componente que fará a conexão a um banco de dados que contém os registros dos controles a serem criados no novo formulário, bem como uma aplicação exemplo desse novo componente.

 

Preparação do banco de dados

Antes de começarmos a criar o componente, precisamos fazer as configurações necessárias no banco de dados, como criar as tabelas do “Dicionário de Formulários” e as tabelas que farão parte do sistema propriamente dito, que utilizaremos como teste para criar os controles desejados.

O banco de dados escolhido foi o Firebird, por ser gratuito e de fácil conexão através da tecnologia dbExpress. Chamaremos o conjunto de tabelas responsáveis pelos registros dos formulários dinâmicos como Dicionário de Formulários, representado por duas tabelas: “Formulario” e “Controle”.

Na tabela Formulario incluiremos os campos principais para a criação do formulário e na Controle, como o nome sugere, incluiremos os campos para a criação dos controles do formulário.  Na Listagem 1 temos o código para criação das tabelas.

 

Listagem 1. Código de criação das tabelas

CREATE TABLE FORMULARIO (

  IDFORMULARIO INTEGER NOT NULL PRIMARY KEY,

  NOME VARCHAR(30) NOT NULL,

  FORMWIDTH INTEGER,

  FORMHEIGHT INTEGER,

  CAPTION VARCHAR(60)

);

 

CREATE TABLE CONTROLE (

  IDCONTROLE INTEGER NOT NULL,

  IDFORMULARIO INTEGER NOT NULL

    REFERENCES FORMULARIO(IDFORMULARIO),

  ORDEM INTEGER,

  DISPLAYLABEL VARCHAR(50),

  FIELD VARCHAR(50),

  CONTROL VARCHAR(50),

  FIELDMASK VARCHAR(40),

  VISIBLE CHAR(1),

  FIELDTYPE VARCHAR(20),

  FIELDKIND VARCHAR(20),

  LOOKUPTABLE VARCHAR(50),

  KEYFIELDS VARCHAR(40),

  LOOKUPKEYFIELDS VARCHAR(40),

  LOOKUPRESULTFIELD VARCHAR(40),

  CONTROLWIDTH INTEGER,

  CONTROLHEIGHT INTEGER

)

 

Nesse ponto, precisamos entender a necessidade dos campos da tabela Controle:

·         Ordem: será a ordem na qual o controle será criado;

·         DisplayLabel: para as classes TField será criado um Label adicional para mostrar o título do campo, para os demais controles visuais será utilizado para configurar o Caption;

·         Field: representa o campo da tabela;

·         Control: representa o controle a ser criado para aquele campo;

·         FieldMask: a máscara atribuída ao campo;

·         FieldType: pode ser ftInteger para campos do tipo inteiro ou ftString para campos do tipo string;

·         FieldKind: o tipo do campo, no nosso exemplo utilizaremos fkData e fkLookup;

·         LookupTable: para o FieldKind do tipo fkLookup, se faz necessário configurar qual tabela será utilizada para a pesquisa, bem como KeyFields, LookupKeyFields e LookupResultField;

·         ControlWidth e ControlHeight: servem para especificar a largura e a altura respectivamente.

O próximo passo é incluir os registros nas tabelas criadas anteriormente, conforme a Listagem 2.

 

Listagem 2. Código para inserção dos dados

INSERT INTO FORMULARIO VALUES (1,'CLIENTE', 450, 450,

  'Cadastro de Clientes');

INSERT INTO CONTROLE VALUES (1, 1, 1, NULL, NULL,

  'TDBNavigator', NULL, 'S', NULL, NULL, NULL, NULL,

"

A exibição deste artigo foi interrompida :(
Este post está disponível para assinantes MVP

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?