Archivo

Entradas Etiquetadas ‘Delphi’

Una quincena más… (30/07/2012)

lunes, 30 de julio de 2012 4 comentarios
Share Button

imagesRetomando un poco (o eso espero) el ritmo de las entradas, para los que estéis interesados  en FireMonkey y en las posibilidades de realizar animaciones y aplicaciones con características 3D, os remito al canal de youtube de ketufe. Podéis encontrar desde ejemplos sencillos y algunos no tanto. Los videos dan ideas de las diferentes posibilidades a utilizar. Hay mucho material para revisar, ya que el canal cuenta con más de 100 videos.

Aquí podemos encontrar un pequeño tutorial de Document Insight; La herramienta de documentación de DevJet Software que viene incluida de forma gratuita con Delphi XE2. Es una de aquellas cosas que no son fáciles de encontrar en la documentación (o que no encontramos directamente) pero que son tremendamente útiles, para los que desarrollamos componentes y librerías que luego utilizan otros programadores. En estos casos la documentación en necesaria (obligatoria diría yo) y además a la larga significa una mayor eficiencia a la hora de programar.

No hace muchos días de la publicación en la página de Salvador (Delphi básico) de dos entradas dedicadas al componente TTreeView en Firemonkey; Yo diría que indispensables para los que queráis empezar a trabajar con él y entender bien su funcionamiento.

Las dos entradas hacen un completo repaso de este componente de este componente y su utilización en Firemonkey. Las diferencias que existen entre este y su versión en la VCL, repasando propiedades, métodos y distintos comportamientos. Muy recomendable por lo compleja y extensa que es. La explicación es muy clara y podéis descargar los códigos de ejemplo para poder realizar las pruebas sin problemas. No os desvelo más del contenido del artículo, que lo hay, os invito a que lo reviséis completo. ;-)

 demo3

 

Esta semana, también ha visto la luz la siguiente versión de los componentes de Cadetill para trabajar con Google Maps. La librería GMLib; En este caso la versión 0.1.5a. Añaden bastantes correcciones y nuevas funcionalidades respecto a la anterior versión.

47_web20_320x240_gmlib 

“GMLib (Google Maps Library) son una serie de componentes para Delphi que encapsulan el API de Google Maps y así poder gestionar los mapas de Google de forma sencilla mostrando el resultado en un TWebBrowser.“

 

Siguiendo con el tema de FireMonkey, desde hace unos días podemos descargar desde la web de Embarcadero de una versión “free” de la herramienta de conversión entre VCL y FireMonkey llamada Mida. No he tenido tiempo de probarla, así que si alguien tiene oportunidad estaría bien que compartiera sus experiencias. Trabaja con componentes de terceros, además de los estándard, LiveBindings, Estilos y bastantes cosas más, aunque no todas disponibles en la versión gratuita.

