Buenas
Nueva versión de la GMLib / New version of the GMLib.
Mensaje en dos idiomas / Post in two languages:
Volvemos con una nueva versión de la GMLib, la 1.1.0. No trae muchas novedades, pero sí estudio para futuras versiones…
Buenas
Nueva versión de la GMLib / New version of the GMLib.
Mensaje en dos idiomas / Post in two languages:
Volvemos con una nueva versión de la GMLib, la 1.1.0. No trae muchas novedades, pero sí estudio para futuras versiones…
Buenas,
Personalización del SplashScreen del IDE / Customizing the IDE SplashScreen
Buenas,
Un archivo de recursos es un tipo de archivos que nos permite almacenar datos que posteriormente se añadirán a nuestra aplicación en la compilación para ser usados por ésta.
Buenas,
Post in two languages / Mensaje en dos idiomas:
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).
Buenas,
Post in two languages / Mensaje en dos idiomas:
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.
Buenas,
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).
Nos leemos
Buenas,
Post in two languages / Mensaje en dos idiomas:
Ha costado pero al final ha llegado la nueva versión de la GMLib para Delphi/BCB, la 0.1.9 beta.
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).
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