Info Delphi

La magia de la programación a tu alcance

Internacionalización

Hola a todos,

como ya hablamos en la entrada Bibliotecas de enlace dinámico, uno de los usos que se les puede dar a las DLLs es crear versiones en distintos idiomas para distribuir junto con tu aplicación, de forma que un solo programa puede utilizarse en diversos países.

Para empezar, debemos aprender a usar una técnica que nos permita traducir de forma fácil las cadenas de texto de nuestro programa.

La aparición de una cadena en cualquier sentencia, del tipo:

if condicion then
sCadena:= 'La solución mañana';

debería ser substituida por

resourcestring
sSolucion = 'La solución mañana';
if condicion then
sCadena:= sSolucion;

La directiva resourcestring define las cadenas de texto en un fichero de recursos, donde se identificarán con un número único, nosotros en nuestra aplicación la usaremos como cualquier constante de cadena.

Una vez realizado este paso con todas las cadenas de nuestra aplicación, debemos generar los ficherode recursos, para eso vamos a utilizar una utilidad proporcionada por el propio Delphi, abre el menú File, y selecciona la opción New…, pulsa sobre “Resource DLL wizard”

Resource DLL wizard

Al llegar a la pantalla de idiomas, selecciona aquellos para los que quieres generar el fichero de recursos

ficheros

Pulsa sobre AddFile y selecciona todos aquellos ficheros de formulario (dfm) que quieras traducir.

Despues de algunas preguntas, se te mostrará la pantalla de gestión de traducciones

Gestor de traducciones

Ve traduciendo todas las cadenas y recursos, hasta completar la versión para cada idioma.

Como es un proyecto que requiere su tiempo, te dejo que trabajes tranquilo, mañana te enseñaré a generar las DLL traducidas.

Saludos.

Anuncios

Viernes, 16 enero 2009 Posted by | Delphi | Deja un comentario

Ventanas deslizantes

Hola a todos,

hoy vamos aver un pequeño truco que puede resultar muy aparente para tus aplicaciones, las ventanas deslizantes.

Crea una nueva aplicación con dos formularios, o selecciona alguna que ya tengas preparada, selecciona el formulario que quieres deslizar y cambia su posición en alguna de las propiedades Top o Left, según quieras que la ventana se mueva de forma vertical  o se desplace de forma lateral, de manera que quede fuera de los margenes de la pantalla.

Vamos a escribir el código que desplazará la pantalla, para ello debes agregar un botón o una opción de menu en el primer formulario y escribir en su evento Click.

{Vamos a desplazar el formulario para que se desplace
hacia el centro de la pantalla, apareciendo por la derecha}
procedure TForm1.Dentro1Click(Sender: TObject);
var
  Posicion: integer;
begin
  {Colocamos el formulario a desplazar encima de todos los demás}
  Form2.FormStyle:= fsStayOnTop;
  {Y lo mostramos}
  Form2.show;
  {Recuperamos la posición actual del formulario
  y calculamos el centro de la pantalla}
  for posicion:= Form2.Left downto (Screen.width -Form2.Width) div 2 do begin
    {Desplazamos el formulario}
    Form2.Left:= posicion;
    {Colocamos un retardo para que no parpadee}
    sleep(10);
  end;
end;

(Nota: Si quieres que aparezca desde la parte izquierda de la pantalla, deberás cambiar downto por to)

Ahora vamos a hacer desaparecer el formulario de la misma forma.

{Procedimiento que en vez de cerrar el formulario
hara que desaparezca por la derecha de la pantalla}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Posicion:  integer;
begin
  {Recuperamos la posición actual del formulario y
  calculamos el punto máximo de la pantalla}
  for posicion:= Form2.Left to Screen.width + 10 do begin
    {Desplazamos el formulario}
    Form2.Left:= posicion;
    {Colocamos un retardo para que no parpadee}
    sleep(10);
  end;
end;

(Nota: Si quieres que desaparezca por la parte izquierda de la pantalla, deberás cambiar to por downto y usar la propiedad Form2.width cambiandola a signo negativo)

Si deseas que el formulario se desplace de forma vertical, debes utilizar la propiedad Top en las rutinas.

Saludos

Jueves, 15 enero 2009 Posted by | Delphi | Deja un comentario

