Delphi 12 Athens; Tratamiento de aplicaciones MDI
Interfaz MDI
Aunque seguro que no es una de las características más utilizadas hoy en día en los programas nuevos desarrollados en Delphi, es probable que tengamos programas antiguos que funcionan con esta interfaz de usuario. Yo mismo tengo alguno que todavía la usa.
Hasta ahora migrar esos programas a versiones nuevas podía ser un problema debido a que Microsoft ha declarado MDI como obsoleta y el funcionamiento no acaba de de ser el correcto. Problemas con el repintado, los estilos y con High DPI entre otros.
Para la versión 12 de Delphi se ha intentado solventar estos problemas implementando la solución desde el propio Delphi y no dejando que lo solvente Windows. El resultado no sólo es, que ahora ya podemos recompilar nuestras aplicaciones antiguas con la versión 12 y volver a tener lo mismo que teníamos antes, sino que con esta modificación, el resultado puede ser «mejor» todavía que el que teníamos en la versión antigua.
¿Porqué esto último?
Porque además de implementar las características del MDI para que funcionen correctamente, se ha añadido un nuevo componente, que si lo utilizamos (no es obligatorio), las mejorará sobre todo a nivel visual y de usabilidad.
Componente TFormTabsBar
Este nuevo componente visual en la versión 12 Athens, es el TFormTabsBar; Que será el encargado de gestionar múltiples formularios en un formato de pestañas, y que sería una posible optimización/modernización para los formularios MDI que conocemos.
De esta forma, podemos gestionarlos como pestañas como hacen los actuales navegadores (por ejemplo).
Si «soltamos» un componente TFormTabsBar en el formulario y lo asignamos a la propiedad VisualManager del formulario principal, ya tenemos el trabajo hecho, o mejor dicho, el componente hará todo el trabajo por nosotros.
Qué podemos esperar de este componente:
- Al crear un nuevo formulario (para optimizar podemos maximizarlo) se nos añadirá como una nueva pestaña.
- Sincroniza la pestaña y el formulario; Si cerramos uno de los 2 se cerrará el otro (y se liberará la memoria si es necesario).
- Gestiona un menú con todas las pestañas creadas.
- Permite algunas opciones de personalización de las pestañas como iconos, botón de cerrado,…
- Permite arrastrar pestañas creadas en la barra para reorganizarlas.
- Y muchas otras opciones…
Actualmente hay poca documentación en la docWiki. Una breve documentación sobre el componente TFormTabsBar la podéis encontrar aquí. Algo sobre las características que tiene, aunque poco técnica y de utilización.
La propiedad VisualManager de los formularios, podéis encontrarla aquí.
Proyectos VCL con Interfaz MDI
El asistente de Delphi 12 para crear proyectos nuevos, al seleccionar MDI, ya incluirá en el nuevo proyecto este componente TFormTabsBar. Y además vendrá configurado con algunas opciones por defecto.
Si por el contrario, queremos adaptar un proyecto antiguo para utilizarlo, simplemente bastará con 2 pasos:
- «Soltar» en el formulario principal un nuevo componente TFormTabsBar.
- Asignar a la propiedad VisualManager del formulario principal, el componente recién creado.
Con estos 2 pasos ya deberíamos tener la aplicación configurada. Ya podemos probar y veremos que la gestión básica de formularios/pestañas ya se hace utilizando la nueva barra.
Aquí podéis ver una aplicación MDI generada con una versión anterior de Delphi y a la que he hecho las modificaciones comentadas antes (y aplicado un estilo).
Aunque haya comentado en la entradas sobre las aplicaciones MDI, la gestión de formularios en forma de pestaña es también aplicable a aplicaciones SDI, La interfaz IFormVisualManager y la propiedad VisualManager están implementadas en la clase TCustomForm, por lo tanto está disponible siempre para todos los derivados de esa clase.
La interfaz IFormVisualManager se define así:
{ IFormVisualManager } IFormVisualManager = interface ['{0C18B150-6B89-4D7E-BC8A-5FCE7D9DB5F4}'] function AcceptForm(AForm: TForm): Boolean; procedure AddForm(AForm: TForm); procedure DeleteForm(AForm: TForm); procedure FormWndProc(AForm: TForm; Message: TMessage); end; |
Incluye métodos básicos que manejan objetos de la clase TForm, de forma que se pueden administrarse formularios . La idea de hacerlo así, es que los desarrolladores puedan crear sus propios «administradores visuales» (VisualManager) creando controles que implementen esa interfaz, de forma similar a como se implementa en el TFormTabsBar.
Como siempre, los comentarios y sugerencias son bienvenidos.
Hasta la próxima!
Embarcadero MVP.
Analista y Programador de Sistemas Informáticos.
Estudios de Informática (Ingeniería Técnica Superior) en la UPC (Universidad Politécnica de Barcelona).
Llevo utilizando Delphi desde su versión 3. Especialista en diseño de componentes, Bases de Datos, Frameworks de Persistencia, Integración Continua, Desarrollo móvil,…