Icarus_48También estos días se ha liberado la versión 3.4.4 de Icarus. Se trata de una utilidad gratuita de la casa Peganza (http://www.peganza.com) la misma que comercializa PAL (Pascal Analizer). Icarus es una “analizados de units”; Permite analizar el código de proyectos Delphi en busca de units no necesarias añadidas al uses o de aquellas que pueden ser movidas entre las secciones de Interface e Implementation.

Hoy mismo leo sobre la La versión 2.6 de las DDevExtensions se ha liberado estos días. Podéis descargarla para las diferentes versiones de los compiladores y leer sobre los cambios y correcciones de la última versión en este link (DDevExtensions 2.6). Gran trabajo que va mejorando versión a versión.

Poco a poco van apareciendo componentes nativos para FireMonkey. Es una tecnología nueva para los que trabajamos con las herramientas de Embarcadero y es normal que el arranque cueste un poco. Ya conocía un paquete de componentes específicos de la mano de TMS y estos días he leído que arcana también ha publicado Apesuite, una serie de componentes para FMX.
Siempre es una buena noticia que las empresas apuesten, se involucren y vaya generando componentes para FMX.

Por último os dejo esta completísima recopilación de reursos para FireMonkey. Si deseáis introduciros en este tema y empezar a hacer “pinitos» con esta tecnología debéis guardaros esta recopilación. Además de la propia documentación de Embarcadero, aquí podéis encontrar una amplia variedad de links que abarcan bastantes aspectos.

Introduction

Styles

What about the VCL?

Networking

IDE

Forms

File I/O

Video and sound

DataSnap

Controlling other programs

Printing

3D animation

Runtime packages and DLLs

Component development

Errors

Bugs

Third Party

 

    Un saludo y hasta la próxima.
Categories: Delphi, FireMonkey, Resumen Tags: ,

Una quincena más… (08/02/2012)

miércoles, 8 de febrero de 2012 2 comentarios
Share Button

Ya hace unos días se anunció que a primeros de Febrero se liberaría la librería principal de Lua4Delphi. Si queréis más información sobre este proyecto, que parece interesante podéis revisar la página web.

En esta entrada del blog monkeystyler leo una entrada interesante titulada “My primer componente FireMonkey: TBitmapSpeedButton”. Creo que es una lectura recomendable para todos aquelos que quieren trabajar con FireMonkey y entender mejor el funcionamiento de los componentes.

 

notepadpp Para los que todavía utilizáis el Notepad de Windows (supongo que pocos a estas alturas) os recomiendo Notepad++.  Es un fantástico editor de texto (que utilizo desde hace mucho tiempo). Tiene infinidad de características, y entre ellas un sistema de plugins bastante elaborado. Esta reseña viene a colación, de una pregunta que he visto estos días en “The Delphi Geek” (recomendable)  sobre “posibles editores de Wiki”.
Una de las respuestas es que en Notepad++ existe un plugin (entre los muchos que hay), que permite realizar esto.  El “wiki editor plugin”, que permite realizar esta tarea y además está desarrollado en Delphi. En la página podéis descargar no sólo el plugin, sino también el código Delphi. Por si alguien se anima…  ;-)

Esta semana ha aparecido una “release” nueva (no-oficial) de las rxLib, de la mano de micrel.cz, con fecha del 2 de Febrero. La podéis descargar de la página, desde este link y también la añado a la sección donde están recopiladas el resto de versiones. Algún componente nuevo y algunos bugs corregidos.

En el blog de  Zarko, leo una entrada interesante y que tiene mucho que ver con preguntas que aparecen de forma recurrente en los foros. Es muy habitual ver y leer preguntas sobre librerías o componentes que posibiliten trabajar con ficheros PDF. ¿Cómo generarlos?, ¿cómo abrirlos? ¿cómo imprimirlos?
La entrada nos presenta la librería Quick PDF Library en su versión LITE.  Podéis ver las cabeceras de los métodos disponibles y algo de código de cómo utilizarla e instalarla.

Por último, leo hoy en los blogs de Embarcadero, que todos los programadores Delphi estamos invitados a celebrar en breve, un cumpleaños. La versión de Delphi 1.0 se liberó el día 14 de Febrero de 1995.

Si queréis más información sobre este “webminar”, podéis encontrarla aquí.

Un saludo y hasta la próxima.

Categories: Delphi, Resumen Tags: ,

Comienza un nuevo año… (10/01/2012)

martes, 10 de enero de 2012 2 comentarios
Share Button

  UnRecuerdoEn este caso ha sido un poco más larga la espera desde mi última publicación. Diferentes motivos y diferentes razones han hecho que este impás haya sido un poco mayor.

2012   Aprovecho desde aquí, para desearos un buen año; Que este que comenzamos ahora sea para todos nosotros mejor que el anterior.

  Empiezo por reseñar sobre la última actualización de IDE Fix Pack de Andy. llevo tiempo usándolos con diferentes IDE’s de Delphi al igual que otras utilidades que podemos encontrar en su web, como las DDevExtensions. Si no las conocéis os recomiendo que al menos os deis una vuelta por su página.

   También quiero resaltar, la serie de artículos de Rodrigo sobre WMI (a modo de recopilatorio). Si alguna vez necesitáis encontrar información sobre el tema, a parte de aquí en el blog, donde podéis encontrar algunas entradas al respecto y los componentes GLibWMI, el lugar al que tenéis que ir a parar es al blog de Rodrigo (The Road to Delphi).

La información sobre el tema es muy grande. Os coloco los enlaces a algunas de las últimas entradas relacionadas, aunque también podéis encontrar herramientas como “WMI Delphi Code Creator” y otros artículos interesantes.

Desde el Grupo de Usuarios de Delphi en Australia (en la otra punta del mundo –literal para los que estamos aquí en España-), os aconsejo esta buena entrada sobre creación de escenas en 3D utilizando FireMonkey. Conceptos complejos que explicados de forma sencilla y detallada nos pueden ayudar a comenzar con este tema.