Bibliotecas de enlace dinámico

Hola a todos,

Hoy vamos a ver las llamadas bibliotecas de enlace dinámico (DLL).

Las DLL no son más que ejecutables compilados que contienen funciones a las que puedes llamar desde tus programas en tiempo de ejecución.

Algunas de sus ventajas es que puedes tener un programa ya en explotación , al que, modificando sus DLL’s, puedes cambiar en alguno de sus aspectos; podrías también tener varias versiones del mismo programa en distintos idiomas; o incluso personalizar un programa genérico de forma que se adapte a un cliente particular; solo échale imaginación…

Vamos ahora a ver como podemos implementar nuestras propias DLL’s, para eso crearemos una que solamente nos va a proporcionar un mensaje en pantalla, más adelante iremos implementando otras funcionalidades.

Inicia Delphi y escoge la opción de crear una nueva DLL en el menú File opción New…

Elegir una nueva DLL

Se nos abrirá el editor con un esqueleto denominado Library project1, vamos a modificarlo de forma que nos quede con el siguiente código:

Library Ejemplo;

uses
  Sysutils,
  Classes,
  Dialogs;

procedure MostrarMensaje(Texto: string); stdcall;
begin
    ShowMessage(Texto);
end;

{Aquí definiremos las funciones que van a ser exportadas}
exports
    MostrarMensaje;
begin
end.

Ahora podemos guardar nuestro proyecto y despues compilarlo para crear nuestra nueva DLL usando la opción build Project1 que aparece en el menú Project

Compilando la biblioteca

Ya tenemos lista la biblioteca, para probarla crea una nueva aplicación, desde el menú File, opción New application, agrega un botón y modifica el código del proyecto para que aparezca como este:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

{Declaramos el procedimiento externo de la DLL}
procedure MostrarMensaje(Texto: string); stdcall external 'Ejemplo.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  {Llamamos al procedimiento de nuestra DLL}
  MostrarMensaje('Probando nuestra nueva DLL');
end;

end.

Y aquí tenemos el resultado

Mostrando nuestro mensaje

Miércoles, 14 enero 2009 Posted by | Delphi | 1 comentario

Redimensionando

Hola a todos,

y como el movimiento se demuestra andando, vamos a empezar con un pequeño problema que suele aparecer a la hora de programar una aplicación, redimensionar los formularios.

Lo normal, al diseñar una aplicación, es ajustar los formularios a la resolución de tu escritorio pero, ¿que pasa si el usuario final tiene (o modifica) la resolución del suyo de forma diferente?

Lo más probable es que el formulario aparezca con las típicas barras de desplazamiento para que puedas ver los controles “desaparecidos”.

La solución pasa por usar el método scaleby, este nos permitirá modificar las dimensiones del formulario, ajustándolo según los parámetros pasados, así, por ejemplo, podemos pasarle la relación entre el tamaño que usamos para su diseño y el tamaño actual del escritorio, o incluso incorporarlo como una opción de menú, que permita redimensionar de forma manual el formulario.

La primera idea la resolveriamos así

procedure TForm1.FormCreate(Sender: TObject);
var
     Ancho: double;
begin
     Ancho := min( clientwidth / Form1.width, clientheight / Form1.height );
     Form1.ScaleBy( trunc( Ancho * 100 ), 100 );
end;

Este procedimiento modificará el tamaño del formulario en relación a como fue diseñado, de forma automática, al crearse, si prefieres darle la opción al usuario de modificarla a mano podrías usar

procedure TForm1.Crecer;
begin
     Form1.ScaleBy(125, 100);
end;

Esta rutina, lo que hace es incrementar el tamaño del formulario en un 25% con respecto al tamaño original.

Saludos.

Martes, 13 enero 2009 Posted by | Delphi | Deja un comentario

Inicio

Hola a todos,

esta es la primera entrada de lo que espero sea un lugar de encuentro para los programadores de Delphi.

Delphi es un entorno de desarrollo que utiliza como lenguaje de programación una versión de Pascal llamada Object Pascal.

Esta desarrollado por la empresa CodeGear, escindida de la empresa Borland, donde se creó originalmente.

Martes, 13 enero 2009 Posted by | Delphi | Deja un comentario