Info Delphi

La magia de la programación a tu alcance

Música, maestro

Hola a todos,

hoy voy a mostrar un pequeño truco para hacer más entretenidas vuestras aplicaciones, pero hay que tener cuidado con el, porque se puede pasar de algo discreto y elegante a algo hortera con una sola línea de código.

Vamos a agregar a nuestra aplicación una pieza musical, que se reproduzca mientras se encuentre activa.

Lo primero que hay que tener presente es que, ya que reproduciremos música, esta debe ser, o de libre distribución, o que no esté sujeta a copyright, dado que, al menos en España, este hecho está regulado legalmente.

Una vez encontrada nuestra pieza musical, deberemos copiarla en el directorio de nuestra aplicación.

Ahora agregamos al formulario un componente TMediaPlayer

La idea consiste en establecer alguna de sus propiedades en tiempo de diseño, de forma que cuando se inicie nuestra aplicación, o al efectuar alguna operación nuestro usuario, se ponga en marcha el reproductor.

La principal es la propiedad FileName que deberemos rellenar con el nombre del fichero a reproducir, incluida la ruta completa.

Debemos habilitar la propiedad AutoOpen a true y si queremos que se reproduzca de forma continua, poner a true la propiedad AutoRewind.

Cambiamos ahora la propiedad visible a false y ya solo nos queda, programar el evento con el cual se pone en marcha el reproductor, por ejemplo en el formCreate:

procedure TForm1.FormCreate(Sender: TObject);
begin
MediaPlayer1.Play;
end;

Recuerda poner a disposición del usuario alguna opción que le permita detener el reproductor (una opción del menú, o un botón pequeño), programando su evento así:

procedure TForm1.Button1Click(Sender: TObject);
begin
MediaPlayer1.Stop;
end;

Saludos

Jueves, 19 febrero 2009 Posted by | Delphi | Deja un comentario

Crear formularios

Hola a todos,

cuando, en nuestra aplicación, necesitamos crear un nuevo formulario y utilizamos alguna de las opciones a nuestra disposición, Delphi (aunque esto se puede cambiar), coloca este en la lista de creación automática (puedes ver esa lista en las opciones del proyecto).

Este comportamiento puede resultar incluso cómodo en pequeñas aplicaciones, pero cuando hablamos de varias decenas de formularios, aparte de la lentitud a la hora de abrir la aplicación, podemos tener serios problemas de gestión de recursos.

Para evitar esto, vamos a ver la posibilidad de manejar nosotros mismos este proceso.

Lo primero de todo es, a la hora de crear un nuevo formulario, deshabilitar la creación automática, para eso nos vamos al menú Project y pulsamos sobre Options…, la pestaña Forms nos muestra dos listas

creacion-ventanas

Solamente necesitas pasar el formulario desde la ventana de la izquierda a la de la derecha para que Delphi deje en tus manos toda su gestión, la creación, el manejo y la liberación de los recursos que utiliza.

Para crear y poder usar esa ventana de forma Modal hay varias opciones, la más habitual es definir una variable del mismo tipo que el formulario y crearlo, de esta forma:

procedure TForm1.CrearNuevo(Sender: TObject);
var
fNuevo: TForm2;
begin
fNuevo := TForm2.Create(Application);
fNuevo.ShowModal;
fNuevo.Free;
end;

Como verás, no es difícil gestionar el formulario de esta forma, pero hay formas más eficientes de hacerlo. Por ejemplo, ¿que pasaría si hay un problema a la hora de crear el formulario? pues que la memoria usada para la variable no se liberaría; la solución, encerrar el código en una instrucción try, de esta forma:

procedure TForm1.CrearNuevo(Sender: TObject);
var
fNuevo: TForm2;
begin
fNuevo := TForm2.Create(Application);
try
fNuevo.ShowModal;
finally
fNuevo.Free;
end;
end;

De esa forma protegemos los recursos de nuestra máquina, pero aún se puede mejorar…

Hemos usado una variable que, lógicamente, ocupa un lugar en memoria, ¿podríamos prescindir de ella?

procedure TForm1.CrearNuevo(Sender: TObject);
begin
with TForm2.Create(Application) do
try
ShowModal;
finally
Free;
end;
end;

El resultado, un código más limpio, menos recursos ocupados y un procedimiento más seguro.

Saludos

Martes, 17 febrero 2009 Posted by | Delphi | 1 comentario

Listas de cadenas

Hola a todos,

hoy vamos a hablar de un algo que puede resultarnos muy útil, las listas de cadenas.

Las listas de cadenas, o lo que es lo mismo, el StringList, es un objeto de Delphi que nos permite manejar cadenas de caracteres en la memoria, aunque, para nuestro disfrute, se le agregaron métodos que nos permiten cargar o guardar cadenas en un fichero de texto.

Para empezar a usar un StringList, lo primero que debemos hacer es crearlo, y pare ello vamos a usar un código similar a este:

var Lista: TStringList;
begin
Lista := TStringList.Create;
...

A partir de este momento, y usando la variable creada, podemos agregar o eliminar cadenas de caracteres, bien desde nuestro código:

Lista.Add('Esta es mi primera cadena');

o bien desde un fichero de texto cualquiera:

Lista.LoadFromFile('Fichero.txt');

La verdadera potencia del objeto StringList, se obtiene a la hora de manejar las cadenas en memoria; podemos, por ejemplo, ordenar la lista de cadenas con solo usar el procedimiento Sort, de esta manera:

Lista.Sort;

Pero esto nos obliga a que cada vez que añadamos o eliminemos una entrada tengamos que llamarlo, así que podemos definir la propiedad Sorted como true, de forma que al agregar una cadena nueva, se coloque en el sitio correcto.

Podemos mostrar todas las cadenas:

Lista.Text;

o una entrada concreta:

Lista[4]

Se pueden agregar valores a la lista con Append, aunque Add nos devuelve la posición en la que agrega el valor a la lista, y con Insert, pasándole como primer parámetro, la posición donde colocar el valor.

Eliminar cadenas :

Lista.Delete(2);

Podemos cambiar la posición de los elementos dentro de la lista:

Lista.Move(1, 5);

lo que desplaza la cadena que hay en la posición 1 a la posición 5.

Otra función interesante es la búsqueda dentro de la lista, se puede usar la función IndexOf que, pasándole como parámetro una cadena, nos devuelve su posición o -1 en caso de no encontrarla; también podemos usar la función Find, en este caso, debemos pasar dos parámetros, el primero será la cadena a buscar y el segundo un entero en el que se almacena la posición, esta función devuelve true si ha encontrado la cadena o false en caso contrario.

Domingo, 15 febrero 2009 Posted by | Delphi | Deja un comentario