jun 122013
 

Buenas

Nueva versión de la GMLib / New version of  the GMLib.

Mensaje en dos idiomas / Post in two languages:


spanish flag Volvemos con una nueva versión de la GMLib, la 1.1.0. No trae muchas novedades, pero sí estudio para futuras versiones…

Continue reading »

abr 232013
 

Buenas,

Post in two languages / Mensaje en dos idiomas:


spanish flag Por defecto, FireDAC ofrece acceso a diversos motores de bases de datos tales como Oracle, DB2, SQLServer o Interbase (entre otros) pero, como cabía esperar, no trae ninguno preconfigurado para Firebird. Así pues tendremos que hacerlo nosotros (y es muy sencillo).

Continue reading »

abr 152013
 

Buenas,

Post in two languages / Mensaje en dos idiomas:


spanish flag Después de mucho trabajo, tanto en lo laboral como en los componentes, por fin puedo lanzar la versión 1.0.0 final de los mismos. No es que aquí se congelen, sino que he llegado ha realizar todo lo que quería hacer cuando empecé el proyecto. Seguiré evolucionándolos, actualizándolos a las nuevas versiones del API de Google Maps, corrigiendo bugs y, por qué no, añadiendo algún que otro componente/clase/funcionalidad que aun les faltan para terminar de dar cabida a toda el API de Google Maps.

Continue reading »

feb 142013
 

18 añosBuenas,

Hoy estamos de celebración, nuestra querida herramienta Delphi se hace mayor y cumple los 18 años. ¡¡Felicidades Delphi!!

Quizás ya no nos acordemos, los que tenemos más años, de las primeras versiones de Delphi, es más, de los primero programas hechos en Turbo Pascal. ¡¡Qué tiempos aquellos!!

Fue a mediados de los noventa, en 1995, cuando Borland lanzó la primera versión de Delphi, el Delphi 1 para 16 bits, haciendo que el lenguaje Pascal pasara a ser un RAD (Rapid Application Development) gracias a su potente VCL (Visual Components Library).

Desde entonces ha llovido mucho y Delphi ha pasado por varias manos (Borland – CodeGear – Embarcadero) hasta llegar a lo que es hoy, con la versión XE3 lanzada por Embarcadero el año pasado, acercándonos cada vez más a la plataforma iOS gracias a Firemonkey (o FMX).

En fin, que muchas felicidades Delphi y gracias a Borland, CodeGear y Embarcadero por darnos la posibilidad de poder tener esta herramienta durante todos estos años (y los que vengan).

happy birthday

Nos leemos

feb 102013
 

Buenas

Post in two languages / Mensaje en dos idiomas:


spanish flag Para demostrar el uso de la unidad Zip, he realizado una pequeña aplicación, la WinZLB. En ella demuestro cómo abrir o crear archivos comprimidos con esta unidad, así como añadir o extraerlos.

Continue reading »

ene 072013
 

Buenas

Seguro que en alguna ocasión hemos tenido que controlar el tiempo que tarda en realizarse algún trozo de código o proceso, y seguro que para ello se ha recurrido a la función Now (definida en la unidad SysUtils) o a la función del API de Windows GetTickCount. Otra opción es crearnos una unit que contenga la clase expuesta por Zarko en uno de sus artículos de delphi.about.com (ver How to Accurately Measure Elapsed Time Using High-Resolution Performance Counter).

Continue reading »

dic 282012
 

Buenas,

Los que tengan nociones de POO (Programación Orientada a Objetos) sabrán perfectamente cómo añadir funcionalidades a una clase creando una nueva.

Por ejemplo, imaginemos que tenemos la clase TMyClass definida de la siguiente manera:

type
  TMyClass = class
    procedure MyProc;
    function MyFunc: Integer;
  end;
....
procedure TForm1.Button1Click(Sender: TObject);
var
  C1: TMyClass;
begin
  C1 := TMyClass.Create;
  C1.MyProc;
  C1.MyFunc;
  C1.Free;
end;

Si queremos añadir funcionalidad a esta clase, lo primero que se nos puede venir a la cabeza es la herencia, es decir, crear una nueva clase que contenga las nuevas funcionalidades o especializaciones, quedando como ésto:

  TMyCustomClass = class(TMyClass)
    procedure AnotherProc;
  end;
.....
procedure TForm1.Button1Click(Sender: TObject);
var
  C1: TMyCustomClass;
begin
  C1 := TMyCustomClass.Create;
  C1.MyProc;
  C1.MyFunc;
  C1.AnotherProc; // <- hacemos uso del nuevo método
  C1.Free;
end;

El «inconveniente» de hacerlo así es que, como vemos, si queremos usar el método AnotherProc tendremos que crear un objeto de tipo TMyCustomClass. Pero, ¿qué pasa si tenemos un proyecto que hace uso masivo de TMyClass? En ese caso tendríamos que cambiar todas las referencias de TMyClass por TMyCustomClass, y eso podría ser un trabajo tedioso, y más si lo que queremos es ampliar la clase, no especializarla.

Para ese menester, Delphi (de echo la POO) nos brinda con las Helper Class (también aplicable a los records). Una Helper Class es una clase que, asociada a otra clase, añade nuevos métodos o propiedades a la clase asociada y que pueden ser usados por ésta. Es una forma de expandir una clase sin necesidad de herencia.

La sintaxis de las Helper Class es la siguiente:

type
   identifierName = class|record helper [(ancestor list)] for TypeIdentifierName
     memberList
   end;

La implementación para nuestro ejemplo sería así:

type
  TMyHelperClass = class helper for TMyClass
    procedure AnotherProc;
  end;
.......
procedure TForm1.Button1Click(Sender: TObject);
var
  C1: TMyClass; // <- objeto de la clase base....
begin
  C1 := TMyCustomClass.Create;
  C1.MyProc;
  C1.MyFunc;
  C1.AnotherProc; // <- ... pero que puede usar el nuevo método
  C1.Free;
end;

Para más información podéis consultar la docwiki de Embarcadero sobre este tema en Class and Record Helpers (Delphi).

Nos leemos