Archivo de la categoría: Delphi

Temas de delphi

Código de ejemplo de la sesión de DataSnap en CodeRage América Latina 2014

CodeRage Latinoamérica 2014

En relación a mi presentación en el reciente CodeRage América Latina 2014, titulada:

Aplicaciones iOS y Android con soporte para arquitecturas Multi-capas utilizando DataSnap

Haciendo clic en el botón, puedes descargar el código del ejemplo que se desarrolló durante la misma
Sigue leyendo

Anuncios

Clase genérica para convertir una enumeración en cadena y viceversa

Una de las cosas que siempre olvido como hacer, y por lo mismo me toca hacer una búsqueda en Google para volver a escribir el código necesario, es como convertir una enumeración en un string y viceversa (EnumToStr, StrToEnum).

Esto es, primero, porque tradicionalmente hay que escribir una rutina distinta para cada tipo de enumeración que nos interesa, o peor aún, escribir una llamada directamente a GetEnumName/GetEnumValue, que son las que hacen el trabajo sucio.

También esto se debe, en parte, porque hasta ahora no se me había ocurrido la idea de valerme de los genéricos para tener un trozo de código que sea re-utilizable y meter mi rutina en alguna biblioteca de las que suelo tener a mano mientras escribo código.

Ya con la idea, y luego de algún esfuerzo, escribí la clase que ahora les comparto, pero primero, veamos su uso, que vendría a ser, por ejemplo:

begin
  Memo1.Lines.Add(
    TEnumConverter<TAlign>.ToString(Self.Align));
end;

Sigue leyendo

Delphi para Android es una realidad

AndroidHelmetHoy, a primera hora de la mañana, Embarcadero ha realizado el anuncio oficial de RAD Studio XE5, la primera versión de RAD Studio y Delphi que incluye soporte para compilar proyectos para Android, la plataforma móvil más utilizada en nuestros días. Este compilador viene a sumarse a los tradicionales compiladores para Win32, Win64, y a los más recientes, para OSX e iOS de la herramienta.

No puedo ocultar que estoy muy emocionado, con grandes expectativas para esta nueva versión de Delphi, sobre la que hay mucho por decir y en la que se enfocarán mis próximas publicaciones.

Por ahora, la idea de esta corta entrada, es hacer eco de la noticia y dejarte estos enlaces oficiales de Embarcadero, donde encontrarás más información (en inglés):

RAD Studio XE4 está aquí

delphihelmet100x100

El día de hoy ha sido anunciado oficialmente el lanzamiento de RAD Studio XE4 y Delphi XE4, cuya principal novedad es el soporte para desarrollo de aplicaciones nativas para iOS, basado en un nuevo compilador, conocido como nextgen que debuta en su versión para procesadores ARM, y utilizando FireMonkey3 como plataforma de desarrollo visual

Por ahora estoy corto de tiempo para entrar en detalles de esta nueva entrega, que son muchos, pero si estas interesado en el desarrollo multi-dispositivo, esta es, con seguridad, la versión de Delphi que estabas esperando, así que te invito a probarla!

Actualización del libro Programación paralela con OmniThreadLibrary

Portada del libroEl día de hoy, luego de algunos meses de espera, se ha publicado la versión actualizada del libro Programación paralela con OmniThreadLibrary.

Esta versión contiene ya culminado el capítulo 5: Sincronización, que habla sobre algunas primitivas de sincronización disponibles en la biblioteca, y vuelve a estar al día con la versión en Inglés. Todos los lectores anteriores pueden realizar la descarga de esta nueva versión sin costo alguno, desde su página de administración de compra, en Leanpub.com.

Si aún no has comprado el libro, ¿qué esperas? 😀

FastMM, FullDebugMode y Fugas de memoria

delphihelmet100x100

Hoy, 14 de febrero de 2013, Delphi alcanza la mayoría de edad. A todos
los que trabajan con esta herramienta:

¡Felices 18 años de Delphi!

FastMM 4

Por si no lo sabes, FastMM es un manejador de memoria de código abierto, desarrollado por Pierre le Riche como reemplazo al manejador de memoria de Borland utilizado en Delphi desde el inicio, y que se convirtió en el manejador de memoria por defecto a partir de Delphi 2006.

Eso significa que, si utilizas Delphi 2006 o superior, ya estas usando FastMM, pero probablemente no estás sacando todo el provecho que podrías de él

En este artículo no hablaremos a profundidad sobre las ventajas de FastMM, ni lo compararemos con otros manejadores de memoria existentes. Por hoy, nos centraremos en la opción FullDebugMode de FastMM y veremos como este modo nos ayuda a resolver las fugas de memoria que puede haber en nuestras aplicaciones

Sigue leyendo

7zip y Delphi

7ziplogoHoy me dí a la tarea de buscar la manera de trabajar con archivos 7zip desde Delphi.

Encontré así la biblioteca d7zip, publicada bajo licencia MPL1.1, lo cual en pocas palabras, nos permite hacer uso de ella en proyectos libres o privativos.

A pesar de que la biblioteca no ha publicado nuevas versiones desde Abril del 2010 (v.1.2), el log de SVN muestra alguna actividad aún en noviembre del 2011 y es compatible con las últimas versiones de Delphi, lo cuál me pareció aceptable para considerarlo un proyecto vivo.

