Construção de Componentes V – Parte A
No artigo anterior começamos a construir o componente Gerenciador de Layout de Grid, TManagerGridZn. Vimos como fazer uma package no Delphi 2006, associar outras units a ela e etc. Como fazer isso no Delphi 7 também já foi exemplificado nos primeiros artigos sobre o assunto. Para programarmos um pequeno módulo a fim de testarmos o novo componente precisamos instalar a package, para fazer isso basta clickar com o botão direto sobre ela, no Project Manager e selecionar a opção “Install”.

Projeto teste Gerenciador de Layout de Grid (TesteGerencLayoutGrid.bdsproj): Inicie uma nova aplicação no Delphi, no From1 adicione os seguintes componentes:
1 – TClientDataSet
Name = CdsDados
1.1 Adicione dois TFields ao CdsDados;
TIntegerField
Name = CdsDadosID_Dado
Field Kind = fkData
TStringField
Name = CdsDadosDescDado
Field Kind = fkData
TStringField
Name = CdsDadosCoisas
Field Kind = fkData
2 – TdataSource (Data Access)
Name = DsDados
DataSet = CdsDados
3 - TDBGrid (Data Controls):
Name = DDGrid1
Align = alBottom
DataSource = DsDados
3.1 – Adicione duas colunas ao Grid, correspondentes aos três
TFields do CdsDados
4 -TManagerGridZn (Estação ZN)
Grid = DBGrid1
5 - TBitBtn (Addititional)
Name = BtnActivar
Caption = 'Ativar'
cerifique-se de que o ManagerGridZn (TManagerGridZn), esteja associado ao DBGrid1. O DBGrid tem que estar associado ao DsDados(TDataSource), que deve estar associado ao CdsDados(TClientDataSet).
No evento OnClick do BtnAtivar codifique:
procedure TForm1.BtnActivarClick(Sender: TObject); var i: Integer; begin (* Ativa o Dataset*) if not CdsDados.Active then CdsDados.CreateDataSet; //Preenche o DataSet for i := 0 to 30 do begin CdsDados.InsertRecord([i, Format('Dado %d', [i]), 'Bla!!!!']); end; end;
Pronto!! That’s it!!!
Chega de código .... tá bom??? Também acho ... hehehe
Note que para trabalhar com a classe que criamos nào foi necessário NENHUMA linha código.
Execute o programa e teste conforme os screenshots abaixo:
Primeiro carregue os dados clickando no botão “Ativar”. Com o botão direito do mouse, chame o menu popup que o componente TManagerGridZn criou e associou ao grid. Selecione a 1° opção.

Altere as propriedades da coluna sobre a qual vc clickou.

Ok, fácil? Agora você pode intuitivamente manter um layout personalizado para qualquer grid, em qualquer um dos seus projetos.


Podemos concluir, a partir deste exemplo, que um programa bem modularizado, onde o grau de acoplamento é reduzido ao máximo, propicia o reuso de maneira eficiente. Também, que é possível a construção de componentes de fácil consumo (mínima curva de aprendizado por parte do desenvolvedor que vai usar o componente em seus programas).
Outro ponto importante a destacar é que com essa abordagem podemos desenvolver novas funcionalidades para sistemas que foram construídos por outros (sistemas antigos, legados), que precisam sofrer manutenção, demandando para isso um grau mínimo de intervenção no código dos desenvolvedores originais. Sobretudo porque, a maioria deles são extremamente sensíveis a qualquer intervenção, mínima que seja, em seus fontes.
Outro ponto importante a destacar é que com essa abordagem podemos desenvolver novas funcionalidades para sistemas que foram construídos por outros (sistemas antigos, legados), que precisam sofrer manutenção, demandando para isso um grau mínimo de intervenção no código dos desenvolvedores originais. Sobretudo porque, a maioria deles são extremamente sensíveis a qualquer intervenção, mínima que seja, em seus fontes.
A seguir, finalizaremos a implementação do componente “TManagerGridZn”, pois ainda faltam ser codificadas as funcionalidades de recuperar as colunas que o usuário definir como invisíveis, “Ver Colunas Escondidas” (Invisíveis), e o restore default values “Restaurar configuração original”.
Código completo da unit1.pas
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, DB, DBClient, Grids, DBGrids, ManagerGridZn; type TForm1 = class(TForm) DBGrid1: TDBGrid; CdsDados: TClientDataSet; dsDados: TDataSource; CdsDadosID_Dado: TIntegerField; CdsDadosDescDado: TStringField; BtnActivar: TBitBtn; ManagerGridZn1: TManagerGridZn; CdsDadosCoisas: TStringField; procedure BtnActivarClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.BtnActivarClick(Sender: TObject); var i: Integer; begin if not CdsDados.Active then CdsDados.CreateDataSet; for i := 0 to 30 do begin CdsDados.InsertRecord([i, Format('Dado %d', [i]), 'Bla']); end; end; end.
unit1.dfm
object Form1: TForm1 Left = 223 Top = 168 Caption = 'Form1' ClientHeight = 375 ClientWidth = 531 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object DBGrid1: TDBGrid Left = 0 Top = 80 Width = 531 Height = 295 Align = alBottom DataSource = dsDados TabOrder = 0 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'Tahoma' TitleFont.Style = [] Columns = < expanded =" False" fieldname =" 'ID_Dado'" visible =" True" expanded =" False" fieldname =" 'DescDado'" visible =" True" expanded =" False" fieldname =" 'Coisas'" visible =" True"> end object BtnActivar: TBitBtn Left = 408 Top = 8 Width = 75 Height = 25 Caption = 'Ativar' TabOrder = 1 OnClick = BtnActivarClick end object CdsDados: TClientDataSet Aggregates = <> Params = <> Left = 316 Top = 40 object CdsDadosID_Dado: TIntegerField FieldName = 'ID_Dado' end object CdsDadosDescDado: TStringField FieldName = 'DescDado' Size = 30 end object CdsDadosCoisas: TStringField FieldName = 'Coisas' end end object dsDados: TDataSource DataSet = CdsDados Left = 388http://www.blogger.com/img/blank.gif Top = 44 end object ManagerGridZn1: TManagerGridZn Grid = DBGrid1 Left = 80 Top = 12 end end
Continuação da série Construção de Componentes
Voce poderia me enviar o componente ManagerGridZn? Não consegui fazer ele funcionar corretamente seguindo o seu artigo, o form GridProfileManagerZnForm não esta aparecendo os dados e nem permitindo mudar os componente DBEdit, DbComobox... Acredito que seja por causa do DataSource destes componentes DBware. As demais funcionalidades eu consegui. Desde já muito obrigado...
ResponderExcluirMGreich,
ResponderExcluirTenho que arranjar um temipinho livre pra fazer upload desse códido.
Alias, eu já deveria ter feito isso. O problema é que nunca sobra tempo.
Mil coisas acontecento e algo sempre acaba caindo no esquecimento. Farei isso em breve.
Obrigado por ler e participar do Estação ZN!
Tks!