Aparte de las explicaciones de determinadas partes del código, se puede descargar la aplicación (tanto el ejecutable, como los fuentes). Además de encontrar otras referencias, como librerías de objetos a utilizar.

landscape (2)

Cierro aquí esta breve entrada.

Como siempre los comentarios y sugerencias son bien recibidas.

Un saludo.

Categories: Resumen Tags: , ,

Testeando XE2 (aplicación FireMonkey…)

miércoles, 9 de noviembre de 2011 9 comentarios
Share Button

Hace unas semanas comencé a “trastear» con XE2, con FireMonkey, con los liveBindings, estilos y algunas características más…  Estuve posteando aquí las primeras impresiones y los resultados de esas  primeras pruebas.

En esas entradas he realizado un primer acercamiento a estas tecnologías, he dado un repaso y he testeado por encima algunas de sus características. La idea ahora, es ir un poco más allá.

He leído en algunos foros opiniones sobre que FireMonkey está «a medias» o «incompleto». Respeto esas opiniones, pero personalmente no estoy de acuerdo. Creo (y aquí es donde puede estar el error ) que se compara a FireMonkey con la VCL y las características que posee esta. Desde ese punto de vista sí puede parecer que  «le faltan cosas» y eso puede dar una sensación de que es una tecnología inacabada.

Pienso que el objetivo final de FireMokey no es, llegar a conseguir todas las características con las que cuenta la VCL. Es algo totalmente nuevo que avanza en una dirección paralela, algunas cosas tendrá sentido «adoptarlas» y otras no, pero a mi entender eso es «añadir» no «completar».

Hace tiempo publiqué en el blog un pequeño ejemplo de cómo cargar ficheros  GPX  (alternativa generando KML) procedentes de dispositivos GPS y visualizar esos tracks o rutas en una Aplicación  Delphi. Me he decidido por intentar realizar esta pequeña aplicación utilizando FireMonkey.


TActionList, ¿dónde está?

Lo primero que me he encontrado, aunque en realidad ya lo había visto en las primeras pruebas, es que no puedo utilizar un TActionList.  Este componente no está en la paleta donde debería estar o donde uno esperaría encontrarlo. Una cosa que sorprende es que los componentes estandard de FireMonkey sí poseen la propiedad Action para poder asignar un elemento. No es que sea imprescindible, pero es muy cómodo.

Lo siguiente que me planteo es la importación de datos desde un fichero GPX. En su día la hice utilizando el XMLmapper, pues los ficheros GPX son en realidad ficheros XML. Me propongo utilizar el mismo modelo utilizado anteriormente;  Importar el fichero GPX a un TClientDataset para getionarlo después de forma local.

TXMLTransformProvider, ¿dónde está?

Al igual que me ha pasado anteriormente, coloco un TClientDataset y cuando voy a colocar el TXMLTransformProvider no está donde esperaba encontrarlo.

He realizado un par de pruebas y lo más curioso es que creando y configurando el componente «a mano» funciona perfectamente. Con un código como este y configurando los campos apropiados en diseño el componente funciona perfectamente, importa los datos e incluso se pueden configurar LiveBindings para mostrar el resultado en un Grid.

  XMLTransform := TXMLTransformProvider.Create(nil);
  XMLTransform.TransformRead.TransformationFile :=
    'd:\Ficheros GPX\GPX_To_DP.xtr';
  XMLTransform.XMLDataFile :=
    'd:\Ficheros GPX\Ruta3.gpx';
  ClientDataSet1.SetProvider(XMLTransform);
  ClientDataSet1.Active := True;

Una vez activado el componente la importación se realiza sin problemas.

He dejado de lado esta cuestión por ahora; Tal vez más adelante me detenga para probar más cosas, pero para seguir adelante he realizado la importación de datos «manualmente», de forma que una vez conseguidos los datos en el TClientDataSet y puedo continuar a tratarlos.

El siguiente paso es colocar los elementos en el formulario, tal como van a ir distribuidos. Una cosa a la que hay que acostumbrarse es que los componentes de FireMonkey no poseen la propiedad

Anchors, que tan útil nos es utilizando componentes de la VCL. A cambio podemos ver que la propiedad Align posee una cantidad de valores superior que nos permite realizar más cosas. En este caso utilizamos la propiedad Align y la propiedad Padding para ir fijando los controles al formulario tal y como deseamos.

Se trata de conseguir lo mismo, pero por un camino diferente…

Una vez que los componentes básicos ya están colocados necesito plasmar en pantalla una serie de coordenadas. Para ello he escogido el componente TPath. La idea es que permite representar una serie de puntos que forman una línea o camino.
La potencia y la velocidad llaman la atención, pero también la sencillez.

 

Basta con soltar el componente en pantalla y utilizando la propiedad Data, colocar lo siguiente para conseguir una imagen (o path) como el que veis más abajo (se puede hacer en diseño utilizando un pequeño formulario de edición):

M 0,2 L 1,2 L 1,5 L 2,5 L 2,2 L 3,2 L 1.5 0 L 0,2

Si lo pensáis un poco, no son más que coordenadas precedidas por el tipo de «unión» o «elemento» que queremos utilizar entre ellas; la Primera M se refiere a MOVER, las L se refieren a LINEA.

Es así de sencillo y así de potente.

Un código como este, os podéis imaginar lo que dará como resultado:

for I := -360 to 360 do begin
    n := DegToRad(i);
    res := Sin(n);
    //res := Sin(n) * Sin(n);
    //res := Tan(n);
    if (Str = '') then begin
      Str := 'M ' + FloatToStrF(n, ffFixed, 35, 10) +
              ' ' + FloatToStrF(res, ffFixed, 35, 10);
    end
    else begin
      Str := Str + ',' + 'L ' + FloatToStrF(n, ffFixed, 35, 10) +
             ' ' + FloatToStrF(res, ffFixed, 35, 10);
    end;
  end;
  Path1.Data.Data := Str;

Con esto más o menos ya está todo completo. Los componente básicos ya están escogidos.

He utilizado LiveBindings para poder mostrar los datos en de las coordenadas en un TStringGrid; También he aplicado un estilo visual a la aplicación y por último una par de animaciones para dar más vistosidad a la visualización del track.

La conclusión que saco, es que  sí se pueden hacer aplicaciones con FireMonkey, lo que pasa que tal vez en algunos aspectos debamos pensar las cosas con otro enfoque o hacerlas de otra manera. Seguramente está en los planes de Embarcadero (eso espero) ampliar sus funcionalidades y el número de componentes.

Por último comentar que me he quedado con la ganas de poder compilar la aplicación y generarla para iOS, pero por ahora, no dispongo de los medios para hacerlo. Sobre todo me queda la duda de qué hubiera pasado con una aplicación, de un programador como yo con «visión de Windows», al compilarla en MAC.

¿Algun error? ¿Algun problema? ¿Warinigs? ¿Algun elemento que no puedo utilizar?  ¿?¿?¿?

Si alguien se anima a hacerlo, le agradecería que nos comunicara el resultado y me enviara alguna pantallita.   ;-)

Os dejo los enlaces al código fuente y al ejecutable (este último comprimido con UPX) junto con algunos ficheros GPX que podéis usar para las pruebas.

<Descargar el código fuente>

<Descargar binario – EXE>

[wpfilebase tag=file id=1 /]

[wpfilebase tag=file id=2 /]

NOTA: Acabo de corregir un par de errores en el código y añadida la DLL (midas.dll) porque quien no la tenga no podrá ejecutar la demo (gracias Rafa).

Como siempre los comentarios, sugerencias, críticas y demás son bienvenidos.

Un saludo y hasta la próxima.

Categories: Aplicación, Delphi, FireMonkey, XE2 Tags: ,

RAD Studio XE2 World Tour: Barcelona

lunes, 3 de octubre de 2011 Sin comentarios
Share Button

Esta semana pasada ha sido “intensa”. Se han celebrado las presentaciones de RAD Studio XE2 en Barcelona (que es a la que ha asistido yo), en Madrid y en Lisboa. En este caso de la mano de DanySoft (partner oficial en la península) y con la colaboración de Pawel Glowacki.

