Lo nuevo de FireMonkey en XE7 (TMultiView)

Hola

El día de hoy vamos a revisar un componente muy interesante llamado MultiView. Éste componente permite la implementación de interfaces gráficas maestro-detalle, es decir, el panel principal (master) contendrá los controles de la aplicación y el panel detalle (detail) muestra la información basada en los controles del panel maestro.

La siguiente pantalla muestra un ejemplo de interfaz maestro-detalle. En el panel principal (izquierda), se introduce una posición geográfica y en el panel de detalles (derecha) podrá ver el mapa Google apropiado.

703px-TMultiViewSample

Siguiendo el tutorial que se encuentra en la docwiki de embarcadero pude desarrollar la app para Android, que bien pudo haber sido para iOS o para Windows, o porque no, hacer una aplicación para todas y cada una de las plataformas, como lo hice con la serie de RAD Studio XE4.

Me parece un componente muy interesante y muy sencillo de utilizar, el panel de controles se oculta automáticamente y se muestra deslizando el borde de la pantalla, algo como se muestra en la siguiente imagen:

800px-TMultiView_Drawer

Así quedó mi diseño siguiendo el ya mencionado tutorial:

Los invito a poner en marcha su imaginación y desarrollen alguna aplicación con éste componente, les aseguro que quedarán gratamente sorprendidos,

Nos leemos.

Descargas


Si lo deseas puedes descargar el código fuente de ésta entrada, espero sea de utilidad.


Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

Lo nuevo de FireMonkey en XE7

Hola amigos

Vamos a ver en varias entradas los cambios que se han hecho con el lanzamiento de RAD Studio XE7 pero específicamente los cambios hechos a FireMonkey.

En XE6 se tenía que elegir entre tres tipos de aplicaciones FireMonkey, aplicaciones de escritorio, Aplicaciones Metrópolis y aplicaciones móviles como lo podemos observar en el IDE de XE6.

En RAD Studio XE7 se ha creado una sóla opción donde se puede elegir tanto aplicaciones de escritorio como aplicaciones móviles, de hecho permite la creación de todas las plataformas soportadas, a ésta nueva forma de crear aplicaciones se le ha llamado «Multi-Device Aplication»  y otra donde podemos crear aplicaciones Metrópolis.

Ésta característica Multi-Device está soportada en dos de las tres grandes bibliotecas de RAD StudioFireMonkey y la RTL, la VCL no está soportada en ésta característica.

Personalmente me ha gustado mucho la nueva forma de acceder a las aplicaciones FireMonkey con la Multi-Device com lo podemos ver en las siguientes imágenes.

Como podemos ver, contamos con las 4 grandes plataformas Windows, OSX, iOS y Android y dentro de ellas podemos destacar la gran variedad de dispositivos incluyendo Google Glass.

Lo dicho, me gusta mucho ésta nueva versión de RAD Studio que cuenta con muchas mejoras y muchas cosas nuevas que iremos viendo poco a poco.

Nos leemos 🙂


Ésta entrada y cualquier código fuente publicado en ésta bitácora, son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

Migrando y probando RAD Studio XE7

Que tal amigos

A mediados de ésta semana  que está por terminar,  descargué e instalé RAD Studio XE7 y al comenzar la migración de una de las aplicaciones que he desarrollado en Delphi XE6 a Delphi XE7, me encontré con un pequeño detalle al ejecutar la app en mi teléfono móvil.

Como preámbulo les comentaré que el programa consume un Servicio Web para obtener el Tipo de Cambio de diversas monedas (Exchange Rate) el cual funcionaba perfectamente en XE6, pero con XE7 me encontré con un error desconocido para mí hasta el momento,

No Selected DOM Vendor

Me puse a investigar porqué  en Delphi XE7 me mostraba dicho error y en Delphi XE6 no, en poco tiempo encontré la solución en la Wiki de Embarcadero.

El tema es porque RAD Studio utiliza de forma predeterminada el proveedor MSXML, y si no se especifíca otro proveedor (OmniXML o AEDOM) nuestras aplicaciones no soportarán otras plataformas mas que Windows y nos mostrará el error que da pie a ésta entrada «No Selected DOM Vendor».

