Criando Form Padrão: Herança: Aplicação Completa - Delphi, Firebird e TcxScheduler

Neste artigo iremos trabalhar com o desenvolvimento de uma tela padrão de cadastro de registros, com o objetivo de facilitar o input de dados na aplicação que iremos criar usando Delphi 2010, firebird 2.1 e o componente TcxScheduler. A criação de uma tela padrão tem a intenção de usar o conceito de herança, o qual é um facilitador enorme quando se fala em tempo e produtividade de desenvolvimento.

Olá Galera, hoje estaremos trabalhando como conceito de herança no Delphi 2010. Será esse um trabalho muito interessante,pois elimina a necessidade de se trabalhar com códigos iguais repetidas vezes.

O objetivo principal de se fazer o Form Padrão de nosso artigo é eliminar todo o código necessário para realizar o cadastro, edição e exclusão dos registros do banco de dados.

Vamos, então, dar início ao nosso aplicativo. Crie um novo projeto. Vá te File > New > VCL FormsApplication – Delphi. Salve o formulário como FrmPrincipal e o Projeto comoProjTcxScheduler.

Criaremos, em seguida, um Form padrão que possuirá os seguintes componentes (File > New > Form – Delphi):

Primeiro, adicione o componente da Classe TToolBar e dê o Nome de TBPadrao a ele. Adicione 10 (dez) botões neste componente e dê a eles os seguintes Captions / Nomes, na seguinte ordem:

  1. Novo – BtnNovo;
  2. Gravar – BtnGravar;
  3. Editar – BtnEditar;
  4. Deletar –BtnDeletar;
  5. Cancelar –BtnCancelar;
  6. Pesquisa –BtnPesquisa;
  7. Primeiro –BtnPrimeiro;
  8. Anterior –BtnAnterior;
  9. Posterior –BtnPosterior;
  10. Último – BtnUltimo;

Adicione agora ocomponente TImageList e selecione 10 ícones de sua preferência:

Vá até a propriedade images do TBPadrao e aponte para ILPadrao. Depois vá até a propriedade List do TBPadrao.

Agora, coloque um componente da classe TPanel, edite a propriedade caption e arrume o design do form da forma que desejar.

Adicione um componente da classe TDataSource e nomeie como DSPadrao.

Com a tela pronta, basta agora, adicionar os comandos para os botões:

Dê um duplo clique sobre o botão Novo e adicione o comando abaixo:

DSPadrao.dataset.insert;

Dê um duplo clique sobre o botão Gravar e adicione o comando abaixo:

DSPadrao.dataset.post; DSPadrao.dataset.filtered := false;

Dê um duplo clique sobre o botão Editar e adicione o comando abaixo:

DSPadrao.datset.edit;

Dê um duplo clique sobre o botão Deletar e adicione o comando abaixo:

if MessageDlg('Deseja Excluir o Registro', mtconfirmation, [mbYes, mbNo], 0) = mrYes then Begin DSPadrao.dataset.delete; End;

Dê um duplo clique sobre o botão Cancelare adicione o comando abaixo:

With DsPadrao.Dataset Do Begin Cancel; Filtered := False; End;

Dê um duplo clique sobre o botão Primeiroe adicione o comando abaixo:

DSPadrao.dataset.first;

Dê um duplo clique sobre o botão Anteriore adicione o comando abaixo:

DSPadrao.dataset.prior;

Dê um duplo clique sobre o botão Posteriore adicione o comando abaixo:

DSPadrao.dataset.next;

Dê um duplo clique sobre o botão Último e adicione o comando abaixo:

DSPadrao.dataset.last;

Com o objetivo de enfatizar o componente que tem foco vamos criar a procedure ChangeEnter e para retornar as propriedades do componente que deixou de ter foco, vamos criar a procedure ChangeExit. Para isso declare as duas funções na área Private do Form:

procedure ChangeEnter(Sender: TObject); procedure ChangeExit(Sender: TObject);

Declare em Uses DBCtrls para que possa reconhecer os edits, combos e memos.

Aperte Ctrl + Shift + C para que o código inicial das procedures seja criado.

A procedure ChangeEnter faz com que o componente em foco receba uma cor verde clara, se destacando dos outros componentes. Para isso:

procedure TFrmPadrao.ChangeEnter(Sender: TObject); begin if Sender is TDBEdit then TDBEdit(Sender).Color := $00E6FED8 else if Sender is TDBLookupComboBox then TDBLookupComboBox(Sender).Color := $00E6FED8 else if Sender is TDBComboBox then TDBComboBox(Sender).Color := $00E6FED8 else if Sender is TDBMemo then TDBMemo(Sender).Color := $00E6FED8; end;