Interesantes, como siempre, aunque esta vez ha sido “algo especial”, por varias razones.

   276472_113760532059812_562257430_n No cabe duda de que esta versión de Delphi (Rad Studio), es la que más expectación ha generado desde hace mucho tiempo. No hay más que ver los foros, las páginas web, los blogs y las salas de las presentaciones. Llenas, como yo no había visto en ninguna presentación antes. Conozco compañeros que este año se han quedado sin poder asistir debido a que se ha completado el cupo de asistentes (*).

   En mi caso, aprovecho las presentaciones para ver y saludar a antiguos compañeros y gente que conozco que trabaja como yo,con Delphi. En esta ocasión además, ha estado en Barcelona Salvador Jover (Delphi Solidario), con el que tengo una estrecha relación por temas blogs y relacionados con la Comunidad Hispana de Delphi.

   Especial también, en este caso, porque gracias a la gente de Danysoft,Salvador y yo, hemos tenido la oportunidad de charlar un rato con Pawel Glowacki después de las presentaciones; Hemos podido formularle algunas preguntas y trasladarle algunas inquietudes que vosotros nos habéis transmitido (ya sea a través de los blogs, como a través de los foros del Clubdelphi) tanto a mi, como a Salvador (**).

Recopilando información del evento aquí os dejo algunos enlaces.

El tema de la entrevista con Pawel, es un tema aparte. Salvador y yo tenemos a nuestros mejores hombres trabajando en ella (es decir, estamos él y yo     ;-D  ). En cuanto la tengamos disponible la publicaremos en los blogs y en los foros.

FOTOS:

 

MATERIAL Y DOCUMENTACIÓN:

Danysoft ha publicado ya, en su página web, las presentaciones (documentos) que han utilizado en las presentaciones. Echadles un vistazo. Interesantes sin duda,tanto para los que hemos podido asistir, como los que no habéis tenido oportunidad de hacerlo.

    • Sesión 1 | RAD Studio XE2. Dirección del producto
    • Sesión 2 | Demo – FireMonkey
    • Sesión 3 | LiveBindings
    • Sesión 4 | Delphi 64-bit, VCL Styles
    • Sesión 5 | DataSnap y la Nube
    • Sesión 6 | Movilidad y Conectores

Página y links de descarga.

IMAGENES:

    Por último as adjunto algunas capturas, de las presentaciones (tal vez algunas de ellas ya las podáis encontrar en los documentos PDF), otras son capturas de las demostraciones.
    Aplicando estilos a aplicaciones existentes:

Result

Result2b

    Una del diseñador de estilos:

DisenyadorEstilos

Código de ejemplo, para ejecutar animaciones en FireMonkey. Como veis aunque las animaciones son bastante complejas, el código por el contrario, es bastante simple.

AplicandoAnimaciones

      Una imagen de un proyecto generado en Delphi, cuando se está ejecutando (compilado con

XCode)

    en OSX y generando salida para iPhone, con el “IPhone Simulator”.

Compila_OSX

En este caso otra de las herramientas de RAD Studio (se trata de RAD PHP) con el diseñador para iPhone; Aquí desde el entorno RADPHP.

RADPHP_iphone

Vista en diseño de Delphi XE2 cuando estamos trabajando con elementos 3D. Los Layer3D nos permiten en diseño modificar las vistas en 3 dimensiones de los elementos que tenemos en el formulario (arrastrando esos elementos de color que hay en la imagen inferior).

trabajo_3d

Aquí podéis ver una imagen de la pantalla (y parámetros de configuración) del acceso a OSX desde el entorno de Delphi.

Config_OSX

Por último, una imagen de la aplicación que hemos visto antes, ejecutando en un entorno OSX.

Ejecutando

La mayoría de los ejemplos de las presentaciones se pueden encontrar en los que se adjuntan con RAD Studio XE2 o desde el repositorio de Embarcadero.

(*) Hoy mismo Danysoft ha realizado online la presentación de la versión XE2, para la gente que no pudo asistir “en vivo”; Supongo que en breve la tendrán disponible como video en su canal de youtube.

(**) Espero que en breve, podamos tener disponible para publicar, la entrevista con Pawel Glowacki. La publicaremos en los Blog, en Facebook y en los foros.  Paciencia….  ;-D

 

Un saludo.

Aplicación multiidioma con GNU Gettext

viernes, 5 de marzo de 2010 28 comentarios
Share Button

He probado algunos sistema de traducción para programas Delphi, entre ellos multiidioma2he de destacar los componentes de TsiLang Component Suite , que me parecen muy buenos y completos.