Si requerimos de utilizar otras plataformas el proveedor OmniXML es la mejor opción (por cierto es una de las nuevas características en ésta versión en el rubro de «mejoramiento de la RTL y la VCL», como se puede ver en la lista de nuevas características).

Para resolver el problema de multi plataforma de mis aplicaciones usé la siguiente compilación condicionada:

 
uses
// …
{$IFDEF MSWINDOWS}
    Xml.Win.msxmldom
{$ELSE}
    Xml.omnixmldom
{$ENDIF};

Con ésta compilación condicionada le indicamos que cuando sea una aplicación para la plataforma Windows utilice el proveedor MSXML y si es otra plataforma utilice el proveedor OmniXML.

Con éste cambio, mi aplicación funcionó sin problemas y ya puedo continuar con mi proyecto.

Hasta la próxima

Presentación de RAD Studio XE6 en la Ciudad de México

 

 

Lunes 2 de Junio 8:30 horas, se abren las puertas del elevador frente a la mesa de recepción de la presentación, ya algunos compañeros estaban sentados en su lugar esperando a que diera inicio.

Como siempre, café, agua, jugo y panecillos antes y durante la presentación donde nos mostraron las nuevas características de RAD Studio XE6.

La presentación de parte de Fernando Rizzato y como siempre la apertura de parte de Francisco Miranda, Gerente Comercial de GOPAC.

Muchas caras nuevas, algunas caras conocidas y un producto que siempre nos muestra sus bondades y sus nuevas características.

Muy interesante Tethering, acceso a la nube a través de BaaS y REST, mejoras a la VCL y un A++ Builder con todas las opciones que Delphi ya tiene.

Y bueno, no podían faltar las fotos del recuerdo.

 

 

 

Nos vemos en la siguiente presentación.

 

AppMethod

appMethod

Hola amigos, la intención de ésta entrada es la de mostrar mi primer contacto con ésta aplicación llamada AppMethod.

Para ello he descargado la versión trial que me proporcionará 31 días para desarrollar alguna aplicación, espero poder desarrollar en todas las plataformas disponibles antes de que termine el periodo de evaluación.

Y para no aburrirlos con rollo, les dejo la instalación de AppMethod en imágenes, en entradas posteriores desarrollaré y mostraré alguna aplicación para Android y para todas las plataformas disponibles en ésta herramienta.

appM-1

appM-2

appM-3

appM-4

appM-5

appM-6

appM-7

appM-8

appM-9

Espero que no me tome demasiado pensar en la aplicación que haré, el tiempo apremia. 😀

Nos leemos en la siguiente entrada, hasta entonces felices lineas de código.

Delphi XE5 y Fin de Año

MVP_Logo_200x200

 

 

 

2013 fué un año lleno de espectativas tal como lo predijo Marco Cantú en Enero pasado:

«My prediction is that 2013 will be a great year for Delphi: the product will be turning 18 and getting a mobile brother.»

Marco Cantú

 

En lo personal, 2013 me permitió conocer más a fondo las entraña de mi querido Delphi, me dió la confianza de seguir adelante y la esperanza de que vuelve a las ligas mayores.

Si tú quieres aprovechar todo el poder de DelphiXE5, Embarcadero ha lanzado su famosa radoffer de fin de año, y en el momento de escribir éste artículo la cuenta regresiva es la siguiente:

radoffer 2013Por supuesto, la oferta no sólo es un simple descuento, puedes obtener muchas cosas más, por ejemplo:

  • Puedes actualizar a XE5 desde cualquier versión anterior (Precio de la actualización desde cualquier versión anterior)
  • Bonus Pack con un máximo de 1.150 dólares en software
  1. FM Premium Style Pack:   Jet and Diamond styles that you can apply to your apps, now including iOS 7 versions
  2. Mida VCL to FireMonkey Converter, Basic Edition: Makes it easier to migrate existing VCL apps to multi-platform FM apps
  3. InfoPower Grid for FireMonkey: Fast, efficient, powerful, and flexible grid and other controls for desktop and mobile apps
  4. InterBase Server edition with 5 user licenses: Full production database server (with Ent or higher edition purchase)
  • Upgrade a Ultimate Edition gratis desde la versión Enterprise
  • Obtener la actualización a C + + Builder iOS al comprar C + + Builder XE5 o RAD Studio XE5

