• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Blog dos Moderadores

  • artigos
    43
  • comentários
    0
  • visualizações
    49446

Autores deste blog

  • jpaulino 19
  • thoga31 9
  • Rui Carlos 7
  • David Pintassilgo 3
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

Class Helpers

thoga31

690 visualizações

Descobre, em Delphi, uma boa forma de acrescentar métodos e propriedades a uma classe pré-existente sem ter de recorrer à derivação clássica, evitando assim a existência de um conjunto enorme de classes extremamente semelhantes mas sim só das estritamente necessárias.

Muitas vezes quando programamos em Delphi, toda a parafernália de componentes que temos à disposição chega e sobra para o que estamos a fazer.

São muitas vezes componentes nativos, testados até à exaustão, e que resolvem bem os problemas.

Também quando não temos nenhum componente para fazermos o que pretendemos, podemos sempre instalar outros, de terceiros, que muitas vezes têm outras funcionalidades, e se bem escolhidos, podem ser a "salvação da lavoura".

Podemos até criar os nossos próprios componentes, à medida para o que precisamos.

Mas muitas vezes não precisamos mesmo de um novo componente... Dáva-nos jeito que um determinado componente (na verdade, a uma determinada classe) fizesse mais qualquer coisa, mas um novo? Não vale o trabalho...

É aqui que entram os CLASS HELPERS

Um Class Helper é uma forma de adicionar propriedades ou métodos a um determinado componente, de forma a que, em qualquer unit onde esse helper esteja referenciado, o componente original irá comportar-se como se tivesse lhe tivesse sido acrescentados os métodos e propriedades do helper.

Para exemplo, e porque um caso prático mostra melhor isto do que 50 páginas de teoria, vamos imaginar o seguinte:

O TEdit, um dos componente mais usados nas aplicações em Delphi.

O utizador escreve qualquer coisa na caixa de texto, e esse valor fica disponível na propriedade TEXT, do tipo TCaption (String).

Se o que queremos que o utilizador insira for um valor numérico, iremos precisar de converter o valor de TEXT antes de o usar, e assim de cada vez que ele for preciso.

unit HEdit;

interface

uses
   StdCtrls; // A unit de origem do componente original tem de existir na unit do helper

type
 THEdit = class helper for TEdit           // Cria-se o helper
   public
     function AsInteger:integer;           // Declaração dos novos métodos
     function AsDouble:double;
 end;

implementation

function THEdit.AsInteger:integer;    // Implementação dos novos métodos
var
  err:integer;
begin
    val(Text,Result,Err);
end;

function THEdit.AsDouble:double;
var
  err:integer;
begin
    val(Text,Result,Err);
end;

end.

Criamos assim um Class Helper (THEdit) com dois métodos: AsInteger e AsDouble.

Os métodos basicamente convertem o valor da propriedade TEXT do próprio TEdit e retorna o resultado (que será 0 caso TEXT não contenha um valor numérico).

Este helper foi criado numa unit só para ele, e embora eu prefira desta forma, nada impede de o colocar na mesma unit de uma form, por exemplo.

A partir daqui, em todas as forms que na sua unit respectiva tenham na secção USES a unit HEdit, se usarmos um TEdit normal, iremos ter dois métodos novos para recolher o seu valor, como no exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
  d:double;
begin
  i := edit1.AsInteger * 5 + 3;
  d := edit1.AsDouble / 2 - 2.3;

  showmessage( inttostr (i));
  showmessage( floattostr (d));
end;

Origem: Class Helpers


0


0 Comentários


Não há comentários para mostra.

Convidado
Está a comentar como guest. Se tem uma conta, por favor inicie sessão.
Adicionar um comentário...

×   Colou conteúdo com formatação.   Restaurar formatação

×   Your link has been automatically embedded.   Mostrar como ligação