Introducción
Parte I. Programación Básica
Parte II. Modificando la interfaz Gráfica "básica"
Parte III. TActionManager en Acción
Parte IV. Modificando la "nueva" Interfaz Gráfica
Introdudcción
Seguramente en algún momento de tu vida de programador has usado el componente TMainMenu para diseñar tus menús de sistema o has utilizado componentes como TButton, TSpeedButton, TBitBtn, etc.. para ejecutar acciones en tus programas. Sin embargo, a pesar de ser algo "normal" esta forma de trabajar con los eventos de un objeto, a la larga nos puede provocar mas trabajo que ventajas cuando deseamos rediseñar la interfaz gráfica de nuestras aplicaciones.
¿Por que digo esto? Bueno, cuando deseamos modificar la interfaz gráfica de nuestras aplicaciones y queremos por ejemplo, eliminar un TMainMenu y en su lugar crear botones tenemos que "transferir" el código escrito en los eventos del menú a los botones que vamos a crear, si nuestra aplicación es muy simple no tendríamos ningún problema en hacer esto, pero si nuestro proyecto contiene decenas de eventos esto llegaría a ser una actividad titánica y con un margen de error muy alto dependiendo de la complejidad de nuestro proyecto.
Para ello, Delphi nos obsequia un componente de nombre TActionManager, que tiene como objetivo principal el de separar la interfaz gráfica de nuestra lógica de negocio, es decir vamos a obtener una aplicación de dos capas (la capa visual y la capa lógica) algo que desde mi punto de vista es muy funcional e interesante.
Parte I. Programación Básica
Para iniciar este tutorial vamos a crear una aplicación típica con un TMainMenu para después entrar de lleno con el componente TActionManager
Pegamos en nuestra forma los siguientes objetos:
1 TMainMenu
2 TEdit
4 TLabel
Agregamos las opciones: (Suma,Resta,Multiplicación,División,Salir) en nuestro TMainMenu.
Escribimos el codigo de los eventos a cada una de las opciones de nuestro menú, que en este ejemplo vamos a tratar de hacerlo muy básico.
procedure TForm2.Divisin1Click(Sender: TObject); begin label1.Caption := format('%f',[strtoint(edit1.Text) / strtoint(edit2.Text)]); end; procedure TForm2.Multiplicacin1Click(Sender: TObject); begin label1.Caption := format('%d',[strtoint(edit1.Text)*strtoint(edit2.Text)]); end; procedure TForm2.Resta1Click(Sender: TObject); begin label1.Caption := format('%d',[strtoint(edit1.Text)-strtoint(edit2.Text)]); end; procedure TForm2.Suma1Click(Sender: TObject); begin label1.Caption := format('%d',[strtoint(edit1.Text)+strtoint(edit2.Text)]); end; procedure TForm2.Salir1Click(Sender: TObject); begin close; end;
Compilamos y ejecutamos nuestro programa ejemplo y deberá de funcionar correctamente
Ya tenemos creada una pequeña aplicación con el típico Menú, pero que pasa si ahora deseo cambiar el formato de mi interfaz gráfica eliminando el TMainMenu y en su lugar mostrar botónes para ejecutar las operaciones.
Los pasos a seguir serían:
Eliminar el objeto TMainMenu, agregamos 5 TButton y asignamos en la propiedad caption de cada botón la operación correspondiente, algunos lo que hacemos es asignar el nombre en la propiedad name del objeto para que evitar "dolores de cabeza" a la hora de identificar los objetos.
Posteriormente tenemos que "transferir" el código asignado a cada una de las opciones del TMainMenu a cada uno de los botones.
Esta tarea como ya les mencioné, en aplicaciones pequeñas no tendriamos mucho problema para hacerlo, pero, en aplicaciones grandes esto sería una tarea bastante laboriosa y con cierto margen de error.
Parte III. TActionManager en Acción
Ya hemos visto el uso de los componentes básicos y sus eventos, ahora veremos las grandes diferencias y las ventajas de usar el componente TActionManager.
Para comenzar vamos a crear una nueva aplicación y agregamos los siguientes componentes:
1 TActionManager
2 TEdit
4 TLabel
Damos doble clic en el componente TActionManager y veremos una ventada donde vamos a agregar las acciones que queremos realizar dando clic en el botón New Action (Ins), vamos a realizar el mismo ejemplo que con los componentes básicos por lo que crearemos 5 acciones en el editor del TActionManager.
Para comenzar ordenadamente, vamos a asignar el nombre de cada una de las acciones en la propiedad Name en el inspector de objetos como se muestra en la siguiente figura:
Escribimos el código en cada una de las acciones del TActionManager dando doble clic en cada una de ellas, quedando de la siguiente forma:
procedure TForm2.DivisionExecute(Sender: TObject); begin label1.Caption := format('%f',[strtoint(edit1.Text) / strtoint(edit2.Text)]); end; procedure TForm2.MultiplicacionExecute(Sender: TObject); begin label1.Caption := format('%d',[strtoint(edit1.Text)*strtoint(edit2.Text)]); end; procedure TForm2.RestaExecute(Sender: TObject); begin label1.Caption := format('%d',[strtoint(edit1.Text)-strtoint(edit2.Text)]); end; procedure TForm2.SumaExecute(Sender: TObject); begin label1.Caption := format('%d',[strtoint(edit1.Text)+strtoint(edit2.Text)]); end; procedure TForm2.SalirExecute(Sender: TObject); begin close; end;
Hasta este punto ya hemos terminado con la capa lógica de nuestro proyecto, ahora procederemos a "diseñar" la capa visual y para ello comenzaremos por crear una nueva categoría donde estarán agrupadas nuestras acciones.
Seleccionamos cualquier acción y en la propiedad Category de la acción en el inspector de objetos "escribimos" el nombre de la categoría que deseamos (por ejemplo Menu) y automáticamente la acción seleccionada pertenecerá a dicha categoría.
http://egostar.delph...s/Categoria.PNG
Como podemos observar, la acción suma ya no está en el bloque de acciones sin categoría, ahora seleccionamos las demás acciones y le asignamos la categoría Menu.Ya tenemos agrupadas todas nuestras acciones en la categoría Menu, ahora decidamos como vamos "mostrar" nuestras acciones, vamos a diseñar un Menú de acciones como si fuese el componente TMainMenu.
En el editor de acciones del TActionManager vamos a la pestaña ToolBars y creamos una nueva Barra de Herramientas.
http://egostar.delph...es/ToolBars.PNG
Ahora, regresamos a la pestaña Actions y "arrastramos" la categoría Menu en la Barra de Herramientas que se ha creado.
http://egostar.delph...s/Arrastrar.PNG
Como podemos observar, ya tenemos un Menú igual que lo teniamos con el componente TMainMenu, con la diferencia que en este momento el programa ya puede ser ejecutado y con las opciones del Menú ligadas a cada una de sus acciones, además de que los caption de las opciones del menú ya tienen el nombre correspondiente a cada una de ellas.Compilamos y corremos nuestro programa y deberá funcionar igual que con el TMainMenu.
Parte IV. Modificando la "nueva" Interfaz Gráfica
Una de las ventajas principales del componente TActionManager como ya lo mencioné, es la de separar la capa lógica de la capa visual de nuestros proyectos, de tal forma que modifcar nuestra interfaz gráfica es por demás sencilla.
Con el mismo ejemplo de sustituir el menú de acciones por botones, vamos a proceder de la siguiente forma:
- Eliminamos la barra de herramientas donde tenemos nuestras acciones, no nos preocupemos que nuestro código no tiene ninguna relación con dicha barra.
- Agregamos 5 botones en nuestra forma
- Asignamos la propiedad Action de cada botón con la acción que deseamos sea ejecutada.
Como pueden observar, el botón automáticamente cambia su propiedad Caption con el nombre de la acción, hacemos esto para todos los botones.
En este momento todo el código escrito en las acciones del TActionManager está automáticamente asignado a cada botón, si ejecutamos nuestra aplicación, veremos que el sistema es ejecutado sin haber "transferido" ninguna línea de código lo que nos muestra que usar este componente, además de estandarizar nuestra aplicación nos brinda mayor flexibilidad para modificar nuestra interfaz gráfica con un mínimo de esfuerzo.
Existen otras ventajas al usar este tipo de programación como puede ser la distribución de trabajo en equipo, es decir, mientras un programador se dedica al desarrollo de la capa lógica otro puede estar a cargo del diseño de la capa visual.
Con esto terminamos este tutorial básico del uso del componente TActionManager, en un futuro publicaré mas ventajas de este excelente componente.
#indice
Salud OS