Estos días necesitaba un paquete gratuíto y revisando páginas y foros he llegado a GNU Gettext for Delphi and C++ Builder. Me parece un paquete muy sencillo de utilizar y por lo que he probado hasta ahora, cómodo y eficaz.

En esta entrada voy a explicar desde cero los pasos que he seguido para conseguir una aplicación multiidioma.

PREPARATIVOS

(1) GNU Gettext

Descargar desde la página «GNU Gettext for Delphi and C++ Builder» el programa de instalación. También se puede encontrar la última versión en SourceForge.

Una vez descargado el ficchero e instalado tendremos lo necesario para generar nuestros ficheros de traducción e integrarlos en el programa.

NOTA: Hay una versión especial compatible con Delphi 2009 que podemos descargar desde aquí, si estamos utilizando esta versión de Delphi..

Si se ha instalado correctamente, nos pedirá reiniciar el sistema.
Una vez instalado, si desde el explorador de Windows pulsamos Click derecho con el ratón sobre una carpeta, nos debería aparecer una nueva opción «Extract Translations to Template«.
generar_traducciones

(2) Poedit for Windows

Necesitaremos una herramienta para poder traducir (ya seamos nosotros o una tercera persona) los ficheros de traducción a los diferentes idiomas. Esto está pensado para que esa posible tercera persona (que puede no tener Dephi instalado)  pueda traducir un fichero sólo con esta herramienta (y el fichero .po como veremos después).