Y como ningún otro año, tenemos una cantidad enorme de recursos (casi 100 videos) acerca de Delphi y C++ Builder:

Casi 40 videos con las Sesiones de CodeRage 8

31 videos de C++Builder realizados por David I. 

23 videos de RAD Studio XE5 la mayoría acerca de Delphi

Algunos videos detallando las razones para actualizar desde Delphi 7 a Delphi XE5

 

Y finalmente una  interesante presentación con las innovaciones en cada versión de Delphi.

Innovaciones de Delphi desde Delphi 1 hasta Delphi XE5
(Embarcadero Technologies)

 

Espero que 2014 sea el año donde Delphi recuperará el lugar que nunca debió abandonar, espero que muchos se animen a actualizar y comiencen a descubrir las ventajas de desarrollar con un mismo código base para todas las plataformas disponibles.

Hasta pronto.

Construir una App de escritorio Windows 32 y 64 Bits paso a paso

Hasta ahora hemos visto tres artículos donde pudimos comprobar que es posible crear una misma aplicación que funcionen en diferentes plataformas y lo más importante, con el mismo código base y los mismos componentes (FireMonkey).

Para éste artículo he decidido crear una aplicación para Windows 32  y 64 bits, por supuesto, utilizando los mismos componentes (FireMonkey) y el mismo código base que las aplicaciones anteriores.

Comenzaremos por crear nuestra aplicación seleccionando FireMonkey Desktop Application. desde el menú Add –> New.

Elegimos una aplicación FireMonkey HD y comenzaremos por desarrollar una aplicación Windows 32 Bits.

Y como ya lo hemos hecho en los artículos anteriores, copiamos y pegamos los componentes que hemos usado desde el inicio de ésta serie.

Acomodamos y la interfaz de usuario para que que se vea bien.

Agregamos la unidad que contiene la clase que consume el servicio web de Banxico a nuestro proyecto.

Compilamos nuestra aplicación y hemos terminado con nuestra aplicación Windows 32 Bits.

Pero eso no es todo, nos falta aún nuestro proyecto Windows 64 Bits, debido a que mi ambiente de desarrollo está instalado en Windows 7 32 Bits, he tenido que instalar la aplicación PAServer en una maquina con un sistema operativo a 64 Bits.

Para ello debemos agregar la plataforma a nuestro proyecto.

Configuramos el Profile en las opciones del proyecto y que compilará en una máquina con Windows 7 64 Bits.

Y ya estamos listos para compilar nuestro proyecto a 64Bits. Recuerden que nuestro Servidor de aplicaciones PAServer debe estar en ejecución para poder realizar la compilación de la aplicación. El resultado es el mismo, pero ahora para 64 Bits.

Los otros tres artículos de la serie son:

Happy coding!!!!

Descargas


Si lo deseas puedes descargar el código fuente de ésta entrada, espero sea de utilidad.


Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

Construir una App de escritorio OSX paso a paso

Logo MVP

La tercera parte de ésta serie de artículos corresponde a la creación de una aplicación OSX utilizando los mismos componentes y el mismo código que se ha utilizado para otros ambientes, como lo hemos visto ya en los artículos anteriores Construir una App iOS paso a pasoConstruir una App de escritorio Metrópolis paso a paso.

Sin más preámbulo, comencemos por abrir un nuevo proyecto, seleccionando la opción «Firemonkey Desktop Application» como se muestra en la siguiente imagen.

OSX-01

Seleccionamos el tipo de aplicación Firemonkey, en éste caso selecioné una aplicación HD y presionamos OK.

OSX-02

Por omisión Delphi nos sugiere aplicaciones Windows 32 bits, lo que tenemos que hacer es agregar la plataforma para OSX, clic derecho en Target Platfforms, Add y nos mostrará una ventana donde podremos seleccionar la plataforma OSX, aceptamos y ya podemos comenzar a copiar y pegar los componentes y el código que ya tenemos en las otras aplicaciones que hemos desarrollado.

OSX-03

