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

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
 (15)  (0)

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):

TBPadrao: TToolBar;

PnlPadrao: TPanel;

DSPadrao: TDataSource;

IlPadrao: TImageList;

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 “Cancelar”e adicione o comando abaixo:

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

Dê um duplo clique sobre o botão “Primeiro”e adicione o comando abaixo:

 
DSPadrao.dataset.first;

Dê um duplo clique sobre o botão “Anterior”e adicione o comando abaixo:

 
DSPadrao.dataset.prior;

Dê um duplo clique sobre o botão “Posterior”e 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 “onCreate”do 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.

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