Descargamos el programa desde la página (http://www.poedit.net/) y lo nstalaremos.

Una vez realizados estos dos pasos previos, crearemos un pequeño proyecto de ejemplo donde realizar las pruebas.

Para ello, desde Delphi comenzamos una nueva aplicación y en el formulario generaremos algo similar a esto:

TRADUCCIÓN

(a) Preparar el  proyecto.

Una vez tenemos nuestra aplicación funcionando debemos preparnos para comentar lo necesario para traducción.
(1) Lo primero es añadir la unit gnugettext.pas a nuestro proyecto. Las units que usesn traducciones deberán tenerla en el uses.

NOTA: Si habéis realizado la instalación estandard debería estar en:
«c:\Archivos de programa\dxgettext\gnugettext.pas»

(2) Añadir al OnCreate de nuestros formularios el siguiente código:

// Traducir el formulario
TranslateComponent(Self);

(3) Preparar la estructura de directorios para organizar las traducciones. Dentro del directorio de la aplicación crearemos una carpeta llamada locale y dentro de ella un árbol de directorios similar al que se ve en la imagen.

directorios1

En este ejemplos, yo voy a utilizar 4 idiomas (es, en, fr, ca); Contando que el original va a ser el Español(es) debemos crear la estructura para los otros 3 (inglés, francés y catalán). Nos quedará un arbol de directorios como este:

directorios2

(b) Generar fichero de traducciones (.po)

(1) Para generar el fichero de traducciones del proyecto se debe extraer todas las cadena «traducibles» y almacenarlas en un fichero; Para ello basta con que, desde el explorador de Windows, pulsemos Click derecho sobre la carpeta del proyecto y seleccionemos la opción «Extract Translations to template».
Esto generará un fichero default.po en el directorio de la aplicación.

generar_traducciones

(2) Copiaremos este fichero dentro de los directorios LC_MESSAGES; Tantas copias como directorios tengamos. Después de eso tendremos varios ficheros .po; Uno en el directorio de la aplicación y uno dentro de cada carpeta de traducción:

appdir/appTest.exe
appdir/default.po
appdir/locale/en/LC_MESSAGES/default.po (Traducciones al inglés)
appdir/locale/fr/LC_MESSAGES/default.po (Traducciones al francés)
appdir/locale/ca/LC_MESSAGES/default.po (Traducciones al catalán)

(c) Traducir los ficheros.

En este punto ya se pueden abrir cada uno de los ficheros .po y traducirlo utilizando poedit. Una vez abierto el fichero con poedit, veremos una pantalla como esta:


Una vez finalizada la traducción de palabras y cerrado el programa veremos que en cada directorio aparecen 2 ficheros; El  default.po (original) y el de traducción llamado default.mo.
Repetimos esto con todos los ficheros de traducción.

(d) Cómo utilizar las traducciones en nuestro programa

Una vez los ficheros de traducción estén generados, para utilizarlos desde la aplicación añadirenmos el siguiente código a los botones de activación de los idiomas.

botones_idiomas

// para el catalán
UseLanguage('ca');
RetranslateComponent(Self);
 
// para el inglés
UseLanguage('en');
RetranslateComponent(Self);
...

Si ejecutamos la aplicación veremos que al pulsar los botones cambia es aspecto del formulario.

Para finalizar, aun nos queda un detalle, que es, que la cadena que aparece al pulsar el botón «Hola Mundo!»  no aparece traducida.

Para ello utilizaremos la función de traducción  _().
La llamada que actualmente está así:

MessageDlg('Hola', mtInformation, [mbOK], 0);

Pasará a colocarse así:

MessageDlg(_('Hola'), mtInformation, [mbOK], 0);

PASOS FINALES

Con eso nuestro programa debería quedar traducido completamente. Si movemos el EXE y la carpeta locale a cualquier otro sitio veremos que el programa funciona correctamente. Si sólo movemos el EXE, el efecto es que no aparace nada traducido.

Queda un último detalle, que es integrar las traducciones en el EXE, para que todo quede en el ejecutable y no debamos preocuparnos del directorio locale.

integrar_traducciones

Basta con pulsar click derecho sobre el EXE de nuestra aplicación desde el explorador de Windows, Seleccionar la opción «Embeb Translations» y seleccionar los ficheros de traducción que queremos integrar.

integrar_traducciones2

Con esto debería ser todo.

UPDATE: (20/04/2011)

Pues haciendo pruebas he llegado a obtener el mismo proble que comenta Sil en sus comentarios (en mi caso utilizando Delphi XE). Se trata de que al intentar añadir las traducciones al exe se obtiene un error con la referencia: «6637DB2E-62E1-4A60-AC19-C23867046A89».

Revisando por Internet, parece que se solventa sustituyendo unas constantes que hay en gnugettext.pas.

(1) Buscar esta sección en la unit gnugettext.pas:

  // DetectionSignature: used solely to detect gnugettext usage by assemble
  DetectionSignature: array[0..35] of AnsiChar='2E23E563-31FA-4C24-B7B3-90BE720C6B1A';
  // Embedded Header Begin Signature (without dynamic prefix written by assemble)
  BeginHeaderSignature: array[0..35] of AnsiChar='BD7F1BE4-9FCF-4E3A-ABA7-3443D11AB362';
  // Embedded Header End Signature (without dynamic prefix written by assemble)
  EndHeaderSignature: array[0..35] of AnsiChar='1C58841C-D8A0-4457-BF54-D8315D4CF49D';
  // Assemble Prefix (do not put before the Header Signatures!)
  SignaturePrefix: array[0..2] of AnsiChar='DXG'; // written from assemble

(2) Y sustituirlas por estas:

  // DetectionSignature: used solely to detect gnugettext usage by assemble
  DetectionSignature: array[0..35] of AnsiChar='6637DB2E-62E1-4A60-AC19-C23867046A89';
  // Embedded Header Begin Signature (without dynamic prefix written by assemble)
  BeginHeaderSignature: array[0..35] of AnsiChar='';
  // Embedded Header End Signature (without dynamic prefix written by assemble)
  EndHeaderSignature: array[0..35] of AnsiChar='';
  // Assemble Prefix (do not put before the Header Signatures!)
  SignaturePrefix: array[0..16] of AnsiChar='#0#0#0#0#0#0#0#0';//'DXG'; // written from assemble

Con este ambio ha desaparecido el error y se integran perfectamente las traducciones.

Espero que haya sido útil.

Espero comentarios, sugerencias, errores,… y demás.

Guardar configuración de Base de Datos

miércoles, 27 de enero de 2010 6 comentarios
Share Button

Es una cosa que en multitud de ocasiones hemos necesitado hacer; Ya sea con la configuración del acceso a Base de Datos, con la configuración de propiedades, guardar estado del programa, posición,…

En este caso en concreto (a raiz de este hilo en Clubdelphi) se trata de guardar la configuración de Base de Datos. El contenido importante de la propiedad ConnectionString.

Podemos almacenada TODO el contenido de la propiedad en un sólo elemento o guardar los elemtos relevantes de la conexión (Servidor, usuario, Base de Datos y password); En mi caso he preferido el segundo.

Para ello lo más sencillo es utilizar la clase TIniFile que provee Delphi.

Para guardar los valores utilizamos WriteString:

// Grabar
ini.WriteString(CONFIG_SECTION, 'User', edtUser.Text);
ini.WriteString(CONFIG_SECTION, 'password', edtPassword.Text);
ini.WriteString(CONFIG_SECTION, 'Server', edtServer.Text);
ini.WriteString(CONFIG_SECTION, 'BaseDatos', cbBD.Text);

Y para recuperarlos el equivalente ReadString:

// Cargar datos
edtUSer.Text := ini.ReadString(CONFIG_SECTION, 'User', STR_EMPTY);
edtPassword.Text := ini.ReadString(CONFIG_SECTION, 'password', STR_EMPTY);
edtServer.Text := ini.ReadString(CONFIG_SECTION, 'Server', STR_EMPTY);
cbBD.Text := ini.ReadString(CONFIG_SECTION, 'BaseDatos', STR_EMPTY);

Una vez tenemos los datos podemos montar la conexión y activarla.

const
STR_CONN = 'Provider=SQLOLEDB.1;Password=%s;Persist Security Info=True;' +
'User ID=%s;Initial Catalog=%s;Data Source=%s';
 
...
 
// Intentar conectar
ADOConnection1.ConnectionObject.ConnectionString :=
Format(STR_CONN, [edtPassword.Text, edtUser.Text, cbBD.Text, edtServer.Text]);

En este ejemplo además se utiliza otra conexión con casi los mismos parámetros introducidos, pero accediendo a la tabla master, para preguntar al servidor SQL por las Bases de Datos disponibles y así mostrarlas al usuario:

SELECT * FROM SysDataBases

Adjunto el ejemplo coon el código.

<DESCARGAR EJEMPLO>

En este caso, la conexión es con SQL Server mediante OLEDB. En general, para esta y otras conexiones os recomiendo una web creada específicamente al respecto:

ConnectionString.com

GlibWMI 1.6beta liberada (Sourceforge)

viernes, 22 de enero de 2010 2 comentarios
Share Button

Acabo de cerrar la versión 1.6 beta.

He subido la versión completa a Sourceforge.  A partir de ahora estará disponible allí completa (fuentes incluídos) con licencia GNU.

En esta última versión se han añadido nuevos componentes, nuevos métodos y corrección de algunos errores.

También se pueden descargar los ficheros desde aquí.

Por supuesto (y como siempre), se aceptan cualquier tipo de comentarios, dudas, sugerencias, críticas,…

ACTUALIZACIÓN: A partir de este momento se pueden descargar los fuentes vía SVN desde:

http://glibwmi.svn.sourceforge.net/svnroot/glibwmi/

Un saludo.

EProgrammerNotFound Exception…

miércoles, 20 de enero de 2010 Sin comentarios
Share Button

EProgrammerNotFound :-)

