Montando telas de cadastro dinamicamente

 

Montar telas é uma tarefa trabalhosa que toma muito tempo dos programadores. Acho muito mais interessante utilizar de mecanismos que façam isso automaticamente para nós.

Mostrarei como criar um procedimento, que receberá como parâmetro o nome de um DataSource e, através disso criará uma tela com campos para cadastro e um DBNavigator. No exemplo, utilizarei o banco dbdemos.gdb, acessando via DBExpress e utilizando a tabela Country. Você pode utilizar o InterBase ou Firebird.

Sei que o acesso já foi visto em vários artigos, mas, como digo para meus alunos: sempre é bom relembrar.

Inicie uma nova aplicação, coloque e configure os seguintes componentes:

 

SqlConnection (Paleta DBExpress)

-Mude a propriedade LoginPrompt para False

-Clique duas vezes sobre o mesmo

-Clique no botão “mais” (+). Escolha para DriverName Interbase e de ConnectionName informe DBDemos

-Configure os parâmetros conforme a Figura 1.

 

Figura 1. Configuração dos parâmetros de acesso ao banco de dados

SqlDataSet (Paleta DBExpress)

-Mude a propriedade SQLConnection para SqlConnection1

-CommandType para ctTable

-CommandText para COUNTRY

 

DataSetProvider (Paleta Data Access)

-Mude a propriedade DataSet para SqlDataSet1

 

ClientDataSet (Paleta Data Access)

-Mude a propriedade ProviderName para DataSetProvider1

-Clique duas vezes sobre o componente

-No FieldEditor (tela que se abriu quando clicou duas vezes), clique com o botão direito do mouse (abrindo o menu de contexto) e escolha Add fields... (ou CTRL+A). Nesse momento serão adicionados os campos existentes na tabela Country.

 

Altere a propriedade DisplayLabel de cada campo, fazendo a tradução para nosso idioma. (Name-Nome, Capital-Capital, Continent-Continente, Area-Área, Population-População). Façamos isso, pois utilizaremos essa propriedade como o Caption dos campos que iremos montar dinamicamente.

 

DataSource (Paleta Data Access)

-Mude a propriedade DataSet para ClientDataSet1

 

Colocado e configurado os componentes vamos ao código. Declare o seguinte procedimento na seção public:

 

procedure Monta(vDataSource: TDataSource);

 

Pressione SHIFT+CTRL+C para que o Delphi crie o escopo do procedimento. Digite o seguinte código para o procedimento:

 

var

  i,c, altura: integer;

  Textos: Array[1..10] of TLabel;

  Campos: Array[1..10] of TDBEdit;

  Botoes: TDBNavigator;

begin

  c := 1;

  altura := 10;

  for i := 1 to vDataSource.DataSet.Fields.Count-1 do

  begin

    //Abrindo o ClientDataSet

    vDataSource.DataSet.Open;

    //Colocando os Labels

    Textos[c] := TLabel.Create(Form1);

    Textos[c].Parent := Form1;

    Textos[c].Left := 40;

    Textos[c].Top := altura;

    Textos[c].Width := 50;

    Textos[c].Height := 13;

    Textos[c].Caption := vDataSource.DataSet.Fields[c].DisplayLabel;

    //Aumentando a altura

    Altura := altura + 15;

    //Colocando os DBEdits

    Campos[c] := TDBEdit.Create(Form1);

    Campos[c].Parent := Form1;

    Campos[c].Left := 40;

    Campos[c].Top := altura;

    Campos[c].Width := 100;

    Campos[c].Height := 21;

    Campos[c].DataField := vDataSource.DataSet.Fields[c].FieldName;

    Campos[c].DataSource := vDataSource;

    Campos[c].TabOrder := c;

    //Aumentando a altura

    Altura := altura + 35;

    //Aumentando contador

    c := c+1;

  end;

  //Colocando o DBNavigator

  Botoes := TDBNavigator.Create(Form1);

  Botoes.Parent := Form1;

  Botoes.Left := 40;

  Botoes.Top := altura;

  Botoes.Width := 240;

  Botoes.Height := 25;

  Botoes.DataSource := vDataSource;

  Botoes.Flat := True;

  Botoes.TabOrder := c;

end;

 

A idéia do procedimento é ter arrays para os Labels e DBEdits que serão montados no formulário. Para controlar a posição de altura existe uma variável que é incrementada. Para por o software em funcionamento clique duas vezes no Form e no evento OnCreate coloque a chamada do procedimento:

 

Monta(DataSource1);

 

Veja o software em funcionamento:

 

Figura 2. Software com a tela montada dinamicamente