Classe de Tratamento de Formulários

Tempo de leitura: 4 minutos

Olá pessoal, eu sou Ramon Ruan, sou programador há cerca de 3 anos em Delphi com Orientação a Objetos. Iniciei minha carreira como programador aos 17 anos “brincando” com o Delphi 7. Ainda cheguei a utilizar o Delphi 5, mas não foi muito pra frente.

Dentre esses anos parei de programar em Delphi um ano depois e comecei a trabalhar em outras coisas. Então alguns anos depois fui para o ASP.NET com arquitetura MVC 3, e em 2014 comecei novamente com o Delphi, utilizando o RAD Studio XE5.

Há alguns meses me deparei com um problema no meu dia-a-dia, nada relacionado a trabalho, mas é aquele pensamento preguiçoso… “E se…”. E se eu tivesse algo que possa somente declarar e não terei que fazer tudo de novo em outro formulário, em outra classe e etc?

Bom… cheguei a uma conclusão e criei uma classe de ajuda onde podemos tratar o formulário com mais cuidado que antes, e mais rápido. Com isso chegamos aqui a este artigo. Utilizando da nossa amiga OO (Orientação a Objetos), consegui resultar em uma classe “RRClass” e uma classe de exibição de mensagens chamada “UTips”. Vamos lá!

Apresentando a classe RRClass

Suas classes e métodos:

TCharSet foi criado para ser identificado os Char’s disponíveis em certas strings, por exemplo em um KeyDown (CharInSet(Key, [‘0’..’9′]).

TTreatFormType foi criado para atender a necessidade visual do programador para entender o que ele está pedindo onde vai aparecer as mensagens ou controles pintados.

type
TCharSet = set of AnsiChar;
TTreatFormType = (ttDefault, ttPaintControlInOne, ttPaintControlInAll,  ttBalloonTipInOne, ttBalloonTipInAll);

TfOBject foi criado para ter um controle nos formulários criados, ou seja, quem não gosta de apenas ter que herdar todo formulário em apenas uma declaração, e bum! Seu formulário ficar pronto? Aproveitei e deixei as configurações de FadeIn e FadeOut do formulário de uma das aulas do nosso amigo Rodrigo Mourão.

type
 TfObject = class(TForm)
 private
 FadeIn: TTimer;
 FadeOut: TTimer;
 procedure FadeInTimer(Sender : TObject);
 procedure FadeOutTimer(Sender : TObject);
 procedure FormShow(Sender : TObject);
 procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
 procedure FormClose(Sender: TObject; var Action: TCloseAction);
 public
 constructor Create(AOwner : TComponent); override;
 destructor Destroy; override;
 end;

TDBGrid foi criado para controlar e sobrescrever os métodos originais do DBGrid. (Fique atento ao link do github do projeto.)

type
TDBGrid = Class(Vcl.DBGrids.TDBGrid)
strict private
  constructor Create(AOwner: TComponent);override;
  destructor Destroy;override;
private
  FColorDataCell : TColor;
  procedure SetColorDataCell(const Value: TColor);
protected
  procedure DrawDataCell(const Rect: TRect; Field: TField; State: TGridDrawState); override;
published
  property ColorDataCell : TColor read FColorDataCell write SetColorDataCell;
end;

TFunctions foi criado com o intuito de obter todas as funções que não forem possíveis fazer um helper para elas. Só um detalhe, a função ProximoDiaUtil foi criada por mim se baseando em feriados móveis e feriados fixos.

type
TFunctions = class
private
  function ProximoDiaUtil(dData: TDate): String;
protected
  function VersaoExe : string;
end;

TFormHelper foi desenvolvido para realizar tratamentos do formulários em CRUDs e também ordernar TabOrders dos controles para evitar de sair de 1 em 1
dizendo qual é qual.

type
TFormHelper = class helper for TForm
private
  procedure TreatTabOrder(const Parent: TWinControl); overload;
public
  function StartTreatment(const IgnoreList : TStringList = nil; const TreatFormType : TTreatFormType = ttDefault) : boolean;
  procedure TreatTabOrder; overload;
end;

TCustomEditHelper foi um helper que fiz para edits e seus objetos herdados para obter as funções declaradas, bem melhor né?

type
TCustomEditHelper = class helper for TCustomEdit
private
  function OnlyNumber : String;overload;
  function OnlyNumber(const AValue: String): String;overload; 
  function OnlyNumberOrChar(const AValue: String): String;
  function CharsInSet(Value: String; CharSet: TCharSet): String;
public
  function IsDate : Boolean;
  function IsCNPJ : boolean;
  function IsCPF : boolean;
  function IsCEP : Boolean; overload;
  function IsCEP(cEstado: string): Boolean; overload;
  function IsEmail : boolean;
  function SetMaskCpfCnpj : string;
  function SetMaskDate2D : string;
  function SetMaskDate4D : string;
  function SetMaskPhone : string;
end;

Não vou prolongar o artigo indo de função em função, com suas utilizações vão ficando melhor. Existe um formulário de utilização das funções no projeto que postei no github. Mas vou citar um exemplo de utilização de algumas funções, vamos lá.

Função de tratamento de formulários

var
  ListIgnora : TStringList;
 begin
  ListIgnora := TStringList.Create;
  ListIgnora.Add(LabeledEdit4.Name);
  if StartTreatment(ListIgnora, ttBalloonTipInAll) then 
    lbStatus.Caption := 'OK'
  else
    lbStatus.Caption := 'Não OK';
  ListIgnora.Free;
 end;

Procedure para setar cada controle com seu TabOrder.

procedure FormCreate(Sender : TObject);
 begin
  inherited;
  TreatTabOrder;
 end;

Simples assim!

De acordo com a utilização da classe, você vai conseguindo trabalhar e aprendendo o código utilizado para benefício próprio. Não se esqueça, não utilize algo que não entenda, procure primeiro entender o que você está utilizando para depois utilizar, pois somente assim
você consegue a integridade da sua manutenção.

Obrigado! Até a próxima!