Saludos,
Simplemente queria compartir este componente llamado
FireMonkey Container, desarollado por David Millington
El componente es open-source y se distribuye bajo la licencia MPL
Esta es la pagina principal:
Parnassus: FireMonkey Container
Basicamente lo que permite es utilizar Forms Firemonkey en aplicaciones VCL. Oficialmente, no se pueden mezclar ambos frameworks, pero este componente permite hacerlo y funciona bastante bien (hay algunos bugs o problemillas)
Osea que uno puede tomar sus aplicaciones VCL de toda la vida, y agregar los nuevos y bonitos controles FMX, o algunos otros componentes muy utiles como las animaciones. De esta manera se puede ir probando un poquito el nuevo framework sin desprendernos totalmente de la VCL y su indiscutible madurez, estabilidad y performance
Tambien es posible incrustar Forms 3D sin ningun problema
La instalacion del componente es la misma de siempre: se abre el paquete acorde a nuestra version de Delphi, y se instala el componente. Luego sera necesario incluir en el Library path la ruta donde esta el componente
El uso es muy sencillo, solamente hay que tener un par de recaudos (explicado
acá en ingles)
1. Colocamos un componente TFireMonkeyContainer en nuestro form VCL
2. La parte "tediosa" o "rara" ya que el IDE no soporta esto directamente: Hay que agregar a nuestro
Project Group un nuevo proyecto, esta vez un proyecto multi-device (Firemonkey)
Luego, arrastramos la unidad que contiene el form FMX que queremos incrustar, y soltamos sobre el proyecto VCL. Se va a abrir un cuadro de dialogo advirtiendonos de los problemas al mezclar los frameworks. Aceptamos y luego...
3. Como conectar el Form FMX con el componente:
a. La mas sencilla pero que tiene algunos problemas, es, en tiempo de diseño, usar la propiedad FireMonkeyForm del componente y referenciar al form que queremos incrustar en nuestra aplicacion VCL. Es neceasrio que el form en cuestion este abierto para que el IDE lo vea. Es un proceso sencillo y muy similar a lo que seria referenciar a un
TImageList por ejemplo
Limitaciones: En tiempo de diseño, no se puede editar el form FMX desde el formulario VCL, es como una especie de vista previa; para editarlo, debemos abrir el form FMX
b. De manera similar, se puede asignar el valor de esta propiedad en tiempo de ejecucion. En particular yo siempre uso esta alternativa
c. Mediante los eventos
OnCreateFMXForm y
OnDestroyFMXForm. Estos eventos nos permiten controlar el tiempo de vida de nuestro Form FMX. Esta forma es la recomendada por David
Otra nota importante: El orden de las unidades de nuestro form VCL (el host, es decir, en el que incrustamos el form FMX). El orden debe ser tal que
primero se referencia a la unidad
FMX.Forms y luego a la unidad
Vcl.Forms. Esto es porque para ambos frameworks, la clase para los forms se llama "TForm", y en Delphi quien "gana" cuando hay colisiones de calificadores es el que es referenciado por la ultima unidad en cuestion. Si invertimos el orden, vamos a tener problemas en tiempo de ejecucion cuando se active el mecanismo de Streaming (lectura del .dfm)
Serie de articulos de David (en ingles)
TFireMonkeyContainer – a VCL control for mixing VCL and FMX
TFireMonkeyContainer update: bugs fixed, features added
TFireMonkeyContainer bugfix for instances created at runtime
VCL drag/drop support, support for XE2 and XE3 reintroduced, and more
Repositorio del proyecto:
GitHub
Saludos