Jump to content

Blog dos Moderadores

  • entries
    36
  • comments
    0
  • views
    57,736

Contributors to this blog

  • jpaulino 17
  • Rui Carlos 7
  • thoga31 7
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

Class Helpers


thoga31

5,171 views

 Share

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

 Share

0 Comments


Recommended Comments

There are no comments to display.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.