Es el error que muchas veces pienso que debería haber «saltado» en la aplicación, cuando reviso cierto código que debí escribir un día de esos en que mi cabeza está «nublada» (como los días de invierno…).

Pues Voilà!
A partir de la versión 2009 de Delphi ya está disponible y prometo usarla de aquí en adelante en mis nuevos desarrollos… ;-)

¿Que no os lo creéis? Basta con revisar la unit SysUtils.pas

Una imagen para los incrédulos:

Leído en el Blog de Marco Cantù.

GLibWMI Versión 1.3 (beta)

lunes, 11 de enero de 2010 Sin comentarios
Share Button

Acabo de empaquetar la versión 1.3 (beta) de la librería de componentes GLibWMI, basados en la WMI de Windows.

Básicamente he añadido nuevos componentes y he corregido algunos errores que incluía la demo general. Además he testado la librería en Delphi 2009 sin ningun problema a la hora de compilar. Doy por supesto que en todas las intermedias entre D7 y D2009 fucionará sin problemas.

Los componentes nuevos son:

  • CProcessInfo:  Información acerca de los procesos que hay ejecutándose en el sistema..
  • CServiceInfo:   Información detalleda de los servicios que hay instalados en el sistema..
  • CDesktopMonitorInfo:   Información detallada sobre el monitor o dispositivo de visualización que hay en el sistema.
  • CComputerSystemInfo:   Información acerca del sistema en General.
  • CStartupCommandInfo:    Información acerca de los procesos que se ejecutan automáticamente cuando el usuario hace el Login en el sistema.

<Ver más detalles>