He decidido copiar los componentes de la aplicación Metrópolis de nuestro artículo anterior. Simplemente seleccionamos el componente TListBox el cual contiene todos los componentes necesarios, así como los componentes TButton. Al hacer ésto es posible que se modifique la estética de los objetos, sin embargo, es cosa de acomodar las propiedades necesarias para que tenga una bena apariencia.

OSX-04

Una vez que adaptamos visualmente la forma, ya estámos listos para copiar el código de todos y cada uno de los objetos de  nuestra aplicación.

OSX-05

Lo único relevante de éste copiar y pegar código y para que no se nos muestre un error en el momento de correr nuestra aplicación OSX, es necesario hacer una pequeñísima modificación en la lectura del archivo XML que nos entrega el servicio Web que estamos consumiendo.

 
  //Indice 1 para el nodo hijo
  //en iOS y OSX se utiliza 0

  //Antes
  dsNode := xml.ChildNodes[1].ChildNodes[1];
  //Después
  dsNode := xml.ChildNodes[0].ChildNodes[1];

Con ésto hemos terminado nuestra aplicación y antes de correrla nos aseguramos que el ambiente en nuestra MAC está listo para conectarse, es decir, nos aseguramos que la aplicación  PAServer está en ejecución.

Si todo sale bien entonces podremos ver que nuestra aplicación funciona perfectamente en una plataforma más.

OSX-06

OSX-07

En la imagen que vemos a continuación podemos observar la información de la aplicación que Delphi nos ha generado y ahora sé que Delphi genera un archivo .app, el cual contiene todo lo necesario para que se pueda ejecutar sin problema.

OSX-08

Con ésto hemos terminado éste artículo, espero que les sea útil y ya sólo nos falta desarrollar la aplicación de escritorio para windows, la cual tengo pensado hacerla en 32 y 64 bits.

Como dato informativo, hacer ésta aplicación fué muy rápido ya que sólo es copiar, pegar, ordenar y compilar, qué más se puede pedir 🙂

Los otros tres artículos de la serie son:

Happy coding!!!!

Descargas


Si lo deseas puedes descargar el código fuente de ésta entrada, espero sea de utilidad.

[download id=»14″]
[download id=»15″]


Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

Construir una App de escritorio Metrópolis paso a paso

Hola amigos, tal como lo mencioné en el artículo anterior Construir una App iOS paso a paso, intento demostrar que se puede desarrollar diferentes aplicaciones con los mismos componentes y con el mismo código base, y en ésta entrega le toca el turno a una aplicación estilo Metrópolis.

Por supuesto, habrá algunas cosas que van a ser diferentes, agregando o descartando algunos objetos y/o algo del código base y ésto porque estamos «migrando» de una aplicación móvil a una aplicación de escritorio, pero nada de que preocuparse, al final podrán sentirse cómodos con la forma como podremos solucionar los requerimientos de nuestros clientes sin tener que aprender otro lenguaje de programación.

Éste artículo mostrará como migrar el código hecho para un iPhone a una aplicación estilo Metrópolis. Para ello, comenzaremos por lo básico, que es, crear nuestra forma METRO, lo cual es realmente sencillo y lo mostraré a través de imágenes.

Seleccionamos Aplicación Metrópolis Firemonkey:

Seleccionamos una Aplicación FireMonkey en Blanco:

Ya tenemos nuestra «Blank Form» lista para comenzar:

Ya estamos listos para comenzar a migrar los componentes y el código a nuestra nueva aplicación, y para ello utilizaremos el método C&P, es decir, Copiar y Pegar. Abrimos nuestra aplicación anterior y copiamos el componente ListBox, el cual, contiene los componentes que necesitamos para que nuestra aplicación pueda funcionar.

Lo primero que podemos observar que las banderas que se tenían en nuestra aplicación anterior no fueron mostradas en ésta forma, parece que vamos a trabajar un poquito más en ésta migración, pero nada de que preocuparse.

Para preparar nuestra interfáz gráfica, agregamos 1 TButton, modificamos el estilo de los botones, el color de los textos y el tamaño de los campos numéricos. Además ajustamos la posición de los textos para colocar las banderas de cada una delas monedas.

Agregamos 7 objetos TImage y asignamos la bandera de cada una de las monedas.

Ya tenemos todo listo para comenzar a migrar el código a nuestra aplicación.

1.Comenzamos por agregar la unidad DgieWS.pas a nuestro proyecto, ésta unidad la encuentran en el directorio de nuestra aplicación anterior.
2. Copiamos las unidades requeridas al USES de nuestra aplicación.

//Unidades adicionales
System.StrUtils, XMLDoc, XMLIntf, DgieWS;

3. Copiamos las variables requeridas a nuestra aplicación

 
//Variables de trabajo
Servicio: DgieWSPort;
Index: integer;
ParidadSel: currency;
TC, ValorME: string;
Valor: Currency;

4. Copiamos cada uno de los métodos de los TListBoxItem’s a nuestra aplicación.

 
  TC := StringReplace(label1.Text,'

5. Modificamos la línea de asignación de las imagenes en cada uno de los métodos de los TListBoxItem’s

 
  //Éste
  lbMonedaExt.ItemData.Bitmap := (Sender as TListBoxItem).ItemData.Bitmap;
  //Por éste
  Image6.Bitmap := Image1.Bitmap;

6. Copiamos el código del método OnClick del TButton para consumir el Servicio Web de Banxico a nuestra aplicación.

 
procedure TForm1.Button2Click(Sender: TObject);
var
  Retorno: string;
  xml: IXMLDocument;
  dsNode: IXMLNode;
  ID: String;
  Paridad: Currency;
  ParidadStr: string;
  I: Integer;
begin
  Servicio := GetDgieWSPort(true, '', nil);
  retorno := Servicio.tiposDeCambioBanxico;
  xml := NewXMLDocument();
  xml.XML.Text := retorno;
  xml.Active := true;
  //Indice 1 para el nodo hijo, en iOS se utiliza 0
  dsNode := xml.ChildNodes[1].ChildNodes[1];
  if dsNode <> nil then
  for I := 0 to dsNode.ChildNodes.Count - 1 do
  begin
    if dsNode.ChildNodes[I].HasChildNodes then
    begin
      ParidadStr := dsNode.ChildNodes[I].ChildNodes[0].AttributeNodes.Nodes['OBS_VALUE'].NodeValue;
      if ParidadStr <> 'N/E' then
      begin
        Paridad := strtofloat(ParidadStr);
        ParidadStr := format('%3.4m',[Paridad])
      end
      else
        ParidadStr := 'No Disponible';
      ID := dsNode.ChildNodes[I].AttributeNodes.Nodes['IDSERIE'].NodeValue;
      case AnsiIndexStr( ID,['SF43718', 'SF46410', 'SF60632', 'SF46406', 'SF46407']) of
        0: label1.Text := ParidadStr;
        1: label3.Text := ParidadStr;
        2: label2.Text := ParidadStr;
        3: label4.Text := ParidadStr;
        4: label5.Text := ParidadStr;
      end;
    end;
  end;
end;

7. Copiamos el método OnExit del objeto TEdit2 a nuestra aplicación

 
procedure TForm1.Edit2Exit(Sender: TObject);
begin
  valorME := StringReplace(edit2.Text,'

Con ésto terminamos de copiar todo lo necesario para que nuestra aplicación compile y sea ejecutada.

Sí, así de fácil es crear diferentes aplicaciones con los mismos componentes y el mismo código. Ustedes pueden comprobarlo creando sus propias aplicaciones.

Metro07

Metro08

Los otros tres artículos son:

Happy coding!!!!


Descargas

Si lo deseas puedes descargar el código fuente de ésta entrada, espero sea de utilidad.


Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.

Construir una App iOS paso a paso

Hola amigos, en ésta ocasión vamos a desarrollar una aplicación para iOS paso a paso, para éste artículo usaremos la interfaz de un iPhone5, pero bien pueden hacerlo para iPhone estándar y/o para iPad.

Antes de comenzar éste tutorial, quiero comentar, que es requisito contar con una MAC o al menos un servicio como el macincloud para poder compilar y ejecutar nuestra aplicación móvil.

Como ya es mi costumbre, vamos a desarrollar un cliente que consuma un Servicio Web pero desde un dispositivo móvil, vamos a tomar el ejemplo que publiqué hace unos meses (Probando Delphi for iOS) del cual no pude hablar más a fondo debido a que aún era un producto beta pero que me sirvió mucho para aprender un poco de ésta nueva característica que cuenta la más reciente versión de Delphi.

Lo primero que vamos a hacer es crear una aplicación Delphi para Móvil con Firemonkey como se muestra en la siguiente imagen:

Acto seguido, Delphi nos muestra una ventana con diferentes  plantillas de aplicaciones móviles con FireMonkey, donde elegiremos para efectos de éste ejercicio, la plantilla que contiene encabezado y pié de página.

Posteriormente y antes de comenzar a desarrollar nuestra aplicación,  Delphi nos muestra un experto que  nos ayudará a configurar el ambiente de desarrollo para la construcción de aplicaciones móviles para iOS, es decir, como configurar la MAC y RAD Studio para trabajar en conjunto.

Pueden seguir éste excelente artículo de mi buen amigo Germán Estévez (Neftalí) para configurar el entorno de trabajo iOS.

Minimizamos o cerramos el experto y tendremos ya nuestra forma lista para comenzar a escribir nuestra primera aplicación móvil para iOS.

Comenzamos por elegir el dispositivo para el cual vamos a desarrollar nuestra aplicación móvil. En mi caso elegí el iPhone5.

También colocamos un texto en el encabezado de nuestra forma, éste ejemplo será un conversor de monedas a través del consumo de un Servicio Web creado por el Banco de México, el cual nos proporciona el tipo de cambio de algunas monedas.

Ahora necesitamos decidir que objetos vamos a colocar en nuestra forma, en mi caso decidí colocar los siguientes:

  • 1 TListBox
  • 7 TListBoxItem’s
  • 2 TListBoxGroupHeader’s
  • 5 TLabel’s
  • 2 TEdit’s

También conseguí 6 banderas de los países que vamos (en éste ejemplo) a disponer de paridad cambiaria contra el peso mexicano.

Después de agregar los objetos y acomodarlos según me pareció adecuado, nos ha quedado como se muestra en la imagen.

  El primer paso es agregar el TListBox a nuestra forma y configuramos las siguientes propiedades:

  • GroupingKind = gsGrouped
  • StyleLookup = transparentlistboxstyle

Damos clic derecho del mouse en el ListBox donde nos mostrará un menú emergente donde seleccionaremos la opción AddItem y agregamos:

  • 7 TListBoxItem’s
  • 2 TListBoxGroupHeader’s

Continuamos agregando imágenes a los TListBoxItem; en éste ejemplo utilizaremos banderas de cada país del cual se tiene paridad cambiaria con el Peso mexicano, damos clic en la propiedad ItemData del TListBoxItem, damos clic en la propiedad BitMap y nos mostrará una ventana donde podrémos seleccionar la imagen que deseamos. También editamos el texto que se va a mostrar en la propiedad Text.

Adicionalmente colocamos los 2 TEdit y las 5 TLabel como se muestra en la imagen siguiente:

El siguiente paso es  generar nuestra clase que consumirá el Servicio Web del Banco de México y que nos proporcionará las paridades o tipos de cambio de las monedas que vamos a utilizar en nuestra aplicación, el WSDL de éste servicio web es el siguiente:

http://www.banxico.org.mx/DgieWSWeb/DgieWS?WSDL

Vamos a utilizar la forma tradicional de importar el WSDL a nuestra aplicación con el importador de WSDL como se muestra a continuación:

Éste importador genera el código necesario para poder consumir el servicioWeb y ya sólo nos resta escribir el código para que nuestra aplicación se conecte y nos muestre las paridades para cada una de las monedas seleccionadas y usarlas para convertir la cantidad de la moneda extranjera al peso mexicano. Por supuesto, ustedes pueden utilizar otro proveedor de paridades para ajustarlo a su moneda.   Ya tenemos todo para comenzar a escribir nuestro código.

Y como todo lo nuevo, hay algunos detalles que hay que tomar en cuenta a la hora de escribir nuestro código,

por ejemplo:

¿Cómo hacer que nuestra aplicación se ajuste en la pantalla para que no se encime en los contoles donde vamos a capturar el monto a convertir?.

La solución la encontré en uno de los ejemplos que vienen con delphi y se llama «ScrollableForm» el cual se encuentra en el directorio «RAD Studio\11.0\Samples\FireMonkeyMobile».

Se requirió de agregar dos componentes más, un TVertScrollBox y un TLayout para poder ajustar la pantalla cuando se intenta escribir en los controles sin que interfiriera el teclado numérico.

 

{******************************************************************************}
{  código para ajustar los objetos cuando se muestra el teclado en la pantalla }
{******************************************************************************}

procedure THeaderFooterForm.RestorePosition;
begin
  VertScrollBox1.ViewportPosition := PointF(VertScrollBox1.ViewportPosition.X, 0);
  Layout1.Align := TAlignLayout.alClient;
  VertScrollBox1.RealignContent;
end;

procedure THeaderFooterForm.UpdateKBBounds;
var
  LFocused : TControl;
  LFocusRect: TRectF;
begin
  FNeedOffset := False;
  if Assigned(Focused) then
  begin
    LFocused := TControl(Focused.GetObject);
    LFocusRect := LFocused.AbsoluteRect;
    LFocusRect.Offset(VertScrollBox1.ViewportPosition);
    if (LFocusRect.IntersectsWith(TRectF.Create(FKBBounds))) and
       (LFocusRect.Bottom > FKBBounds.Top) then
    begin
      FNeedOffset := True;
      Layout1.Align := TAlignLayout.alHorizontal;
      VertScrollBox1.RealignContent;
      Application.ProcessMessages;
      VertScrollBox1.ViewportPosition :=
        PointF(VertScrollBox1.ViewportPosition.X,
               LFocusRect.Bottom - FKBBounds.Top);
    end;
  end;
  if not FNeedOffset then
    RestorePosition;
end;

procedure THeaderFooterForm.FormCreate(Sender: TObject);
begin
  VertScrollBox1.OnCalcContentBounds := CalcContentBoundsProc;
end;

procedure THeaderFooterForm.FormVirtualKeyboardHidden(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
  FKBBounds.Create(0, 0, 0, 0);
  FNeedOffset := False;
  RestorePosition;
end;

procedure THeaderFooterForm.FormVirtualKeyboardShown(Sender: TObject;
  KeyboardVisible: Boolean; const Bounds: TRect);
begin
  FKBBounds := TRectF.Create(Bounds);
  FKBBounds.TopLeft := ScreenToClient(FKBBounds.TopLeft);
  FKBBounds.BottomRight := ScreenToClient(FKBBounds.BottomRight);
  UpdateKBBounds;
end;

procedure THeaderFooterForm.CalcContentBoundsProc(Sender: TObject;
  var ContentBounds: TRectF);
begin
  if FNeedOffset and (FKBBounds.Top > 0) then
  begin
    ContentBounds.Bottom := Max(ContentBounds.Bottom,
                                2 * ClientHeight - FKBBounds.Top);
  end;
end;
{******************************************************************************}

Scroll Vertical para reajustar la pantalla

Otro detalle era pasar el monto, la bandera y el texto de cada moneda, lo cual fué algo simple de resolver pasando las propiedades al seleccionar la moneda deseada hacia el objeto destino.

 
procedure THeaderFooterForm.lbDolarUSAClick(Sender: TObject); 
begin 
  TC := StringReplace(label1.Text,'

Escribimos el código necesario en el evento OnExit del Edit donde capturamos la cantidad a convertir para que nos muestre el valor en peso de acuerdo a la moneda seleccionada.

 
procedure THeaderFooterForm.Edit2Exit(Sender: TObject);
begin
  valorME := StringReplace(edit2.Text,'

Compilamos y Delphi XE4 hace su trabajo generando todo lo necesario para que nuestra aplicación sea ejecutada en el simulador.

Convertimos dólares a pesos

Convertimos Euros a pesos

Con ésto hemos terminado el primer artículo de una serie que intentará demostrar que se puede desarrollar 4 aplicaciones diferentes utilizando los mismo componentes y el mismo código, espero no defraudarlos 🙂

Los otros tres artículos son:

Happy coding!!!!

Descargas


Si lo deseas puedes descargar el código fuente de ésta entrada, espero sea de utilidad.

Ésta entrada y el código fuente son libres para su uso y publicación, lo único que te pido, si te parece justo, es mencionar la fuente de donde se obtuvo.