Antes de decidirme a utilizarla, quise comprobar si encontraría algún problema para compilar y ejecutar aplicaciones de 64 bits con esta, tomando en cuenta que la descarga incluye únicamente la versión de 32 bits para el archivo 7z.dll (versión 4.65).
Sigue leyendo

Delphi XE2/XE3 – Creando aplicaciones VCL con estilo

A partir de Delphi XE2 y ahora también en XE3, las aplicaciones Delphi contienen un nuevo motor de Temas y Estilos.

Esto significa que podemos hacer una aplicación visualmente más atractiva sin prácticamente ningún esfuerzo, y también que podemos añadir nuestro propio estilo personalizado a las aplicaciones.

Por hoy, veremos de manera rápida cómo realizar una aplicación con un estilo diferente en Delphi, cómo podemos interrogar a la propia aplicación sobre los estilos disponibles y cómo podemos, en tiempo de ejecución, cambiar de estilo.

Pero, primero, veamos el resultado de compilar nuestra sencilla aplicación Demo y ejecutarla:

Formulario con estilo

Sigue leyendo

La clase TIdMessageBuilderHtml y el envío de correos HTML desde Delphi

Hay muchas formas de enviar correos con Delphi.

Mi preferida desde hace tiempo es hacerlo vía SMTP con la clase TIdSMTP, que es flexible y poderosa.

Hoy, a raíz de que mi estimado amigo, Edgar Ramírez, publicara su artículo Enviar correo con imágenes incrustadas con Delphi he recordado que hace tiempo me gustaría iniciar una serie de artículos sobre el uso de INDY y la comunicación TCP/IP con Delphi.

A manera de respuesta a la publicación citada, quiero mostrar cómo realizar el envío de un correo similar —con una imagen incrustada— haciendo uso de la clase auxiliar TIdMessageBuilderHtml, que en mi opinión no solo facilita las cosas sino que nos deja una solución mucho más elegante y fácil de entender en el código.

La parte relevante del envío de correo es:

procedure TfrmCorreo.EnviaCorreoImagen(const FileName: string);
var
  Builder: TIdMessageBuilderHtml;
  Msg: TIdMessage;
  SMTP: TIdSMTP;
begin
  Builder := TIdMessageBuilderHtml.Create;
  try
    Builder.Html.Add('<HTML><HEAD><TITLE>Una imagen para ti</TITLE></HEAD><BODY>');
    Builder.Html.Add('<p><strong>Una imagen para ti</strong></p>');
    Builder.Html.Add('<div>');
    Builder.Html.Add('  <img border="0" src="cid:laimagen" >');
    Builder.Html.Add('</div>');
    Builder.PlainText.Add('Este correo contiene una imágen para ti. '
      + 'Debes usar un visor HTML para verla');
    Builder.HtmlFiles.Add(FileName, 'laimagen');
    Msg := Builder.NewMessage();
    try
      Msg.Recipients.EMailAddresses := eRecipients.Text;
      Msg.From.Name := eFromName.Text;
      Msg.From.Address := eFromEmail.Text;
      Msg.Subject := 'Una imagen para ti';
      SMTP := TIdSMTP.Create;
      try
        SMTP.Host := eSMTPHost.Text;
        SMTP.Username := eSMTPUser.Text;
        SMTP.Password := eSMTPPass.Text;
        SMTP.Connect;
        try
          SMTP.Send(Msg);
        finally
          SMTP.Disconnect;
        end;
      finally
        SMTP.Free;
      end;
    finally
      Msg.Free;
    end;
  finally
    Builder.Free;
  end;
end;

Como puede observarse, la instancia de TIdMessageBuilderHtml se encarga de los detalles sobre adjuntar los archivos. De lo que debemos asegurarnos es de proveer un cid diferente para cada imagen incluida en el HTML de nuestro correo, y que estos identificadores se correspondan con los archivos incluidos posteriormente en la llamada al método HtmlFiles.Add, que recibe como parámetros el nombre del archivo y el cid correspondiente.

Aclaración: En mi opinión cualquier método con más de 25 líneas de código es demasiado grande y debe considerarse su refactorización. Es el caso del código publicado, sin embargo he preferido mantener un solo método para no enredar al lector con tener que seguir mentalmente las llamadas entre ellos. Como se ve, el método se encarga de todo el envío del correo, lo cuál conceptualmente también puede ser mucho para un solo método. En algo para producción, esto probablemente sería dividido en 3 distintos métodos: armar el correo HTML, configurar el mensaje y finalmente la conexión/envío/desconexión.

Marco Cantù llega como nuevo Product Manager de Delphi

El día de hoy (ayer), durante la primera sesión de CodeRage 7 ha sido anunciado a Marco Cantù como nuevo Delphi Product Manager, Más tarde el mismo Marco ha hecho replica de la noticia en twitter y en su blog, mientras por su parte JT le daba oficialmente la bienvenida a Embarcadero.

Marco es una prominente figura de la comunidad global, uno de los más conocidos autores y conferencistas del mundo de Delphi, por lo que seguramente es conocido por la gran mayoría de usuarios de la herramienta y por tanto no necesita presentación. Sus libros han sido leídos por muchos —incluyéndome— y sus conferencias, eventos y presentaciones son siempre de las más concurridas.

En lo que a mi respecta, como siempre, espero que esta incorporación traiga un mayor acercamiento a las necesidades de los usuarios y visión para encarar el futuro de Delphi.

Go Delphi y Go Marco!