A procedure Change Exit faz com que o componente que acabou de perder o foco volte a ter suas propriedades de coriniciais.

procedure TFrmPadrao.ChangeExit(Sender: TObject); begin if Sender is TDBEdit then TDBEdit(Sender).Color := clWindow else if Sender is TDBLookupComboBox then TDBLookupComboBox(Sender).Color := clWindow else if Sender is TDBComboBox then TDBComboBox(Sender).Color := clWindow else if Sender is TDBMemo then TDBMemo(Sender).Color := clWindow; end;

No evento OnCreate do form, passam os então as procedures acima para os componentes que serão adicionados na tela. O evento OnEnter de cada componente receberá a procedure ChangeEnter e o evento OnExit receberá a procedure Change Exit.

procedure TFrmPadrao.FormCreate(Sender: TObject); var I: Integer; begin for I := 0 to ComponentCount - 1 do begin if Components[I] is TDBEdit then begin TDBEdit(Components[I]).OnEnter := ChangeEnter; TDBEdit(Components[I]).OnExit := ChangeExit; end else if Components[I] is TDBLookupComboBox then begin TDBLookupComboBox(Components[I]).OnEnter := ChangeEnter; TDBLookupComboBox(Components[I]).OnExit := ChangeExit; end else if Components[I] is TDBComboBox then begin TDBComboBox(Components[I]).OnEnter := ChangeEnter; TDBComboBox(Components[I]).OnExit := ChangeExit; end else if Components[I] is TDBMemo then begin TDBMemo(Components[I]).OnEnter := ChangeEnter; TDBMemo(Components[I]).OnExit := ChangeExit; end end; end;

Para efeito de organização, iremos criar duas procedures com o seguinte objetivo: habilitar ou desabilitar o componente mediante o status do em que estiver o dataset em relação ao banco de dados.Exemplo: Se clicarmos no botão Novo, os botões Novo e Editar devem ficar desabilitados.

No campo Private da classe declare as seguintes procedures:

procedure HabilitaControles; procedure HabilitaControlesVisuais(Status: Boolean);

Aperte Ctrl + Shift + C para que o códigoinicial das procedures seja criado.

procedure TFrmPadrao.HabilitaControles; begin BtnNovo.Enabled := not(DSPadrao.DataSet.State in [dsInsert, dsEdit]); BtnGravar.Enabled := (DSPadrao.DataSet.State in [dsInsert, dsEdit]); BtnEditar.Enabled := (DSPadrao.DataSet.State in [dsBrowse]); BtnDeletar.Enabled := (DSPadrao.DataSet.State in [dsBrowse, dsEdit]); BtnCancelar.Enabled := (DSPadrao.DataSet.State in [dsInsert, dsEdit]); BtnPesquisa.Enabled := not (DSPadrao.DataSet.State in [dsInsert, dsEdit]); end; procedure TFrmPadrao.HabilitaControlesVisuais(Status: Boolean); var I: Integer; begin for I := 0 to ComponentCount - 1 do begin if Components[I] is TDBEdit then TDBEdit(Components[I]).Enabled := Status else if Components[I] is TDBLookupComboBox then TDBLookupComboBox(Components[I]).Enabled := Status else if Components[I] is TDBComboBox then TDBComboBox(Components[I]).Enabled := Status else if Components[I] is TDBMemo then TDBMemo(Components[I]).Enabled := Status; end; end;

Agora, basta chamar as procedures dentrodos botões já criados:

HabilitaControles;(BtnNovo, BtnGravar, BtnEditar, BtnDeletar, BtnCancelar, BtnPrimeiro,BtnAnterior, BtnProximo, BtnUltimo);HabilitaControlesVisuais(True);(BtnNovo, BtnEditar);HabilitaControlesVisuais(False);(BtnGravar, BtnDeletar, BtnCancelar);

Para identificarmos se há algum problema de conexão com o banco de dados, colocaremos o código abaixo no evento onCreatedo Form Padrão:

Try DSPadrao.DataSet.Open; HabilitaControles; HabilitaControlesVisuais(False); except on e: Exception do begin ShowMessage('Erro ao conectar base de dados' +#13+ 'Erro : ' + E.Message +#13+ 'Classe : ' + E.ClassName); end; End;

Pronto! Agora para utilizar este formulário padrão para as telas de cadastro de registro, basta ir em File > New >Other > Inheritable Items > FrmPadrao.

Seu novo formulário herdará todas as características do formulário padrão.

Com isso finalizamos o artigo onde você pode agora criar outros forms com base no padrão.

Um abraço, e até o próximo artigo.

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados