Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > FireMonkey
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Componente FMX Container

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

Última edición por AgustinOrtu fecha: 14-06-2016 a las 22:39:39.
Responder Con Cita
  #2  
Antiguo 15-06-2016
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Gracias por la información Agustín.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 15-06-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Por cierto, recomiendo a todo aquel que use el componente que incorpore estas dos actualizaciones a su codigo fuente:

- Property AllowTabKey to allow the inner FMX form to handle Tab key eventshttp://

- Arrow keys do not always work

Ambos se corresponden a dos pull request del desarrollador yonojoy

Pueden encontrar mas informacion sobre los bugs que se solucionan en la seccion Issues
Responder Con Cita
  #4  
Antiguo 15-06-2016
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Muchas gracias, Agustín. Suena muy interesante.
Responder Con Cita
  #5  
Antiguo 15-06-2016
Avatar de ElKurgan
[ElKurgan] ElKurgan is offline
Miembro Premium
 
Registrado: nov 2005
Posts: 1.232
Poder: 20
ElKurgan Va camino a la fama
Thumbs up

Muchas gracias por el aporte

Saludos
Responder Con Cita
  #6  
Antiguo 15-06-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is online now
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Responder Con Cita
  #7  
Antiguo 15-06-2016
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Hace tiempo (y la entrada data del 2011) ya hablé sobre este tema de mezclar ambos tipos de formularios en un proyecto VCL.

Una opción que personalmente no me parece mala es utilizar packages como forma de separar conceptualmente las 2 plataformas en los proyectos. En esa entrada se explica cómo hacerlo utilizando packages y directamente, tal y como hace ese componente.

En su día se utilizaba la unit DSharp.Windows.FMXAdapter.pas de Stefan Glienke que os adjunto a este mensaje.

Lo he probado y sigue funcionando bien, salvo que hay que cambiar este código:

Código Delphi [-]
    PlatformWin.SetWindowRect(FForm, RectF(BorderWidth, BorderWidth,
      ClientWidth + BorderWidth, ClientHeight + BorderWidth));

Por este otro, simplemente porque a partir de XE3 el acceso al procedimiento SetWindowRect hay que hacerlo de forma ligéramente distinta.

Código Delphi [-]
var
  WindowService : IFMXWindowService;
begin
  ... 
    WindowService := TPlatformServices.Current.GetPlatformService(IFMXWindowService) as IFMXWindowService;
    WindowService.SetWindowRect(FForm, RectF(BorderWidth, BorderWidth,
      ClientWidth + BorderWidth, ClientHeight + BorderWidth));
...

Por si alguien quiere hacer las pruebas sin necesidad de instalar nada extra, simplemente añadiendo esta unit al proyecto.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 15-06-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Hola Germán, me parece muy interesante tu aporte, ya pagaré un vistazo a la implementación de DSharp.

Según lo comentado fmx container esta inspirado por DSharp y les corrige algunos bugs
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Componente que ejecute un evento de un componente asociado r_e_g_2007 OOP 4 27-06-2011 20:15:48
componente, editor de componente y editor de propiedades r_e_g_2007 OOP 2 24-06-2011 19:47:40
como comparar cada linea de un componente Memo1 con un componente ListBox1 soma25 C++ Builder 1 31-10-2007 11:02:22
MDI container La__X .NET 3 22-05-2006 23:38:57
Apuntar una propiedad de un componente a otra de otro componente Majo Varios 10 24-03-2004 20:46:39


La franja horaria es GMT +2. Ahora son las 12:26:07.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi