Artigo Clube Delphi Edição 11 - Componente TFrame
Artigo da Revista Clube Delphi Edição 11.
Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.
Componente TFrame
Mais um recurso de reutilização de código disponibilizado pelo Delphi
A utilização de frames em um projeto é mais um recurso de reutilização de código disponibilizado pelo Delphi. É como se fosse um formulário modelo, com a diferença de permitir a inclusão de objetos e códigos, que podem ser reaproveitados.
O uso de frames segue aos padrões da programação orientada à objetos: as alterações feitas em um frame são automaticamente refletidas em todos os formulários no qual foi utilizado. E o código inserido nos frames filhos não alteram a funcionalidade primária do frame pai.
No exemplo deste artigo iremos criar um frame contendo cinco botões e um DataSource. O seu funcionamento será semelhante ao de um DbNavigator.
Para criar o frame vá ao menu File/New e clique duas vezes sobre a opção Frame. Altere as propriedades width e height para 120 e 200. Insira um objeto DataSource e configure sua propriedade name para DS1. Insira mais cinco objetos Tbitbtn, e configure-os de acordo com a tabela abaixo:
O código dos botões está listado abaixo:
type
TFrame2 = class(TFrame)
private
{ Private declarations }
opc :Char;
Procedure LigaBotoes;
public
end;
//Procedore para controlar o estado dos botões
Procedure TFrame2.LigaBotoes;
begin
BtInclui.Enabled := not BtInclui.Enabled;
BtAltera.Enabled := not BtAltera.Enabled;
BtExclui.Enabled := not BtExclui.Enabled;
BtGrava.Enabled := not BtGrava.Enabled;
BtDesfaz.Enabled := not BtDesfaz.Enabled;
end;
procedure TFrame2.BtIncluiClick(Sender: TObject);
begin
If Ds1.Dataset.Active Then
Begin
LigaBotoes;
Opc := 'I';
Ds1.Dataset.Append;
End
Else
ShowMessage('A Tabela não está aberta !');
end;
procedure TFrame2.BtAlteraClick(Sender: TObject);
begin
If Ds1.Dataset.Active Then
Begin
LigaBotoes;
Opc := 'A';
Ds1.Dataset.Edit;
End
Else
ShowMessage('A Tabela não está aberta !');
end;
procedure TFrame2.BtExcluiClick(Sender: TObject);
begin
If Ds1.Dataset.Active Then
Begin
LigaBotoes;
Opc := 'E';
End;
end;
procedure TFrame2.BtGravaClick(Sender: TObject);
begin
If Ds1.Dataset.Active Then
Begin
Case Opc Of
'I','A': Ds1.Dataset.Post;
'E': Ds1.Dataset.Delete;
End;
LigaBotoes;
End
Else
ShowMessage('A Tabela não está aberta !');
end;
procedure TFrame2.BtDesfazClick(Sender: TObject);
begin
If Ds1.Dataset.Active Then
Begin
Ds1.Dataset.Cancel;
LigaBotoes;
End
Else
ShowMessage('A Tabela não está aberta !');
end;
Vamos criar um formulário para ilustrar a idéia de reutilização de código através de Frames. Imagine um form no qual o usuário pode incluir registros em várias tabelas. Normalmente, utilizamos um PageControl para esta situação e temos muito trabalho para programar todas as TabSheets. A proposta é criar um tipo de formulário onde não tenhamos que programar muito para efetuar a gravação dos registros nessas tabelas.
Em um formulário vazio, coloque um PageControl (palheta Win32), clique com o botão inverso do mouse e escolha a opção New Page. Repita isto para criar a Segunda página. Altere a propriedade Caption da primeira TabSheet para Animais e a Segunda para Países.
Insira um botão para Sair do programa e Duas Tables. Com as seguintes configurações:
Após incluir estes componentes a aparência do formulário deverá ser parecida com a figura abaixo:
Vamos inserir um frame em cada TabSheet. Selecione o objeto Tframe (palheta standard) e insira-o na primeira TabSheet. Na janela de seleção de frames, selecione Frame2 e Clique Ok. Repita a operação para inserir o frame na Segunda TabSheet. A aparência do formulário serrá parecida com a figura a seguir.
Selecione o DataSource do primeiro frame e preencha a propriedade DataSet com o nome da tabela de animais(TbAnimais). Faça o mesmo com o DataSource do segundo frame ligando-o a Tabela de países (TbPaises). Insira na primeira TabSheet quatro componentes DbEdit e quatro Labels. Configure as propriedades dos objetos da seguinte forma:
O formulário terá a seguinte aparência:
Coloque por cima dos Labels e dos DbEdits um DbGrid ocultando os componentes que já estavam na página. Clique duas vezes sobre o DbGrid, insira uma coluna e altere suas propriedades:
Configure a propriedade DataSource do objeto DbGrid para Frame21.DS1
Repita os procedimentos para colocar os Labels, DbEdits e o DbGrid na Segunda TabSheet, seguindo a listagem abaixo:
O código utilizado nos botões está descrito abaixo:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, ComCtrls, Db, DBTables, frmcadastro, DBCtrls, Mask, Grids, DBGrids;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
BitBtn1: TBitBtn;
TbAnimais: TTable;
TbPaises: TTable;
Frame22: TFrame2;
Frame21: TFrame2;
DBEdit1: TDBEdit;
DBEdit2: TDBEdit;
DBEdit3: TDBEdit;
DBEdit4: TDBEdit;
DBGrid1: TDBGrid;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
DBGrid2: TDBGrid;
DBEdit5: TDBEdit;
DBEdit6: TDBEdit;
DBEdit7: TDBEdit;
DBEdit8: TDBEdit;
DBEdit9: TDBEdit;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Frame21BtIncluiClick(Sender: TObject);
procedure Frame21BtAlteraClick(Sender: TObject);
procedure Frame21BtExcluiClick(Sender: TObject);
procedure Frame21BtGravaClick(Sender: TObject);
procedure Frame21BtDesfazClick(Sender: TObject);
procedure Frame22BtIncluiClick(Sender: TObject);
procedure Frame22BtAlteraClick(Sender: TObject);
procedure Frame22BtExcluiClick(Sender: TObject);
procedure Frame22BtGravaClick(Sender: TObject);
procedure Frame22BtDesfazClick(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormShow(Sender: TObject);
begin
TbAnimais.Open;
TbPaises.Open;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
TbAnimais.Close;
TbPaises.Close;
end;
procedure TForm1.Frame21BtIncluiClick(Sender: TObject);
begin
DbGrid1.Visible := False;
Frame21.BtIncluiClick(Sender);
end;
procedure TForm1.Frame21BtAlteraClick(Sender: TObject);
begin
DbGrid1.Visible := False;
Frame21.BtAlteraClick(Sender);
end;
procedure TForm1.Frame21BtExcluiClick(Sender: TObject);
begin
DbGrid1.Visible := False;
Frame21.BtExcluiClick(Sender);
end;
procedure TForm1.Frame21BtGravaClick(Sender: TObject);
begin
Frame21.BtGravaClick(Sender);
DbGrid1.Visible := True;
end;
procedure TForm1.Frame21BtDesfazClick(Sender: TObject);
begin
Frame21.BtDesfazClick(Sender);
DbGrid1.Visible := True;
end;
procedure TForm1.Frame22BtIncluiClick(Sender: TObject);
begin
DbGrid2.Visible := False;
Frame22.BtIncluiClick(Sender);
end;
procedure TForm1.Frame22BtAlteraClick(Sender: TObject);
begin
DbGrid2.Visible := False;
Frame22.BtAlteraClick(Sender);
end;
procedure TForm1.Frame22BtExcluiClick(Sender: TObject);
begin
DbGrid2.Visible := False;
Frame22.BtExcluiClick(Sender);
end;
procedure TForm1.Frame22BtGravaClick(Sender: TObject);
begin
DbGrid2.Visible := True;
Frame22.BtGravaClick(Sender);
end;
procedure TForm1.Frame22BtDesfazClick(Sender: TObject);
begin
DbGrid2.Visible := True;
Frame22.BtDesfazClick(Sender);
end;
end.
O código fonte deste formulário é muito reduzido graças a utilização destes dois frames. É importante notar que novos componentes não podem ser inseridos na instância do frame, mas somente em sua versão original.
Este aplicativo está disponível para download, no site do ClubeDelphi. Clique na seção Forms, selecione o item banco de dados e baixe o arquivo frame11.zip.
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo