You are on page 1of 4

FTP

Enlaces

Buscar

Trucos

Trabajo

Foros

Nombre de Usuario Nombre de Usuario


Recordarme?

Foros Club Delphi > Principal > Varios

Classhelper en Delphi
Registrarse

CCD

C ontrasea
FA Q

Miembros

Calendario

Gua de estilo

Iniciar Sesin
Temas de Hoy

Herramientas

Desplegado

#1

05-01-2013

Registrado: abr 2007


Posts: 6

dario61081
Registrado
Classhelper en Delphi

Buenas colegas, como estn??


. Estuve viendo algunas novedades que trae las nuevas versiones del delphi. En esta oportunidad con los Classhelper. Esta herramienta permite dar mas funcionalidad a las clases ya existentes. como usuario
de java, me fascino como lo poda implementar ciertas funciones como lo hace java. aqui un ejemplo.

Cdigo Delphi [-]


type
TEditHelper = class helper for tedit
public
function toUpper: string;
function toLower: string;
function to_i: integer;
function to_f: extended;
function toEqual(value: string): boolean;
function find(value: string): boolean;
end;

Con esto, a un tedit le "aado" algunas funciones que me sirven de maravillas facilitando no tenes que escribir mas codigo

, y asi utilizarlo como:

Cdigo Delphi [-]


edit2.Text:= edit1.toUpper;
edit3.Text := edit1.toLower;
CheckBox1.Checked := edit1.find('hola');
CheckBox2.Checked := edit1.toEqual('hola');

Como ven, resulta. Ayuda mucho y salvas mucho tiempo y codigo.


Adjunto un ejemplillo hecho en Delphi XE2.
saludos cordiales.

#2

06-01-2013

Registrado: abr 2009


Posts: 168

LoPiTaL
Miembro

Hola!
Los ClassHelpers son indudablemente una fantstica herramienta, til, como dices, para introducir nuevos mtodos a clases existentes.

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

Sin embargo, desde Embarcadero enfatizan que "NO DEBE SER UTILIZADO PARA DESARROLLAR NUEVO CDIGO". La razn de esto es que slo puede haber un class helper activo en cada momento, por lo que si alguien usase el class helper que t
propones, y ahora crease un nuevo class helper con la funcin, p. ej. to_date: TDateTime, entonces no podra utilizar ambos.
Los ClassHelpers estn pensados para "hackear" clases que NO tenemos disponibles, gracias a su habilidad de leer variables privadas de la clase a la que "ayudan". Por ejemplo, podramos resolver un bug en FMX sin tener que recompilar el
framework o aadir una funcionalidad a una clase proporcionada por un tercero, la cual requiera variables privadas de sta.
Por tanto, siempre que se pueda, es recomendable usar herencia tradicional, antes que usar un class helper.
P. ej. en tu caso, podras hacer algo como esto (escrito en el navegador, as que no s si compilar):
Cdigo Delphi [-]
unit EditAdv;
implementation
uses
VCL.StdCtrls;
type
TEdit=class (VCL.StdCtrls.TEdit)
public
function toUpper: string;
function toLower: string;
function to_i: integer;
function to_f: extended;
function toEqual(value: string): boolean;
function find(value: string): boolean;
end;

Y as, en donde necesites esta funcionalidad, aades en el uses (debes aadirlo despus de VCL.StdCtrls) EditAdv y ya tienes la funcionalidad preparada.
Si alguien quiere aadir ms cosas, pues simplemente:
Cdigo Delphi [-]
unit EditAdv2;
implementation
uses
EditAdv;
type
TEdit=class (EditAdv.TEdit)
public
function toDateTime: TDateTime;
end;

y usara EditAdv2 en lugar de EditAdv.


Y entonces, para qu se usa el class helper si ya no hace falta?
En todo esto, el class helper tendra su lugar si, p. ej. para implementar una de tus funciones avanzadas necesitases acceder a alguna variable interna (privada) de ste, la cual no tienes accesible en la clase heredada. Entonces s es necesario
usar el class helper, ya que el lenguaje no te ofrece ninguna otra forma de hacerlo.
Te pongo un ejemplo de esto ltimo, en el cual se necesita acceder a la variable FOldSelLength de la clase TCustomEdit:
Cdigo Delphi [-]
unit Unit2;
interface
uses
Vcl.StdCtrls;

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

type
TEdit=class (Vcl.StdCtrls.TEdit)
public
procedure MiNuevaFuncionQueNecesitaOldSelLength();
end;
implementation
type
//Notar que el helper no es para TEdit, sino para TCustomEdit!!!!! Si ayudamos a TEdit, seguimos sin tener acceso a la variable privada de TCustomEdit!!!!
//Notar tambin que el helper es interesante ponerlo en la parte implementation para que no sea visible desde otras units que utilicen sta, y machaque a algn otro helper que est activo en ellas.
//Notar tambin que el helper SLO se debe encargar de leer / escribir la variable que no tenemos acceso desde fuera! Cualquier otra operacin es conveniente que la haga la clase heredada, para que
// se pudiese sobreescribir en alguna otra clase hija. Tambin se podra aadir una propiedad a la clase heredada que fuese OldSelLength con geters y seters que simplemente llamasen a los mtodos
// del helper, de tal forma que se podra usar como si fuese una propiedad ms.
TEditHelper=class helper for Vcl.StdCtrls.TCustomEdit
protected
function GetOldSelLength: integer;
end;
{ TEditHelper }
function TEditHelper.GetOldSelLength: integer;
begin
//Para acceder a variables internas, es necesario usar explcitamente Self.
Result:=Self.FOldSelLength;
end;
{ TEdit }
procedure TEdit.MiNuevaFuncionQueNecesitaOldSelLength;
begin
//Ya podemos obtener el FOldSelLength mediante la funcin proporcionada por el helper y trabajar con l.
ShowMessage(IntToStr(GetOldSelLength));
end;
end.

Espero no haberte confundido mucho

. Simplemente qudate con que SIEMPRE que puedas hacer algo mediante herencia, usa herencia. Cuando no veas posibilidad de usar herencia, entonces, tal vez, haya que usar class helper.

Un saludo,
LoPiTaL

#3

06-01-2013

Registrado: abr 2007


Posts: 6

dario61081
Registrado

LoPiTaL wow...

realmente me quede con la boca abierta.

Muchas gracias por ampliar el tema. ademas esta info me ha interesado mucho mas en las herencias.
Estar probando a ver que tal me sale
saludos cordiales.

Tema A nterior | Prximo Tema

Normas de Publicacin
no
no
no
no

Puedes
Puedes
Puedes
Puedes

crear nuevos temas


responder a temas
adjuntar archivos
editar tus mensajes

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

El cdigo vB est habilitado


Las caritas estn habilitado
C digo [IMG] est habilitado
C digo HTML est deshabilitado

Saltar a Foro
Varios

Ir

La franja horaria es GMT +2. Ahora son las 05:41:01.

-- Espaol 3.6.7

Contactar con Nosotros - Club Delphi - A rchivo - Top

Powered by vBulletin Version 3.6.8


C opyright 2000 - 2015, Jelsoft Enterprises Ltd.
Traduccin al castellano por el equipo de moderadores del C lub Delphi
Inicio | Contacto | Foros | Noticias | Trabajo
Copyright 1996-2007 Club Delphi

open in browser PRO version

Are you a developer? Try out the HTML to PDF API

pdfcrowd.com

You might also like