Você está na página 1de 102

Gua del Usuario

Libro 4
Despliegue
2013 Release 3

Xojo, Inc.

Prefacio

Gua Xojo
Libro 4: Despliegue

2013 Xojo, Inc.


Version 2013 Release 1
ii

Section 1

Acerca dde la Gua de Usuario Xojo


Esta Gua de Usuario Xojo tiene como objeto describir Xojo tanto

Comunicaciones y Redes, Concurrencia y Depuracin. Termina

a los desarrolladores recin llegados a Xojo como a aquellos que

con dos captulos sobre Crear tus Aplicaciones y el captulo

ya tengan una experiencia significativa en su uso.

sobre caractersticas Avanzadas del Framework.

La Gua del Usuario est dividida en varios libros centrados en

El libro Despliegue cubre estas reas: Desplegar tus

reas concretas de Xojo: Fundamentos, Interfaz de Usuario,

Aplicaciones, Desarrollo Multiplataforma, Desarrollo Web, Migrar

Framework y Despliegue.

desde Otras Herramientas, Gestin del Cdigo y Aplicaciones de

La Gua del Usuario est organizada de modo que introduce los


temas en el orden en el que suelen utilizarse.
El libro Fundamentos comienza con el Entorno de Desarrollo
Integrado Xojo (IDE) y contina con el Lenguaje de Programacin
Xojo, Mdulos y Clases. Termina con el captulo sobre Estructura
de la Aplicacin.
El libro Interfaz de Usuario cubre los Controles y Clases usados
para crear aplicaciones de Escritorio y Web.

Ejemplo.

Copyright
Todos los contenidos son propiedad de Xojo, Inc. 2013. Todos
los derechos reservados. No puede reproducirse ni transmitirse
ninguna parte de este documento o de los archivos relacionados
en modo alguno, con ningn medio (electrnico, fotocopia,
grabacin o cualquier otro), sin el consentimiento previo por
escrito del editor.

Marcas Registradas

El libro Framework se asienta sobre lo aprendido en los libros

Xojo es una marca registrada de Xojo, Inc. Todos los derechos

Interfaz de Usuario y Fundamentos. Cubre las principales reas

reservados.

del Framework de Xojo, incluyendo: Archivos, Texto, Grficos y


Multimedia, Bases de datos, Impresin e Informes,

Este libro identifica nombres de producto y servicios conocidos


como marcas, marcas registradas o marcas de servicio de sus
respectivos propietarios. Se utilizan a lo largo de este libro de
forma completamente editorial. Adicionalmente, aquellos
trminos que puedan ser inferidos como marcas, marcas
registradas o marcas de servicio se muestran con su letra inicial
en mayscula, aunque Xojo, Inc. no puede asegurar la fidelidad
de esta informacin. El uso de un trmino en este libro no debera
considerarse como afrenta sobre la valided de ninguna marca,
marca registrada o marca de servicio. Xojo, Inc. no est asociada
con ningn producto o fabricante mencionado en este libro.

Section 2

Convenciones
La Gua utiliza capturas de pantalla realizadas en las versiones
de Xojo correspondientes a Windows, OS X y Linux. El diseo de
interfaz y el conjunto de caractersticas son idnticos en todas las
plataformas, de modo que las diferencias entre las plataformas
son meramente cosmticas y tienen que ver con las diferencias
entre las interfaces de usuario de Windows, OS X y Linux.
Negrita. Se usa para enfatizar la primera vez que se utiliza un
nuevo trmino o para destacar conceptos importantes.
Adems, los ttulos de los libros como Gua de Usuario Xojo,
se indican en cursiva.
Cuando se indique que elijas un tem de uno de los mens,
vers algo como elige Archivo Nuevo Proyecto. Esto
equivale a elige Nuevo Proyecto en el men Archivo.
Los atajos de teclado consisten en una secuencia de letras
que deben de pulsarse en el orden listado. En Windows y
Linux, el modificador es la tecla Ctrl; en OS X, la tecla modificadora es (Comando). Por ejemplo, cuando veas el atajo Ctrl
+O o -O, significa que debes de mantener pulsada la tecla
Control en Windows o Linux, y a continuacin la letra O, o
bien mantener pulsada la tecla en OS X y entonces la tecla

O. Se suelta la tecla modificadora solo una vez se ha pulsado la tecla de atajo de teclado.
Aquello que debas de escribir aparecer entrecomillado, como
GoButton.
Algunos pasos te solicitan que inbtroduzcas lneas de cdigo
en el Editor de Cdigo. Estas aparecen en una caja
sombreada:

ShowURL(SelectedURL.Text)

Cuando introduzcas cdigo, por favor observa estas guas:


Escribe cada lnea impresa en una lnea diferente del Editor
de Cdigo. No intentes unir dos o ms lneas impresas en la
misma lnea, o bien dividir una lnea larga en dos o ms
lneas.
No aadas espacios adicionales donde no se indique en el
cdigo impreso.
Por supuesto, tambin puedes copiar y pegar el cdigo.

Cuando ejecutes tu aplicacin, Xojo comprobar la primera vez tu


cdigo para buscar errores de sintaxis o de escritura. Si esta comprobacin encuentra un error, entonces aparecer un panel de errores en la parte inferior de la ventana principal para que lo revises.

Chapter 1

Desplegar
tus
Aplicaciones
En este captulo aprenders como desplegar tus
aplicaciones de escritorio y web.

Section 1

Despliegue Windows
En Microsoft Windows, las aplicaciones se despliegan mediante

Si tu aplicacin tiene otros archivos de soporte o carpetas, como

instaladores.
Cualquier herramienta de instalacin

una carpeta de Recursos, entonces asegrate de

Figura 1.1 Advanced Installer

que el instalador tambin la incluya.

funcionar con tus apps, incluyendo:

Setup.exe o MSI

InnoSetup, Advanced Installer, NSIS e

La mayora de las herramientas instaladoras te


permiten crear tu instalador como un archivo
Setup.exe o como archivo MSI (Microsoft
Installer).

InstanllShield.
Nota: Estas herramientas de instalacin deben
de ejecutarse desde Microsoft Windows para
crear un instalador Windows. Sin embargo,
InnoSetup funciona con WINE, lo que permite
ejecutarlo en OS X o Linux.

Archivos de Instalador
Cuando creas un instalador, has de
indicarle que incluya todos los archivos necesarios para la
ejecucin de la aplicacin. Como mnimo, esto incluye un archivo

Cualquiera funcionar bien, pero los archivos


MSI tienen la ventaja de que son actualmente el
mtodo recomendado por Microsoft y de que
pueden ser utilizados por los departamentos de
TI para controlar mejor las instalaciones. Elije lo que mejor
funcione para tus clientes.

EXE y los conbtenidos de la carpeta Libs asociada.

Ubicacin y Atajos

Por ejemplo, una aplicacin llamada Sliders creara un archivo

Las aplicaciones Windows se instalan en la carpeta Program


Files (Archivos de Programa). En los sistemas de 64 bits, tus
aplicaciones se instalarn en la carpeta Program Files (x86)
(dado que son de 32 bits).

llamado Sliders.exe y una carpeta llamada Slideres Libs. Esta


carpeta Libs contiene los DLL para las libreras, plugins y otros
archivos asociados necesarios por la aplicacin.

Los usuarios de Windows esperan contar con un acceso sencillo


a tu aplicacin, lo que significa que deberas de crear un atajo
fcilmente accesible. Tu herramienta de instalacin debera de
proporcionarte la opcin de crear un atajo para el usuario en el
Escritorio y en el Men Inicio.

Para ello no has de incluir los archivos msvcp100.dll y


msvcr100.dll que forman parte de la carpeta Libs, sino embeber
en vez de estos el Microsoft Visual C++ Runtime Redistributable
como parte del instalador. La mayora de las herramientas de
instalacin presentan un modo de hacerlo automticamente.

Zip

La ventaja de hacerlo as es que el Visual C++ Runtime

La forma ms sencilla de distribucin es comprimir la aplicacin

Redistributable instalar sus archivos en la carpeta del sistema

como archivo Zip junto con el resto de archivos necesarios (como

de Windows, permitindoles actualizarse mediante Microsoft

la carpeta Libs). Puedes crear un Zip haciendo clic derecho sobre

Windows Update por motivos de seguridad y otras razones.

la carpeta padre en el Explorador de Windows y eligiendo a


continuacin la opcin Enviar a > Carpeta Comprimida.
Una vez comprimida, la aplicacin puede ser ejecutada desde
cualquier ubicacin.
Aunque esto puede ser til para propsitos de pruebas, no es
recomendable para un correcto despliegue de una aplicacin

Si dejas tus archivos Visual C++ Runtime en la carpeta Libs,


entonces no podrn ser actualizados por Windows Update.
En el momento de escribir este volumen, puedes descargar el
Visual C++ Runtime Redistributable desde aqu:
http://www.microsoft.com/en-us/download/details.aspx?id=5555

Windows.

Archivos Redistribuibles Microsoft


Tus aplicaciones requieren el Runtime Microsoft Visual C++. Los
archivos requeridos se incluyen para tu conveniencia en la
carpeta Libs de tus aplicaciones (msvcp100.dll y msvcr100.dll).
Sin embargo, para una mayor compatibilidad con Windows,
deberas de considerar la inclusin del Microsoft Visual C++
Runtime Redistributable Installer como parte de tu instalador.
9

Section 2

Despliegue OS X
Generalmente, las aplicaciones OS X estn formadas por un
nico archivo de App denominado el Bundle de Aplicacin.

Imgenes de Disco (DMG)


Una imagen de disco es un archivo descargado por el usuario.

Puedes embeber otros archivos dentro del Bundle de Aplicacin

Una vez se ha descargado el archivo (y se ha hecho doble clic

dado que, tcnicamente, es una carpeta que el OS X trata como

sobre l), este aparece en la barra lateral del Finder como si

si fuera un archivo. En el Finder, puedes hacer clic derecho sobre

fuera una unidad. Esto se denomina montar la imagen de

cualquier App y seleccionar Mostrar Contenidos del Paquete

disco. Cuando el usuario hace clic en la unidad en la barra lateral

para ver los contenidos reales del Bundle de Aplicacin como

del Finder, este ve tu aplicacin y, generalmente, la arrastra hacia

carpeta.

la carpeta de Aplicaciones para instalarla.

Por supuesto, tu aplicacin aun puede tener archivos

Para crear una imagen de disco, puedes utilizar Utilidad de

independientes que no se encuentren en el Bundle, en cuyo caso

Discos, una aplicacin

querrs asegurarte de que tu aplicacin est en su propia

incluida con el OS X, o

carpeta.

bien probar cualquiera

Dado que las aplicaciones son tcnicamente una carpeta, debes


de incluirlas en algn tipo de contenedor para distribuirlas, como
discos de imgenes (DMG), instaladores o incluso simples
archivos Zip.

Figura 1.2 Canvas DMG

de las aplicaciones
especializadas en la
creacin de imgenes
de disco como por
ejemplo DMG Canvas.
Una imagen de disco
es probablemente el
modo ms comn de
10

instalar aplicaciones OS X, pero recuerda que algunos usuarios


(especialmente aquellos recin llegados a OS X) pueden

Instaladores
El OS X tambin puede utilizar un instalador real para instalar tu

encontrar el concepto de montar una unidad y arrastrar un

aplicacin, pero no es comn para las aplicaciones distribuidas

archivo sobre la carpeta de Aplicaciones un tanto confuso.

fuera de la Mac App Store. Para crear un instalador puedes

Tambin debes de recordar que si un usuario intenta ejecutar por


error la aplicacin directamente desde la imagen de discos,
puede que no funcione segn lo esperado, dado que la imagen
de disco es slo de lectura.

utilizar la herramienta PackageMaker (incluida con las


herramientas de Desarrollo para OS X) o bien puedes utilizar el
instalador gratuito Iceberg.
Un instalador te proporciona ms control sobre los permisos y
otros ajustes, pero puede resultar mucho ms difcil crearlo en
comparacin con una simple imagen de disco.
De igual modo, recuerda que un instalador en OS X (un archivo
pkg) es realmente un bundle, de modo que debes de distribuirlo
como imagen de disco o Zip.

Zip
Un archivo Zip es un archivo de tu aplicacin. Un zip resulta
sencillo de descargar y la mayora de los usuarios entienden lo
que es. Puede descomprimirse con un simple doble clic,
revelando as la aplicacin contenida. A continuacin, puedes
copiarse la aplicacin a la carpeta Aplicaciones.
Para crear un Zip, haz clic derecho sobre tu aplicacin en el
Finder y selecciona la opcin Comprimir.

11

Firma de Cdigo para GateKeeper


OS X 10.8 introdujo una nueva caracterstica denominada
GateKeeper. GateKeeper est diseado para proporcionar un

codesign -f -s "Developer ID Application:


YourName" "YourXojoApp.app"

nuevo nivel de seguridad para los usuarios en la instalacin de


aplicaciones. En esencia, si la aplicacin (o su instalador) no est
firmada digitalmente usando los certificados proporcionados por
Apple, entonces el OS X no permitir por defecto la instalacin de
la aplicacin.
Esto puede superarse con el usuario haciendo clic derecho sobre
la aplicacin (o instalador) y eligiendo la opcin Abrir, pero

La firma del cdigo debe de realizarse como el paso final. Si


modificas algo dentro del bundle de la aplicacin (como el
info.plist), entonces invalidars la firma y debers de firmar el
cdigo nuevamente.
Nota: Si ests usando un instalador entonces tendrs que firmar el
instalador por separado usando un certificado especial de instalador.

muchos usuarios no lo saben.


Esto significa que probablemente querrs firmar digitalmente tus
aplicaciones OS X. Para obtener un certificado, debes de unirte al
Programa de Desarrolladores Mac ($99). Tu certificado es vlido
durante cinco aos.
Utiliza la Utilidad de Certificado en el Mac Dev Center para crear
un certificado (puedes usar el mismo certificado para todas tus
aplicaciones).
Una vez que hayas seguido las instrucciones para crear el
certificado y lo hayas instaldo en tu ordenador, podrs usarlo
para firmar el cdigo de tu aplicacin usando este comando:

12

Mac App Store

Por ltimo puedes crear un envo utilizando iTunes Connect,

La Mac App Store supone un modo genial de distribuir tus

rellenando toda la informacin requerida y subiendo tu aplicacin

aplicaciones OS X. La gente encuentra sencillo y adecuado

mediante la herramienta Application Loader que forma parte de

comprar aplicaciones desde la Mac App Store.

las Herramientas de Desarrollo OS X.

Desafortunadamente, llevar las aplicaciones a la Mac App Store


no es fcil o conveniente para el desarrollador.

Una vez que hayas enviado algo a la Mac App Store, puede llevar
varias semanas antes de que la aplicacin sea aprobada por

Sandboxing

Apple y est lista para su venta.

El Sandboxing se utiliza para restringir el acceso que tiene tu

Validando el Apple ID

aplicacin. Esto se utiliza como caracterstica de seguridad, dado


que si una app llegase a estar comprometida por algn motivo,
entonces no causara tantos daos en comparacin a que tuviese
un acceso completo del ordenador.

Los anteriores pasos funcionan genial para cualquier app,


incluyendo las apps gratuitas, pero si ests vendiendo tu app
entonces querrs evitar que la gente pueda copiar a otro
ordenador la app comprada con el objeto de ejecutarla sobre

El Sandboxing funciona mejor con las aplicaciones Cocoa,

este (sin necesidad de logarse con su Apple ID). Para ello

aunque tambin lo hace con las aplicaciones Carbon (con

necesitars verirficar el Apple ID.

algunas restricciones por parte de Apple).

Certificados y Firma de Cdigo


Para poder enviar una aplicacin a la Mac App Store para su
revisin por parte de Apple, debes de crear en primer lugar

La verificacin de un AppleID requiere llamar a la API Cocoa. El


cdigo es demasiado especfico como para incluirlo aqu, pero
hay un proyecto de ejemplo en la carpeta Platform Specific
para OS X y que puedes consultar.

certificados de la Mac App Store utilizando la herramienta en


lnea Certificate Tool que es parte del Mac Dev Center. Tambin
has de crear un bundle ID para tu aplicacin.
Cuando tu aplicacin est completa, tendrs que firmar el cdigo
de tu aplicacin (y todas sus libreras dinmicas). Tambin has de
crear el instalador y firmarlo.
13

Section 3

Despliegue Linux
Las aplicaciones Linux tambin disponen de una amplia variedad
de opciones. La ms sencilla consiste en utilizar GZip y dejar que

Instalador Genrico
InstallJammer es un producto de cdigo abierto que tiene una

el usuario ponga la aplicacin donde quiera. Tambin puedes

interfaz de usuario sencilla para la creacin de un instalador que

utilizar una herramienta como InstallJammer y que crea un

funcione con una variedad de distribuciones Linux.

instalador genrico que funciona con una amplia variedad de


plataformas Linux. Por ltimo, puedes crear instaladores
independientes para cada distribucin Linux. Algunos formatos
comunes de instalacin son deb (utilizado por Debian y Unbuntu)
y RPM (RedHat Package Maker) utilizado por RedHat.

Desafortunadamente, esta herramienta ya no se est


desarrollando ms de forma activa, aunque contina
funcionando bien y es una buena opcin si no usas Linux lo
suficiente.

Figura 1.3 Install Jammer

14

Instaladores Debian

Instalador Redhat

Los instaladores Debian se utilizan por las distribuciones Linux

El formato de instalador Redhat (RPM) se utiliza por las

basadas en Debian, como Ubuntu. Pueden ser instaladas desde

distribuciones Linux basadas en Redhat.

el Synaptic Package Maker o desde el terminal.

Puedes crear instaladores RPM utilizando la aplicacin rpmbuild

Creas instaladores Debian utilizando la aplicacin dpkg-deb del

desde el terminal. Desafortunadamente su uso es ms especfico

terminal. Desafortunadamente, su uso es ms especfico de lo

de lo que podemos tratar en este libro.

que podemos tratar en este libro.

El Proyecto Fedora tiene una buena gua, y que est disponible

Este tutorial describe como puedes crear un paquete Debian:

aqu:

http://tldp.org/HOWTO/html_single/Debian-Binary-Package-

http://fedoraproject.org/wiki/How_to_create_an_RPM_package

Building-HOWTO/

15

Section 4

Despliegue Web
Puedes crear dos tipos de aplicaciones web, Independientes y

especificar el puerto como parmetro desde la lnea de

CGI. Adems de las diferencias en el modo en el que funcionan,

comandos:

tambin tienen un despliegue distinto.

Aplicaciones Independientes

./mywebapp --port=8080

Cuando creas una aplicacin web independiente, obtienes una


aplicacin compuesta por la aplicacin propiamente dicha y un
servidor web independiente. Este servidor web escucha el
puerto indicado en los ajustes de compilacin (Build).
Si tienes el puerto definido por ejemplo a 8080, entonces puedes

Conexiones Mximas
Por defecto una aplicacin web independiente puede soportar
hasta 200 conexiones simultneas. Puedes cambiarlo utilizando
un parmetro de la lnea de comandos:

acceder al servidor web usando el URL seguido por el puerto,


como en este caso:

./mywebapp --maxsockets=300

http://www.myserver.com:8080
Para iniciar una aplicacin Independiente, slo has de ejecutar la
aplicacin desde la lnea de comandos o desde el terminal.

Usar el Puerto 80
Para navegar por una aplicacin web independiente sin
especificar el puerto, has de utilizar el puerto 80, el puerto

Puedes ejecutar mltiples aplicaciones web independientes

estndar empleado por los servidores web. Sin embargo, OS X y

sobre el mismo servidor, pero cada aplicacin web ha de

Linux no permiten utilizar el puerto 80 (o cualquier puerto por

escuchar un puerto nico. Para hacer esto ms sencillo, puedes

debajo de 1024) salvo que tengas acceso root.

16

Esto significa que en OS X y Linux necesitas utilizar el comando


sudo para iniciar la aplicacin web en el caso de que uses el
puerto 80:

sudo ./mywebapp

sc create MyWebAppSvc type= own start=


auto binpath= c:\Path\To\Exe\mywebapp.exe

Ahora puedes ir al Gestor de Servicios en el Panel de Control y


ver que aparece listado el servicio MyWebAppSvc. Utiliza el

Nota: El comando sudo te solicita tu nombre de usuario y contrasea.

Gestor de Servicios para Iniciar, Detener o Pausar el servicio.


DAEMON

Proceso en segundo plano


Cuando ejecutas tu aplicacin web directamente desde la lnea
de comandos, continuar funcionando siempre y cuando no

Para hacer que tu aplicacin web independiente funcione como


un proceso de segundo plano (demonio), llama al mtodo
Daemonize, generalmente en el evento App.Open:

salgas de la ventana de comandos/terminal o salgas de la


cuenta.
Esta tcnica no funciona bien con los verdaderos servidores o
servidores remotos. En estos casos querrs ejecutar la aplicacin
web como un proceso en segundo plano. En Windows esto

If Not Daemonize Then


Print(Unable to Daemonize app.)
Quit
End If

significa que puedes ejecutar la app como Servicio Windows. En


Linux significa que puedes ejecutarla como un Daemon. En OS X
puedes ejecutarla como demonio o utilizar el comando launchd
de tu eleccin para iniciarla como demonio.

Cuando ejecutes ahora tu aplicacin web independiente desde el


terminal, volver de inmediato al cursor del terminal dado que la
app est funcionando ahora en segundo plano.

SERVICIO WINDOWS

Esto tambin funciona con OS X, pero Apple prefiere que utilices

Para ejecutar una aplicacin web como Servicio Windows, utiliza

el comando launchd para iniciar los demonios. El uso de launchd

el comando sc desde la Lnea de Comandos para instalar la

significa que has de crear un archivo Property List con ajustes

aplicacin como servicio:

especficos.
17

Para obtener ms informacin, consulta la documentacin de


Apple aqu:
http://developer.apple.com/library/mac/#documentation/
MacOSX/Conceptual/BPSystemStartup/Chapters/
CreatingLaunchdJobs.html

CGI Application
Cuando creas tu aplicacin web como aplicacin CGI, obtienes
un archivo ejecutable que se comunica con tu actual servidor
web utilizando para ello CGI (common gateway interface).
El modo en el que esto funciona es que se crea un pequeo
guin Perl CGI cuando creas la aplicacin web. Su nico
propsito es comunicarse entre tu aplicacin web y el servidor
web. El script Perl incia tu aplicacin web si no est funcionando
y enruta toda la comunicacin entre el servidor web y tu
aplicacin web, y viceversa.
Cuando creas una aplicacin web para CGI, tienes la opcin de
elegir un puerto o dejar que este sea elegido de forma
automtica. Este es un puerto interno utilizado para la
comunicacin entre el script Perl y tu aplicacin web. Dado que
es una comunicacin interna, no se ve afectado el firewall. El
nico requerimiento es que nada ms en el servidor est usando
tambin dicho puerto.
Prcticamente todos los servidores soportan CGI y Perl, pero
algunos son mucho ms sencillos de configurar que otros.

Apache
El tipo ms comn de servidor web que vers es Apache. Este
est preinstalado por lo general en todos los servidores Linux.

18

La mayora de los servidores Apache tienen una ubicacin


especfica donde deben subirse las aplicaciones CGI. Este suele
denominarse, la carpeta cgi-bin.
En un servidor web configurado correctamente, el despliegue de
una aplicacin web es tan simple como usar FTP para copiar
todo el contenido de la carpeta de la aplicacin web en la carpeta
cgi-bin. Estos archivos son:
La aplicacin web propiamente dicha
La carpeta Libs
config.cfg

instrucciones paso a paso dado que cada instalacin de Apache


es diferente, teniendo archivos de configuracin en distintas
ubicaciones con diferentes usuarios de servidor web y diferentes
permisos. Utiliza estos consejos como guas, si bien aun debers
de entender Apache y cmo ha sido instalado en el SO que ests
utilizando.
Plataforma: verifica que has subido la plataforma correcta de tu
aplicacin web. Aunque puedas estar desarrollando y probando
en OS X, si ests usando un servidor Linux necesitas crear una
compilacin Linux para subirla.
Libreras de 32-bit: tu aplicacin es una aplicacin de 32 bits.

el archivo cgi de Perl

Para ejecutarla en una versin Linux de 64 bits, necesitas

El archivo .htaccess (que puede estar oculto en la vista por

compatibilidad de 32 bits. El comando para ello vara en

defecto de tu software FTP)


Entonces puedes iniciar la aplicacin web accediendo al guin
cgi:

asegurarte de que estn instaladas las libreras de


funcin de la distribucin Linux. Con Debian utilizas apt-get:

# apt-get update
# apt-get install ia32-libs

http://www.myserver.com/mywebapp.cgi

Problemas

Identificador de Aplicacin: verifica que el Identificador de

Desafortunadamente, no todos los servidores van a estar

Aplicacin sea nico. Si hay otra app web ejecutndose en el

correctamente configurados para ejecutar las aplicaciones web

servidor con el mismo identificador de aplicacin, entonces no

Xojo. Es posible que te encuentres con que has de cambiar la

se iniciar.

configuracin t mismo. Estas son algunas de las reas a


comprobar. Desafortunadamente, no es posible proporcionar
19

Permisos: verifica que tu app CGI y todos los DLL en la carpeta


Libs se hayan copiado al servidor y tengan permisos de
ejecucin (755 es mejor). Tambin has de comprobar la carpeta
padre as como los archivos config.cfg y el script cgi de Perl.
Los Permisos de 777 no son seguros y algunos servidores web
(que utilizan seEXEC) no ejecutarn nada con dichos permisos.
AddHandler: si tu aplicacin web muestra el cdigo de la
pgina en vez de ejecutarla, es posible que debas de aadir el

servicio. Si has seleccionado un puerto, asegrate de que sea


> 1024 y < 65536.
Web Server Logs: los registros de tu servidor web pueden
contener informacin adicional til. Desafortunadamente la
ubicacin de dichos registros vara en funcin de la distribucin
y versin de Linux.

IIS (Microsoft Internet Information Services)

comando AddHandler cgi-script .cgi en el archivo de

Con Windows se incluye un servidor web llamado IIS. Este est

configuracin de tu servidor Apache o en el archivo .htaccess

optimizado para ejecutar sitios web sencillos en HTML y

generado junto con tu aplicacin web.

aplicaciones web .NET y otros productos web especficos de


Microsoft. Por defecto, IIS no tiene una instalacin Perl y no

Error Interno del Servidor: Si el script CGI de Perl est teniendo

funcionar bien con CGI.

problemas para ejecutarse es probable que veas este error.


Verifica que est instalado correctamente Perl y que los

Aunque las aplicaciones web Xojo funcionan con IIS, su correcta

permisos sean los correctos.

configuracin es una tarea avanzada. Para ser francos, tambin


es difcil.

Unable to Launch Application: El guin CGI de Perl no puede


ejecutar tu aplicacin. Por lo general vers informacin

Salgo que requieras necesariamente IIS, es recomendable que

adicional como permiso denegado. Verifica que tu app web

configures Apache para ejecutarlo sobre Windows.

se haya subido usando el modo de FTP Binario (y no ASCII, lo


que puede corromper los archivos de las aplicaciones).
Unable to Connect to Port: puede que el puerto est
bloqueado. Quiz el firewall est bloqueando un puerto local o

Estas son las instrucciones oficiales para instalar Apache en


Windows:
http://httpd.apache.org/docs/2.2/platform/windows.html

que el puerto est siendo utilizado por otra aplicacin o

20

Alojamiento
Si todo esto resulta demasiado con lo que quieras
lidiar, deberas de considerar alijar tu aplicacin web
en Xojo Cloud. Este servicio te permite desplegar
una aplicacin web directamente desde Xojo en un
paso.

21

Chapter 2

Desarrollo
Multiplatafor
ma
Este captulo describe como puedes crear
aplicaciones multiplataforma. Los temas incluyen,
diseo de interfaz de usuario, compilacin
condicional, localizacin y caractersticas
especficas del SO.

Section 1

Diseo de la Interfaz de Usuario


Cuando disees tus aplicaciones para que sean multiplataforma,
debes de recordar en todo momento las diferencias en las
interfaces de usuario entre cada plataforma.
Una aplicacin bien diseada para Windows puede verse
drsticamente fuera de lugar en OS X o Linux, y viceversa.

Mens
ApplicationMenuItem
Las aplicaciones de escritorio tienen por lo general un men
Acerca de que muestra una ventana Acerca de con el nombre de
la aplicacin y su informacin de copyright.
En Windows y Linux, este men Acerca de aparecer en un men
Ayuda, que puedes aadir haciendo clic en el botn Aadir
Men en el Editor de Men.
En OS X, el men Acerca de debe de aparecer en el men
Aplicacin.
Para lograr que el men Acerca de se mueva de lugar
automticamente en OS X, aade un men Acerca de al men
Ayuda de modo que aparezca como se espera en Windows y

Linux. Entonces puedes cambiar su propiedad Super en el


Inspector de MenuItem a ApplicationMenuItem. Cualquier
men que utilice esta clase se mover automticamente al men
Aplicacin cuando se ejecute sobre OS X.

PrefsMenuItem
De igual modo, el men Preferencias tambin est ubicado en el
men Aplicacin bajo OS X. En Windows y Linux, el men
Preferencias est ubicado por lo general en el men Edicin y se
llama Opciones.
Siempre hay un men de Preferencias fijo en el men Aplicacin
en OS X. Para asociar tu men de Preferencias con l, has de
configurar su propiedad Super a PrefsMenuItem. Slo un men
de tu proyecto debera de estar configurado como
PreferencesMenuItem.
Para cambiar el nombre del men de Preferencias de OS X y
Windows/Linux, debes de utilizar una constante. Por defecto hay
varias constantes en la clase App que controlan el texto para
To change the name of the Preferences menu for OS X and
Windows/Linux, you would use a constant. By default there are
several constants on the App class that control the text for
23

Edicin->Borrar/Limpiar y Archivo->Salir. Puedes aadir otro


para gestionar las preferencias.

Figura 2.1 Aadir una Constante de Preferencias

Adems, cuando ejecutes la aplicacin en OS X, el men


Preferencias aparecer en el men Aplicacin en vez de bajo el
men Edicin.

Botones de
Dilogo
Quiz nunca lo hayas

Figura 2.3 Print Dialog Showing


Cancel Followed by Print (OK)
Button

advertido, pero cuando


utilizas un cuadro de
Aade una nueva constante y llmala kPreferences, definiendo su
valor por defecto a &Opciones.

dilogo en Windows y

Figura 2.2
Propiedades del
Men Preferencias

en un orden diferente al

En el Editor de Constantes, haz clic en


+ para aadir una nueva entrada y
selecciona OS X para la Plataforma.
En el Valor, introduce Preferencias

Ahora que has creado la constante,


puedes usarla como el texto para el
men. Aade un nuevo MenuItem en el
men Edicin y define su propiedad
Text a #App.kPreferences. Esto le
indica que utilice el valor de la constante. Tambin has de definir
su sper a PrefsMenuItem.

Linux, los botones estn


mostrado por OS X.
En OS X, los botones por
defecto OK/Cancelar se

Figura 2.4 Print Dialog on


Windows Showing OK
Followed by Cancel Button

muestran como Cancelar


seguido de OK. En Windows
y Linux aparecen como OK,
seguidos por Cancelar.
Para que tus aplicaciones se
vean correctamente en cada
plataforma, los botones

Puedes usar los botones de previo en la barra de herramientas


del Editor de Men para ver el texto cambiar entre OS X,
Windows y Linux.

deben de aparecer en las


posiciones correctas. El modo ms sencillo de hacerlo es usando
un ContainerControl para cambiar los botones en tiempo de
ejecucin.
24

El proyecto de ejemplo OKCancelContainer en la carpeta


Desktop->Custom Controls muestra cmo hacerlo.

Fuentes

#If TargetLinux Then


Me.Height = Me.Height + 20
#Endif

Por lo general utilizars la fuente System como la Fuente de tus


controles. Esto indica a la aplicacin que utilice la fuente por
defecto del sistema como fuente del control. Como puedes
esperar, la fuente del sistema por defecto vara en cada
plataforma.
Esto significa que algunos controles pueden resultar siendo
demasiado pequeos en algunas plataformas como para que
quepa el texto suministrado. Es importante que ejecutes tu
proyecto en cada plataforma y revises el diseo para asegurarte
de que todo se lea correctamente y encaje tal y como esperas.
Es posible que observas que debes aumentar el tamao en
algunos controles de modo que se muestren correctamente en
todas las plataformas. Puedes hacerlo en el Editor de Diseo
aumentando el tamao del control. O puedes hacerlo en tiempo
de ejecucin aumentando el tamao del control en su evento
Open, en funcin de cul sea la plataforma que se est utilizando
(consulta la seccin sobre Compilacin Condicional). Este cdigo
en el manejador de evento Open de un PushButton aumenta su
tamao cuando funciona sobre Linux:

25

Grficos y Parpadeo en Windows

En el Canvas, lo primero que querrs hacer ser activar la

OS X y Linux utilizan una tcnica denominada doble ber para

propiedad DoubleBuer y desactivar la propiedad

todo el dibujado de la ventana. Esto significa que las

EraseBackground. La propiedad DoubleBuer permite que el

actualizaciones de una ventana se realizan fuera de pantalla y

Canvas pueda realizar sus actualizaciones fuera de pantalla para

luego se muestra sobre la pantalla real en una nica

reducir el parpadeo. La propiedad EraseBackground evita el

actualizacin. El resultado son unas actualizaciones de ventanas

borrado del Canvas (y visto como un rectngulo blanco) antes de

y grficos libres de parpadeos y estables.

redibujarlo, lo que es una fuente comn de parpadeo.

Sin embargo Windows no utiliza esta tcnica. En este caso se

Ahora puedes hacer todo tu dibujado en el evento Paint usando

envan las actualizaciones de inmediato a la ventana (Window).

el objeto grfico suministrado, g.

Esto puede resultar con frecuencia en un parpadeo no deseado


cuando se ejecutan las aplicaciones sobre Windows, pero hay
estrategias para mitigarlo.

Nota: No realices dibujado directamente sobre la propiedad


Canvas.Graphics. Esto aumentar el parpadeo y reducir las actualizaciones
grficas.

Puedes tener mtodos independientes para actualizar los

No Superpongas Controles

grficos, pero han de llamarase desde el evento Paint con el

El modo ms sencillo en el que puedes evitar el parpadeo


consiste en no superponer ningn control. Los controles
superpuestos resultan en ms peticiones para redibujarlo, lo que
deriva en parpadeo.

objeto grfico suministrado como parmetro a dichos mtodos.


Cuando quieras actualizar los grficos en el Canvas, llama al
mtodo Invalidate.

Usa un Canvas
Para obtener mejores resultados, muestra cualquier grfico

Canvas1.Invalidate(False)

utilizando el evento Paint de un control Canvas. Evita usar el


evento Paint de la ventana, la propiedad Canvas.Backdrop o el

Tambin puedes llamar al mtodo Refresh:

control ImageWell. Aunque ests tcnicas funcionan bien en


algunas situaciones, deerivan en parpadeo cuando se trata de
diseos ms complejos.

Canvas1.Refresh(False)
26

La diferencia es que el Invalidate indica al Canvas que se


actualice cuando reciba una peticin de redibujado por parte del
sistema operativo. El mtodo Refresh indica al Canvas que se
actualice de inmediato. Por lo general querrs usar Invalidate.
Ambos tienen un parmetro EraseBackground, y que est a True
por defecto. Esto significa que el Canvas se borrar antes de
redibujar los contenidos. En la mayora de los casos no querrs
que se produzca el borrado, de modo que has de indicar False
como parmetro para EraseBackground.
Mediante estas tcnicas puedes crear grficos estables y sin
parpadeos en tus aplicaciones Windows.

27

Section 2

Compilacin Condicional
En el proceso de crear una aplicacin que funcione sobre
mltiples plataformas, puedes encontrar que tienes algo de
cdigo que slo es necesario en una plataforma.
Un ejemplo de esto podra ser el cdigo encargado de guardar
las preferencias. En Windows podras querer usar el Registry,
pero en OS X querrs utilizar una plist.
Puedes gestionar estos casos especiales usando la compilacin
condicional.

Compilacin Condicional
Con la compilacin condicional ests indicando al compilador
que incluya o excluya partes concretas del cdigo en funcin de
lo que se est compilando. Esto se realiza utilizando el comando
#If en combinacin con #Else, #ElseIf y #Endif.
Puedes usar estos comandos junto con cualquier constante para
incluir o excluir selectivamente el cdigo durante la compilacin.
Estas son algunas de las constantes internas que puedes usar:
TargetMacOS: True cuando se compila para OS X, False para
el resto.
TargetCarbon: True cuando se realiza una creacin Carbon en
OS X, False en el resto de los casos.
TargetCocoa: True cuando se realiza una creacin Cocoa en
OS X, False en el resto de los casos.
TargetHasGUI: True para las aplicaciones de escritorio y web,
False para las aplicaciones de consola.

28

TargetLinux: True cuando se hace una compilacin Linux, False


en el resto de los casos.
TargetWeb: True cuando se hace una aplicacin web, False en
el resto de los casos.
TargetWin32: True cuando se hace una compilacin Windows,
False en el resto de los casos.
DebugBuild: True cuando la aplicacin se est ejecutando en el

#If TargetWin32 Then


// Use Registry
SavePreferencesToRegistry
#ElseIf TargetMacOS Then
SavePreferencesToPList
#ElseIf TargetLinux Then
SavePreferencesToXML
#Endif

depurador, False cuando se est ejecutando como creacin


independiente.
VersionString: Devuelve la versin utilizada con el formato:

Tambin puedes utilizar tus propias constantes, como en este


caso para verificar si una beta ha expirado:

2012r2
Las constantes pueden utilizarse as:

#If DebugBuild Then


// Activate logging
App.Logging = True
#Else
App.Logging = False
#Endif

#If App.BetaBuild Then


// Check if expired
Dim now As New Date
If now.Year > 2012 Then
Quit
End If
#Endif

Podra utilizarse esta estructura para gestionar el guardado de


preferencias de forma diferente:
29

Seleccionar un Destino para una Clase/


Mtodo en el Inspector
Puedes indicar si un tem particular del proyecto (excluyendo las
Windows) debera de incluirse slo en determinados tipos de
proyecto.
Por ejemplo, puede que tengas una clase que slo quieras incluir
cuando creas una aplicacin web.
Para ello utiliza las propiedades Include In de la pestaa
Avanzado en el Inspector. Para activar la pestaa Avanzado, haz
clic en el botn de rueda dentada:

En el Inspector vers la seccin


Incluir en, y que permite indicar
los destinos a incluir. Tus

Figura 2.5 Include In


Targets

opciones son Desktop, Web y


Consola. Selecciona No para
excluir la clase (o mtodo
seleccionado) del destino
adecuado. Por defecto, cada
destino est definido a S.
Tambin puedes definir Incluir En para los mtodos,
propiedades, constantes, definiciones de evento, enumeraciones,
estructuras, delegados y cualquier cosa que puedas aadir como
tem de proyecto.
30

Section 3

Caractersticas OS X
Cocoa
Cocoa es el actual framework de interfaz de usuario soportado
por Apple en OS X y es la Arquitectura de destino por defecto
para las aplicaciones de OS X. El anterior framework, Carbon,
sigue estando disponible, pero la mayor parte ha sido deprecada
por Apple.
Para la mayora de los casos, tus actuales aplicaciones deberan
de simplemente funcionar sin la necesidad de realizar cambios
significativos cuando se crea para Cocoa, pero hay algunas
cosas que debes de recordar si ests cambiando aplicaciones
antiguas de Carbon a Cocoa.

Diferencias Generales de la IU
Las ventanas redimensionables pueden cambiar su tamao
desde cualquier lado de la ventana.
Las comprobaciones gramaticales y ortogrficas estn
disponibles ahora para los controles TextField y TextArea con
solo activar la propiedad AutomaticallyCheckSpelling en el
Inspector.

Los PushButtons tienen una propiedad ButtonStyle que puede


emplearse para cambiar el aspecto del botn.
La propiedad Window.Composite se ignora dado que Cocoa
dibuja todas las ventanas como compuestas.
Las ventansa de tus aplicaciones pueden moverse por la
pantalla mientras que se est ejecutando el cdigo.
Los Timers, hilos y sockets continan recibiendo eventos
cuando se muestran los mens o cuadros de dilogo modales.
StyledText se dibuja mucho ms rpido.

Grficos
Todo el dibujado que utilice un Canvas debe de realizarse desde
el evento Paint o un mtodo llamado desde ste. Cocoa es muy
restrictivo sobre esto. Si intentas acceder directamente al objeto
Graphics de un Canvas, reducirs drsticamente el rendimiento
de visualizacin de tu app.
Tambin deberas de utilizar Canvas.Invalidate para refrescar el
Canvas en vez de Canvas.Refresh. El mtodo Refresh indica al
Canvas que se redibuje de inmediato, lo que puede reducir las
31

cosas al redibujarse demasiado. Invalidate indica al SO que


redibuje el Canvas cuando est listo, lo que resulta ms eficiente.

entonces la fuente no podr mostrarse en negrita o itlica. Las


propiedades Bold e Italic no tendrn efecto en este caso.

Todo el dibujado se realiza ahora en un espacio de color


genrico que es independiente del dispositivo de salida actual.
Esto significa que los colores se renderizarn de un modo ms
parecido entre pantallas e impresoras.

Para comprobar si la fuente que quieres utilizar tiene la variacin


que necesitas, utiliza la aplicacin Catlogo Tipogrfico incluida
con OS X.

Hilos

Los manejadores de evento KeyDown no gestionados causan un


Beep en vez de comportarse en silencio. Esto es intencionado y
da al usuario un feedback de que la accin no ha tenido
resultado. Para eliminar dicho Beep, solo has de devolver True
desde el manejador de evento KeyDown.

Cocoa no permite que el cdigo de un hilo pueda modificar


cualquier cosa relacionada con la interfaz de usuario (y que se
ejecuta en lo que se denomina hilo principal). Si tu interfaz de
usuario necesita actualizarse basndose en la informacin de un
hilo, debers de dejar que la IU solicite la informacin desde
dicho hilo.
El mejor modo de hacerlo es utilizando un Timer que actualice
peridicamente la IU en funcin de la informacin obtenida desde
un hilo.

MenuItems
Cocoa no permite el uso del mismo MenuITem en dos sitios
diferentes. Para solventarlo, usa el mtodo MenuItem.Clone para
crear una copia del MenuItem.

Mostrar Fuentes
Cocoa es ms restrictivo sobre los estilos de fuente mostrados.
En particular, si una fuente no tiene variaciones negrita o itlica,

Gestin del Teclado

Adicionalmente, el manejador de evento KeyDown significa ahora


literalmetne se ha pulsado una tecla y no intenta interpretar el
evento de tecla para secuencias de tecla muertas o mtodos de
entrada. Por ejemplo, pulsar Opcin+E y nuevamente E resulta en
dos pulsaciones de tecla enviadas a KeyDown en vez de una
nica pulsacin con el valor .

tems no Soportados
Ventanas Drawer (Cajones)
Clase ResourceFork
Cursores almacenados en el resource fork
Mtodo TextArea.Save

32

Agenda

Cada contacto tiene propiedades para los diversos campos,

Las clase AddressBook se utilizan para acceder a datos de la

como FirstName, LastName, etc. Para aadir un contacto, cralo

Agenda en OS X. Las clases disponibles son:

y utiliza a continuacin el mtodo Add:

AddressBook, AddressBookAddress, AddressBookContact,


AddressBookData, AddressBookGroup.
La clase AddressBook proporciona acceso a la Agenda. Tambin
puedes acceder a la Agenda usando System.AddressBook:

Dim book As New AddressBook


// or
Dim book As AddressBook
book = System.AddressBook

Dim contact As New AddressBookContact


contact.FirstName = "Bob"
contact.LastName = "Roberts"
book.Add(contact)

Se utiliza AddressBookAddress para obtener informacin de un


contacto. AddressBookData se utiliza para obtener informacin
como las direcciones de correo electrnico, nmero de telfono o
nmeros de fax.
AddressBookGroup te ofrece informacin sobre todos los grupos
de la Agenda. Utiliza la propiedad AddressBook.Groups para

Para obtener los contactos de la Agenda, utiliza la propiedad

obtener un array de grupos.

Contacts:

Dim contacts() As AddressBookContact


contacts = book.Contacts

33

Llavero

Este cdigo guarda una contrasea en el Llavero por defecto:

El KeyChain es una caracterstica de OS X utilizada para


almacenar contraseas de cuenta para las aplicaciones.
Mediante el uso del llavero tus usuarios no han de teclear su
contrasea en el caso de que el llavero est desbloqueado en su
sistema.
Utiliza la clase KeyChain para acceder a los Llaveros del OS X
desde tus aplicaciones. Las clases son: KeyChain, KeyChainItem
y KeyChainException.
Siempre deberas de solicitar permiso al usuario antes de
almacenar cualquier cosa en un llavero.
Utiliza el mdulo System para obtener una referencia del Llavero
por defecto. Utiliza la clase KeyChainItem para crear, actualizar o

Dim newItem As KeyChainItem


If System.KeyChainCount > 0 Then
newItem = New KeyChainItem
// Indicate the name of the application
newItem.ServiceName = "MyApplication"
// Assign a password to the item
System.KeyChain.AddPassword(newItem,
"SecretPassword")
Else
Beep
MsgBox("You don't have a key chain.")
End If

encontrar elementos en el llavero.


Si tienes ms de un llavero, entonces puedes utilizar el
constructor de KeyChain para acceder a un llavero especfico por

Exception e As KeyChainException
MsgBox("Keychain error: " + e.Message)

su nmero.

34

Y este cdigo recupera la contrasea:

Uniform Type Identifiers (UTI)


Antes de OS X 10.4, el OS X utilizaba los Tipos de Archivo y

Dim itemToFind as KeyChainItem


Dim password As String
itemToFind = New KeyChainItem
// Name to find
ItemToFind.ServiceName = "MyApplication"
// Get the password
password =
System.KeyChain.FindPassword(itemToFind)
MsgBox("Password: " + password)
Exception e As KeyChainException
MsgBox("Keychain error: " + e.Message)

Cdigos de Creador para identificar los documentos creados por


las aplicaciones. Desde entonces Apple ha comenzado a
abandonar los Cdigos de Creador y Tipos de Archivo.
Un UTI es una cadena de texto especial que identifica
documentos de datos y de aplicacin. El UTI para un archivo
PNG es public.PNG y para un archivo PDF es com.adobe.pdf.
Si ests trabajando con tipos de archivo comunes deberas de
utilizar el UTI pblico para l.
Estos son algunos enlaces de referencia
http://en.wikipedia.org/wiki/Uniform_Type_Identifier
http://developer.apple.com/library/mac/#documentation/
Miscellaneous/Reference/UTIRef/Articles/SystemDeclaredUniformTypeIdentifiers.html
Nota: Los UTI funcionan con aplicaciones Cocoa y Carbon.

UTI Personalizados
En tus propios documentos tambin puedes crear tu propio UTI.
Un UTI personalizado suele ser un formato de nombre de
dominio inverso junto con una entrada adicional para el nombre
del tipo de documento. Por ejemplo podras tener un UTI como
com.company.app.doc. La primera parte de este UTI debe de
35

corresponderse con el Identificador de Aplicacin indicado en las


propiedades de App (en este caso com.company.app).
Puedes crear un UTI para tus documentos utilizando el editor de
Tipo de Archivo. La ltima columna permite indicar el UTI.

b. Introduce ???? para el MacType y MacCreator. Estos son


los marcadores que no se utilizan.
c. Indica tu extensin (sin punto).
d. Introduce el UTI usando tu identificador de aplicacin como

Cuando creas la aplicacin se incluye la informacin del UTI en el

base. Por ejemplo, este podra ser el UTI de tu doc:

archivo info.plist en el bundle de la aplicacin. Pero para que esto

com.company.app.doc

funcione correctamente debes de aadir una seccin adicional


UTExportedTypeDeclaration manualmente al plist.

Configurar un UTI Personalizado


Estos son los pasos para crear un tipo de documento
personalizado que pueda ser abierto por tus aplicaciones. Has de
realizar estos pasos tras cada compilacin, pues el Info.plist que
debes modificar se vuelve a crear en cada una de ellas:
1. En los Ajustes de Compilacin de OS X:
a. Indica el Identificador de Bundle para tu aplicacin

e. Elige el icono para identificar los archivos de este tipo.


3. Regresa a las propiedades de la App.
a. Indicar tu Tipo de Archivo en AcceptFileTypes
4. Crea tu aplicacin.
5. En el Finder, dirgete a tu app y elige Mostrar Contenidos del
Paquete en el men contextual. Ve a la carpeta Contents y
abre el archivo Info.plist con un editor. Aade el siguiente
cdigo al final (antes de </dict>), sustituyendo el UTI

utilizando el formato de nombre de dominio inverso:

(com.company.app.doc) y la extensin (myextension), segn

com.company.app

proceda:

b. Introduce ???? como Cdigo de Creador.


2. Aade un Conjunto de Tipos de Archivo a tu proyecto y aade
a continuacin un Tipo de Archivo en l:
a. Introduce un nombre en Nombre mostrado y Nombre de
Objeto (como por ejemplo MyCustomDocType).
36

con tu aplicacin de modo que aparecer el icono indicado y


<key>UTExportedTypeDeclarations</key>
<array>
<dict>
<key>UTTypeConformsTo</key>
<array>
<string>public.data</string>
<string>public.item</string>
</array>
<key>UTTypeIdentifier</key>
<string>com.company.app.doc</string>
<key>UTTypeTagSpecification</key>
<dict>
<key>public.filename-extension</key>
<array>
<string>myextension</string>
</array>
</dict>
</dict>
</array>

podrs abrirlo desde tu aplicacin.

Dim f As Folderitem
f =
GetSaveFolderItem(FileTypes1.CustomType,
"Untitled" +
FileTypes1.CustomType.Extensions)
If f <> Nil Then
Dim output As BinaryStream
output = BinaryStream.Create(f, True)
output.Write("CustomType: Sample Text")
output.Close
End If

Cuando vayas a ver el documento guardado en el Finder, vers


que tiene el icono indicado. Haz doble
clic sobre l para abrir tu app (sin no

6. Guarda Info.plist.
7. Vuelve a tu aplicacin en el Finder y Ejecuta tu aplicacin para
registrar los tipos
Cuando utilices GetSaveFolderItem (o SaveAsDialog),

est abierta), y para que llame al


evento OpenFile.

Figura 2.6
Documento
personalizado en
el Finder

La apertura de archivos funciona


proporcionando el nombre del FileType
como filtro en el dilogo:

proporciona el FileType a usar como filtro (Filter). Un documento


personalizado creado con el archivo seleccionado se asociar
37

Dim f As FolderItem
f = GetOpenFolderItem(FileTypes1.MyType)

Pantallas Retina
Las pantallas Retina son pantallas que tienen una resolucin de
pxeles extremadamente elevada. Cuando se dibujan elementos
de texto y de IU al mismo tamao sobre pantallas retina, estos

Migrar a UTIs desde MacCreator y MacType


Si has estado usando las propiedades MacCreator y MacType de
un FolderItem y especificndolos en el Conjunto de Tipos de
Archivo, entonces debes de comenzar a utilizar los UTI en breve.
Apple ha deprecado tanto el MacCreator como el MacType.
Para cambiar a los UTI slo necesitas comenzar a utilizarlos en
tus Conjuntos de Tipos de Archivo y actualizar Info.plist tal y
como se ha descrito anteriormente. Puedes dejar los antiguos
MacCreator y MacType tal cual o puedes eliminarlos de modo
que no obtengas avisos de deprecacin cuando analices tus

pxeles ms pequeos resultan en unos textos y controles


increblemente ntidos y claros. Una pantalla retina tambin
permite que las imgenes de mayor resolucin ocupen un
espacio ms pequeo en la pantalla. Actualmente Apple es la
nica que ofrece pantallas retina con sus productos iPad, iPhone,
iPod touch y MacBook Pro.
Con un poco de trabajo tus aplicaciones Cocoa pueden
convertirse en preparadas para Retina, de modo que los
elementos de la IU y los grficos se dibujen con una elevada
calidad cuando se ejecuten sobre una pantalla retina.

proyectos.

38

Nota: Slo las aplicaciones Cooca pueden ser compatibles con Retina.
Apple no soporta las aplicaciones preparadas para Retina.

Este es un proceso de dos pasos. En primer lugar has de

<key>NSHighResolutionCapable</key>
<true/>

actualizar Info.plist en el bundle de tu aplicacin para activar el


soporte retina.
En segundo lugar, si tu aplicacin tiene grficos entonces
necesitas actualizarlos para que aparezcan con calidad retina.
Por lo general esto significa que has de proporciona grficos de
mayor tamao y reducir su tamao cuando sea necesario. Por lo
general has de proporcionar una imagen con una resolucin 2x y
escalarla para que encaje en el rea disponible. OS X se encarga
de gestionarlo automticamente.

Esto activa el soporte retina para los elementos de la IU, como


los botones y el texto.
Dado que necesitas editar el plist antes de ejecutar la aplicacin,
puede ser complicado probarlo en modo de depuracin. Una
solucin consiste en utilizar la caracterstica Ejecucin
Pausada. Esto crear tu aplicacin y la pausar antes de
ejecutarla. Puedes hacer los cambios mientras que est pausada
y hacer doble clic entonces sobre la app debug para ejecutarla.

En el caso de algunos grficos, es posible que observes un mejor


funcionamiento proporcionando grficos pre-escalados para
pantallas retina y no retina. Por ejemplo, es posible que quieras

Figura 2.7 Aplicacin no-Retina

emplear una imagen 1x para pantallas no retina, pero usar una


imagen 2x cuando se trate de una pantalla retina. Para ello, has
de preguntar al OS X cul es el factor de escala, de modo que
puedas determinar qu imagen utilizar.

Activar Soporte Retina


Para activar el soporte retina, has de aadir una clave especial
(por encima de la entrada </dict> cerca del final) al archivo
Info.plist en el bundle de la aplicacin:

39

Otra opcin conciste en utilizar Compilacin Automatizada para


aadir esta clave al archivo plist una vez que se ha creado la
aplicacin.
Nota: Si no tienes un MacBook Pro Retina, aun puedes ver cmo quedara
el aspecto de una aplicacin retina. Una opcin es usar un iPad con pantalla
retina como pantalla adicional para tu Mac (usando una app como
AirDisplay). O bien puedes descargar Quartz Debug desde Apple (en sus
Graphics Tools) y usarla para activar los modos de pantalla HiDPI para tu
pantalla. UNa vez que lo hayas hecho (selecciona Window -> UI Resolution
y Enable HiDPI display modes), aparecern nuevos modos de resolucin
en las preferencias de tu pantalla (con una resolucin realmente reducida).

alta resolucin utilizados por una pantalla retina. Una pantalla no


retina utiliza la versin escalada.
Pero el uso de una versin escalada puede derivar en resultados
no ptimos, de modo que Apple recomienda incluir dos imgenes
separadas en tu aplicacin, una para las pantallas retina y otra
para las pantallas no retina.
Para detectar si tu aplicacin est funcionando sobre una
pantalla retina, puedes utilizar la funcin BackingScaleFactor de
la API Cocoa. Aade este cdigo en una Window:

Figura 2.8 Aplicacin Retina


Function ScalingFactor() As Single
#If TargetCocoa
Declare Function BackingScaleFactor Lib
"AppKit" Selector "backingScaleFactor"
(target As WindowPtr) As Double
Return BackingScaleFactor(Self)
#Else
Return 1
#Endif
End Function
Por ejemplo una pantalla de 1920 x 1200, el mejor modo HiDPI disponible,
es 960 x 600.

Grficos Retina

El ScalingFactor es 2 para un MacBook Pro Retina (u otros

Si te limitas a aadir grficos de mayor tamao (2x) a tus


proyectos y escalarlos hacia abajo para encajarlos cuando los
dibujes, entonces obtendrs automticamente los grficos de

modos HiDPI) y 1 para el resto de los casos, pero estos valores


podran cambiar en funcin del tipo de pantalla retina. Puedes

40

utilizar este valor para determinar el tamao de imagen a usar o


bien otra escala que puedas necesitar.
Ten en cuenta que esto solo se aplica a los grficos de mapas de
bits dibujados en la instancia Graphics en el manejador de evento
Paint. Los grficos vectoriales se escalan automticamente.
Si ests haciendo doble buer manual de tus grficos vers que
no se escalan automticamente a calidad retina. En vez de doble
buer, has de dibujar siempre directamente sobre la instancia
Graphics del manejador de evento Paint. La propiedad
DoubleBugger de la propiedad Canvas funciona con las pantallas
Retina.

Firma de Cdigo
La caracterstica GateKeeper entra en funcionamiento con la
publicacin de OS X 10.8 Mountain Lion en 2012. Esto significa
que las aplicaciones descargadas o copiadas a un Mac con
Mountain Lion o posterior, y que no hayan sido firmadas
utilizando el Apple Developer Certificate, mostrarn este error
cuando se ejecuten en Mountain Lion o posterior:
Este error puede
eliminarse en
Preferencias del

Figura 2.9 Error mostrado por Mountain Lion


posterior para las apos no firmadas

Sistema cambiando
el ajuste Permitir
aplicaciones
descargadas desde
por la opcin
Cualquiera (Figura
2.10).
Adicionalmente, puedes hacer clic derecho sobre la app y elegir
Abrir en el men para indicarle al OS X realmente quiero abrir
esta aplicacin, muchas gracias.
Ten en cuenta que esto solo importa para las nuevas aplicaciones
que transfieras a un Mac con Mountain Lion o posterior. Si tienes
Xojo funcionando sobre Mountain Lion, podrs ejecutar sin
problemas las aplicaciones creadas. Slo vers esta advertencia
cuando copies las aplicaciones creadas a otro Mac, ya sea
41

Figura 2.10 Preferencias del Sistema de


Seguridad y Privacidad

porque las

embargo, el certificado obtenido es bueno por untotal de 5 aos,

hayas puesto

de modo que no tienes que pagar la cuota de 100 dlares cada

para su

ao excepto que quieras distribuir tus apps en la Mac App Store.

descarga o
bien al
copiarlas
desde un

Puede encontrar ms informacin sobre el Mac Developer


Program en el Mac Dev Center:
https://developer.apple.com/devcenter/mac

dispositivo
USB, la red o

Una vez te hayas unido a dicho programa, puedes crear tus

cualquier otro

propios certificados utilizando la Developer Certificate Utility en el

medio.

Mac Dev Center. Los pasos son algo lisoso, pero esencialmente
tendrs que solicitar un certificado Developer ID usando la

Por tanto

Developer Certificate Utility.

aunque
tcnicamente no necesites firmar tus aplicaciones OS X para
ejecutarlas en Mountain Lion y posterior, probablemente querrs

Figura 2.11 Developer Certificate


Utility en Mac Dev Center

La utilidad te guiar
por el proceso de

hacerlo. Lo cierto es que la mayora de la gente dejar este ajuste

comenzar por el

tal y como se ofrece por defecto, e incluso desconocern que

acceso al Llavero y

cuando reciben dicho mensaje pueden hacer clic derecho sobre

descargar y subir

la app para abrirla. Puedes probar a explicrselo pero en

archivos hasta que

cualquier caso, esto podra ser engorroso para tus usuarios. Lo

tengas instalado el

ms probable es que terminen prescindiendo de tu app.

certificado. Es un
poco tedioso, pero

Desafortunadamente para firmar tus apps necesitas un

bastante directo.

certificado de desarrollador de Apple. Y el nico modo de


obtener el Developer Certificate es dndose de alta en el Mac

Esta es la parte

Developer Programa, cuyo coste es de $100 anuales. Sin

complicada. Con el
certificado instalado
42

puedes firmar cualquiera de tus aplicaciones. Puedes hacerlo


utilizando el comando codesign desde el Terminal.
Pero antes de que empieces, asegrate de que tengas instalado
el certificado Intermediate Developer ID. Ve a esta pgina:
http://www.apple.com/certificateauthority/
y descarga el certificado Developer ID. Haz doble clic sobre l
para instalarlo en el Llavero.
Ahora ya ests preparado para firmar tu aplicacin. Navega hasta

AppleEvents
Los AppleEvents son un modo de que las aplicaciones OS X
puedan comunicarse entre s. Un AppleEvent es un bloque
autocontenido de datos compuestos por una secuencia de clavetipo-valor (denominados un AppleEvent Descriptor, o AEDesc).
Cada descriptor puede contener otros descriptores como array
ordenado o bien una mezcla de datos con claves.
El AppleEvent como un todo es tanto l mismo como el
AppleEvent Descriptor

su carpeta usando el Terminal. Aqu has de introducir este

Dirgete a la Referencia del Lenguaje para obtener detalles

comando para firmar tu aplicacin y todas sus libreras.

especficos sobre cmo utilizar los ApplEvents.

Obviamente querrs sustituir tuXojo.app con el nombre de tu


aplicacin y Developer ID Application: Yourname con el nombre
de tu certificado de firma indicado en el Llavero.

Refer to the Language Reference for specific details on how to


use AppleEvents.

codesign -f -s "Developer ID Application:


YourName" "tuXojoApp.app"

Esto es. Ahora puedes comprimir tu app y transferirla a otro


ordenador con Mountain Lion o posterior y podrs ejecutarla
haciendo simplemente doble clic sobre ella.

43

Section 4

Caractersticas Windows
OLE
OLE (Object Linking and Embedding) es una forma de

Este cdigo crea una conexin a Internet Explorer y le indica que


muestre la Wikipedia:

comunicarse con objetos Windows desde tus aplicaciones.


Se utilizan las clases OLEObject, OLEContainer, OLEParameter y
OLEException classes.

OLEObject
OLEObject puede utilizarse para enviar mensajes a otras
aplicaciones Windows que soporten OLE, como por ejemplo
Internet Explorer.
Utiliza el mtodo Value para obtener y definir los valores del
objeto OLE. Utiliza el mtodo Invoke para llamar a mtodos (con
o sin argumentos) sobre el objeto OLE.

Dim obj As OLEObject


Dim v As Variant
Dim params(1) As Variant
obj = New
OLEObject("InternetExplorer.Application",
True)
obj.Value("Visible") = True
params(1) = "http://www.wikipedia.org"
v = obj.Invoke("Navigate", params)
Exception e As OLEException
MsgBox(e.message)

OLEContainer
Se utiliza OLEContainer para embeber controles ActiveX en tus
aplicaciones.

44

Para usar un OLEContainer has de arrastrarlo desde la Librera


sobre una ventana. En la propiedad ProgramID del Inspector,
indica el ID de programa para el control.

Automatizacin de Office

Puedes acceder a las propiedades y mtodos del ActiveX usando


la propiedad Content, y que devuelve un OLEObject donde
puedes usar los mtodos Value e Invoke.

ExcelApplication and PowerPointApplication. Estas clases

Este cdigo en un Button, muestra un PDF en un ActiveX


OLEContainer Adobe Reader que se ha aadido a una ventana:

Microsoft facilita la automatizacin de Word, Excel y PowerPoint,


y que puedes hacer con las clases: WordApplication,
exponen el Microsoft Object Model para cada una de las
aplicaciones Oce. El Object Model de Word, Excel y PowerPoint
son inmensos, pero estn documentados aqu:
Word Object Model Reference: http://msdn.microsoft.com/enus/library/837519

PDFContainer.Content.Value("Src") =
"C:\Document.pdf"

Excel Object Model Reference: http://msdn.microsoft.com/enus/library/194068


PowerPoint Object Model Reference: http://

Nota: Dependiendo de la versin de Adobe Reader, es posible que debas


de hacer clic sobre el contenedor antes de que se muestre el PDF.

msdn.microsoft.com/en-us/library/743835

Para imprimir el PDF en el OLEContainer has de llamar al mtodo

Este cdigo obtiene el texto introducido en una TextArea y lo

printWithDialog del control ActiveX Adobe Reader:

muestra en un documento de Microsoft Word:

PDFContainer.Content.Invoke("printWithDialog")

Dim wordDoc As New WordApplication


wordDoc.Visible = True
Dim doc As WordDocument
doc = wordDoc.Documents.Add
doc.Range.Text = TextArea1.Text

Nota: WordDocument es una clase en el Word Object Model.


45

Registry
El Registry es una caracterstica del sistema para el
almacenamiento de preferencias y ajustes de la aplicacin.
La clase RegistryItem se utiliza para encontrar y aadir
informacin en el Registry.
Este cdigo obtiene la ubicacin del directorio Archivos de
programa desde el registry:

Dim r As New
RegistryItem("HKEY_LOCAL_MACHINE\Software\Micro
soft\Windows\CurrentVersion", False)

If r <> Nil Then


MsgBox(r.Value("ProgramFilesDir"))
End If

46

Section 5

Localizacin
Localizas tus aplicaciones mediante el uso de constantes
dinmicas. Slo una constante de tipo String puede ser marcada

Figura 2.13 Editor de Constante para los


Valores Localizados

como dinmica, permitiendo que


sea ms sencillo su uso para la
localizacin.

Figura 2.12 Constante


Dinmica

Para identificar una constante


como dinmica, crea una
constante de cadena y activa la
caja de verificacin dinmica. Un
sistema recomendado es crear

#LocalizedStrings.kWelcomeMessage

un mdulo separado para tus contantes localizadas, si bien


puedes incluirlas en cualquier parte.
Utiliza las constantes localizadas como Text o Caption utilizando
como prefijo el caracter #. Si tienes un mdulo llamado
LocalizedStrings y tienes una constante protegida llamada
kWelcomeMessage, entonces puedes aadirla a una Label como
su propiedad Text as:

Puedes introducir diferentes valores localizados para la


constante dinmica en funcin de la plataforma y el lenguaje.
Hzlo desde el Editor de Constantes. Utiliza los botones + y -
para aadir o eliminar una localizacin concreta. Puedes elegir la
Plataforma y el Lenguaje para el cual especificar un valor.
Si tienes mucho texto que localizar, puede resultar tedioso
introducir todos los valores as. Aqu es donde resulta de ayuda
Lingua.

47

Ejecuta Lingua y abre el archivo exportado. Se abrir la ventana

Lingua
La aplicacin Lingua se utiliza para facilitar la localizacin de la

principal de Lingua mostrando un listado de todas las cadenas

aplicacin. Con Lingua puedes localizar las cadenas de tu

dinmicas de tu aplicacin. Los valores aparecern desvanecidos

aplicacin fuera del proyecto

cuando aun no tengan texto localizado. Si existen diferentes

mediante las constantes dinmicas


ya creadas.

Figura 2.15 Lingua


Welcome Screen

valores para Windows, Linux u OS X, habr un icono en la parte


derecha de la cadena en el listado. Al igual que las cadenas, los
iconos aparecern desvanecidos cuando no se haya localizado

Cuando todas las cadenas de tu

un valor todava.

proyecto se hayan definido como


constantes dinmicas, elije File
Exportar Valores Localizables.

Figura 2.16 Ventana principal de Lingua

Aparecer un cuadro de dilogo


preguntndote que selecciones el lenguaje que quieres localizar.
Selecciona el idioma

Figura 2.14 Export Localized


Values Dialog

que ests localizando y


haz clic en Exportar.
(Asegrate tambin de
que el Idioma en los
Ajustes de Compilacin
est definido como
Default o cualquier otro
idioma que quieras

utilizar como lenguaje de origen en la exportacin.)


Cuando hagas clic en Exportar se crear un archivo que podrs
abrir con Lingua.

48

Para localizar una cadena, seleccinala en el listado. El valor


original se mostrar en el panel superior derecho, y podrs
introducir el texto traducido en el panel inferior derecho.
Para aadir un valor especfico de una plataforma, expande la
cadena en el listado y selecciona la plataforma que desees editar.
Para probar las cadenas, elige Archivo Exportar a Aplicacin.

Cambiar el Lenguaje en Windows


Para utilizar un lenguaje diferente en Windows, has de cambiar el
ajuste de Idioma en el tabulador Formato. El cambio del idioma
en la pestaa Teclado e Idioma no afectar a tus aplicaciones.

Figura 2.17 Cambiar el Lenguaje


para una Aplicacin

Lingua presenta un cuadro de dilogo de apertura. Selecciona la


aplicacin de destino y haz clic en Open. Cuando la importacin
est completa, regresa a Xojo y depura la aplicacin con
normalidad.
Una vez que finalices la localizacin puedes guardar el archivo
desde Lingua e importar las cadenas de vuelta al proyecto
arrastrndolo sobre el proyecto o bien eligiendo File Import.

49

Localizar Aplicaciones Web


Las aplicaciones web tambin estn localizadas mediante el uso
de constantes dinmicas, pero el lenguaje mostrado est
determinado por el ajuste de idioma en el navegador utilizado
para acceder a la aplicacin web.
Hay varias propiedades de la Session que son tiles para la
localizacin:
LanguageCode
LanguageRightToLeft
Adems, hay varias constantes dinmicas que se utilizan para
mensajes del sistema y que puedes localizar:
ErrorDialogCancel
ErrorDialogMessage
ErrorDialogQuestion
ErrorDialogSubmit
ErrorThankYou
ErrorThankYouMessage
NoJavascriptMessage
NoJavascriptInstructions
50

Chapter 3

Desarrollo
Web
El desarrollo web puede resultar algo diferente en
comparacin con el desarrollo de escritorio. Este
captulo cubre las formas de optimizar tu aplicacin
web y sugerencias para portar las aplicaciones de
escritorio a aplicaciones web.

Section 1

Optimizar Aplicaciones Web


A diferencia de las aplicaciones de escritorio que estn en el
mismo ordenador que el usuario, una app web puede estar a
miles de kilmetros de distancia del usuario. Igualmente, varios
usuarios pueden estar conectados con diferentes grados de
velocidad. Algunos pueden estar utilizando una conexin de
banda ancha de mxima velocidad, mientras que otros pueden

Grficos
Usa PNG
Aunque las imgenes en formato JPEG pueden ser ms
pequeas que aquellas en formato PNG, el JPEG puede resultar
borroso para el texto adems de suavizar el color, no soporta la

estar estableciendo una conexin mvil menos que ptima. Por

transparencia y presenta posibles problemas de licencia.

tanto es importante que tengas en cuenta cmo crear tu app

Puedes crear una WebPicture en formato PNG pasando

para optimizar el rendimiento en internet. Aqu presentamos unas


cuantas tcnicas que puedes usar para optimizar tu aplicacin
web con objeto de obtener un mejor rendimiento.

Picture.PNGFormat como segundo parmetro del constructor


WebPicture. Este es un ejemplo:

WebImageView.Picture = New
WebPicture(source, Picture.FormatPNG)

Almacena las Pictures en Propiedades


Las imgenes almacenadas en propiedades de la aplicacin web
estn cacheadas por el navegador web, de modo que slo se
envan una vez desde la app hasta el navegador. Por tanto, as
se reduce la cantidad de datos transmitidos entre la app y el

52

navegador. Almacenar tus imgenes en Mdulos tambin puede


permitir su cacheado por parte del navegador.

Usa Rectngulo
En vez de crear imgenes, utiliza Rectngulos cuando sea
posible. Pueden modificarse en gran medida mediante el uso de
estilos. Por ejemplo, modificando el radio de la esquina a 50
puedes convertir un rectngulo en un crculo. Los rectngulos
son muy pequeos desde el punto de vista de la cantidad de
datos necesaria para ser enviados desde la app hasta el
navegador.

Utiliza el Editor de Estilos para Crear Estilos


Los estilos son pequeos (desde el punto de vista de la
informacin enviada desde la app hasta el navegador), de modo
que son muy eficientes para realizar cambios visuales.

Latencia
Elimina los Gestores de Eventos no Usados
Los manejadores de Evento causan comunicacin entre el
navegador y la app web en el servidor, incluso si no tienen cdigo
en ellos. Por este motivo, elimina cualquier manejador de evento
que no tenga cdigo en l.

Enva Objetos de Gran tamao en Segundo Plano


Si tienes objetos de gran tamao que sabes que vas a necesitar,
puedes utilizar un control Timer o usar un Push para asignarlos a
las propiedades de la pgina mientras que el usuario est
ocupado haciendo alguna otra cosa. Por ejemplo, Google Maps
enva segmentos de mapa en segundo plano que estn en torno
al rea visualizada, solo por si te desplazas por el mapa. Puedes
utilizar esta misma tcnica en tus aplicaciones.

Ten Cuidado con los Resultados de las Consultas


Si ests accediendo a una base de datos y cargando los
resultados en un ListBox, ten cuidado con las grandes
cantidades de registros. Cuantos ms registros cargues, ser
necesario emplear ms tiempo para transmitir la informacin
hacia el navegador. Evita llenar los ListBoxes con enormes
cantidades de filas.

Ten Cuidado con los Key y MouseEvents


Cada evento causa el envo de datos desde el navegador a la
app. Esto significa que querrs evitar el uso de eventos
53

frecuentes como KeyUp, KeyDown y MouseMove, si es posible.

Y entonces contina accediendo a la pgina mediante la variable

Si tu app est funcionando en una red local, entonces

o propiedad (page en este caso).

probablemente estos eventos estn bien; pero si el usuario est


accediendo a travs de internet y tienes una gran cantidad de
usuarios simultneos, entonces puede provocar una buena
cantidad de retardo. Tendrs que probar para ver si funciona en
tu caso o no.

Uso del Framework


No Uses Nombres Implcitos de Pginas
Almacena una referencia a una pgina en una variable o
propiedad en vez de hacerlo utilizando el nombre de la pgina
como referencia implcita. Las referencias implcitas han de ser
buscadas por el framework, algo que lleva ms tiempo en
comparacin con acceder simplemente a una referencia que est
almacenada en alguna parte. Por ejemplo, en vez de hacer esto:

WebPage1.Show

Usa InsertText/AppendText cuando Actualices las Text


Areas
Cada vez que actualices la propiedad Text de una TextArea, se
enva todo el texto desde tu app hacia el navegador. Si slo
necesitas aadir texto o insertar texto, utiliza los mtodos
AppendText e InsertText. Estos envan slo el texto a insertar o a
aadir hacia el navegador.

Despliegue y Desarrollo
Usa CGI en vez de aplicacin autnoma
Puedes crear tus apps como CGI o servidores HTTP autnomos.
Las pruebas sugieren que la app de servidor HTTP autnoma
podra manejar unos cuantos cientos de usuarios sin problema.
Sin embargo, si necesitas ms rendimiento, utiliza CGI.

Fugas de memoria
Las fugas de memoria se producen cuando se crean los objetos

Haz esto:

pero no se destruyen nunca. A medida que se crean ms y ms


objetos sin que sean destruidos, se reducir en igual medida la
cantidad de memoria disponible. En un momento determinado, la

Dim page As WebPage1


page.Show

app se colgar debido a que el equipo se queda sin memoria. En


una app de escritorio puede que esto no sea un grave problema
dado que el usuario puede salir de la aplicacin y dicha accin
borrar la memoria.
54

Sin embargo, en la app web es ms serio debido a que puede


estar ejecutndose durante das, meses o incluso ms. Si tu app
se est ejecutando como CGI, una vez que la cantidad de
usuarios (sesiones) que estn accediendo a la app llega a cero, la
app saldr y esto liberar cualquier memoria utilizada. Sin
embargo, si la app nunca alcanza el punto en el que no hay
usuarios conectados, entonces debers de tener especial
cuidado con las fugas de memoria.

Leyes Locales
Las aplicaciones web se ven afectadas en ocasiones por las
leyes locales de tu rea. Por ejemplo, la Unin Europea ha
pasado recientemente una directiva que requiere a los sitios web
que soliciten permiso a los visitantes para que den su
consentimiento antes de que puedan instalar la mayora de las
cookies.

55

Section 2

Portar Aplicaciones de Escritorio


Para crear una versin web de una aplicacin de escritorio ya
existente, son varias las cosas a tener en cuenta.
Obviamente, no puedes utilizar el proyecto tal cual, pero con un
diseo apropiado, puedes encontrar que es factible reutilizar (o
incluso compartir) una cantidad significativa de cdigo.

Tipo de Proyecto
En primer lugar, las aplicaciones de escritorio y las aplicaciones
web tienen diferentes tipos de proyecto. No puedes cambiar el
tipo de proyecto, de modo que tendrs que crear un nuevo
proyecto de aplicacin web para crear una aplicacin web.

Interfaz de Usuario
La interfaz de usuario de una aplicacin web es completamente
diferente de la interfaz de usuario de una aplicacin de escritorio.
No todos los controles de escritorio tienen equivalentes web (por
ejemplo el TabPanel) y no todas las caractersticas de los
controles de escritorio estn presentes en los controles web
(como las ListBox). Tambin hay controles web que no tienen un
control de escritorio equivalente (por ejemplo el Map Viewer).
Adems, las aplicaciones web no tienen un conepto de Barra de
Mens, algo que usa prcticamente toda aplicacin de
escritorio.
Tendrs que reimplementar por completo la interfaz de usuario
de tu aplicacin de escritorio utilizando controles de aplicacin
web. Y cuando lo hagas debers de considerar el rediseo de las
cosas para que funcionen mejor en una aplicacin web.

Las Web Pages Sustituyen a las Windows


En general, cada ventana de una aplicacin de escritorio puede
disearse como pgina web en una aplicacin web. Utiliza el
mtodo Show para mostrar diferentes pginas basndote en las
56

acciones del usuario, tal y como haras para mostrar ventanas

Estilos

adicionales.

En las aplicaciones de escritorio puedes modificar el estilo de un


control cambiando propiedades como su color, fuente, etc. En las
aplicaciones web, debes de crear un estilo (Style) que contenga
los ajustes deseados y aplicas dicho estilo al control.

Recuerda que una aplicacin web slo puede mostrar una pgina
cada vez. Si tu aplicacin de escritorio se basaba en mltiples
ventanas visibles, entonces tendrs que volver a pensar su
diseo.

Dilogos
Los dilogos en las aplicaciones de escritorio pueden utilizar la
clase MessageDialog o bien ser ventanas modales. En las
aplicaciones web no estn disponibles dichas opciones.

Este tiene la ventaja de permitirte el uso del mismo estilo para


todos los controles de la aplicacin web. Si necesitases cambiar
algo en el estilo (por ejemplo el tamao de fuente) podras hacerlo
en un nico sitio (el estilo propiamente dicho) y el cambio tendra
efecto en cualquier parte en la que se haya aplicado dicho estilo
en la aplicacin web.

Para crear un dilogo en una aplicacin web, has de aadir un


WebDialog a tu proyecto y aadir tu diseo sobre ella. Entonces
aadirs este dilogo web a la pgina o pginas sobre las que
debera de aparecer usando Show cuando sea apropiado.
Cuando se cierre el dilogo se llamar a su manejador de evento
Dismissed, donde podrs determinar la accin a realizar.
Nota: Los dilogos web no son modales. Despus de que llames a Show
para mostrar el dilogo, funcionar el resto del cdigo del mtodo.

Manejador de Evento Shown


En las aplicaciones de escritorio utilizas con frecuencia el
manejador de evento Open para realizar la configuracin inicial
de tus controles o ventanas. En las aplicaciones web deberas de
utilizar el manejador de evento Shown.
57

Usuarios Mltiples

Bases de datos

Una diferencia fundamental entre las aplicaciones de escritorio y

De igual modo, con las bases de datos las aplicaciones de

web es que las aplicaciones de escritorio estn diseadas para

escritorio suelen mantener una referencia global hacia la base de

ser usadas por un nico usuario cada vez, mientras que las

datos en App. En una aplicacin web debera de utilizar sin

aplicaciones web estn diseadas para su uso por parte de

embargo Session para la referencia a la base de datos. Cada

varios usuarios simultneamente.

usuario que conecta con la aplicacin web debera de tener su

Sesiones
Tener que tratar con mltiples usuarios significa que debes de
gestionar de diferente forma los datos globales. En las
aplicaciones de escritorio las propiedades y mtodos de la App
son globales para toda la aplicacin, lo que suele resultar til.
En una aplicacin web, App tambin es global para toda la
aplicacin, lo que significa que est disponible de forma global
para todos los usuarios de la aplicacin web.
Por tanto no querrs almacenar informacin global que sea
especfica para un usuario en concreto de la App, como pueda
ser el UserName utilizado para conectarse. En vez de ello, las
aplicaciones web tienen un concepto denominado Session. Cada
usuario que se conecte a tu aplicacin web obtiene su propia
sesin en forma de un objeto Session. Utiliza el objeto Session

propia conexin a la base de datos, de modo que las


transacciones funcionen correctamente y de modo que puedas
aislar el acceso a la base de datos para evitar que los datos de
otros usuarios resulten visibles.
En las aplicaciones de escritorio, si quieres permitir el acceso de
mltiples usuarios a una base de datos (mediante mltiples
instalaciones de la aplicacin de escritorio), entonces
probablemente deberas de utilizar un servidor de bases de
datos.
Con las aplicaciones web es posible que no siempre necesites un
servidor de base de datos. Dado que tu aplicacin web est
funcionando como servidor, SQLite suele ser ms que suficiente
para gestionar las cargas de aplicaciones web de ligeras a
medias.

para gestionar la informacin global solo para ese usuario. Por

Cookies

ejemplo, guardar el UserName en una propiedad de Session

La mayora de las aplicaciones precisan guardar preferencias o

significa que slo ser visible para dicho usuario.

ajustes de algn tipo. Con las aplicaciones web, puedes hacerlo


fcilmente usando las Cookies, una tecnologa web que supone
58

un modo de que el navegador web pueda guardar ajustes que


puedan ser solicitados por las aplicaciones web.

Compartir Cdigo
Si tiendes a mantener la mayor parte de tu cdigo en los objetos
de tu interfaz de usuario, entonces no podrs compartir tu cdigo

Session.Cookie.Set("UserName") = UserNameField.Text

entre los proyectos web y de escritorio.


Pero si separas tu cdigo en clases llamadas por tus objetos de
interfaz de usuario, entonces puedes comenzar a compartir

Log In
Anteriormente se mencionaba de forma breve el concepto de un

cdigo entre tus proyectos web y de escritorio.

UserName empleado para conectarse. La mayora de las

Esto es algo que se suele denominar diseo Modelo-Vista-

aplicaciones web precisan que un usuario se conecte para que la

Controlador. La Vista es la interfaz de usuario, ya sea web o de

aplicacin web sepa qu datos debera de mostrar. Esta es por lo

escritorio. Esto no puede compartirse. El Modelo es tus datos.

general la primera pgina de tu aplicacin web. Esta informacin

Esto se puede compartir. El Controlador es la interface entre el

de registro puede guardarse en Session y almacenadas en

Modelo y la Vista.

Cookies para un acceso y recuperacin ms sencillos.

Usando este diseo en combinacin con la compilacin

Este cdigo (en el manejador de evento Shown de la pgina)

condicional te permite crear cdigo compartido que funciona

puede obtener la Cookie guardada y utilizar para pre-rellenar el

tanto en las aplicaciones de escritorio como web.

campo UserName:
UserNameField.Text

Para obtener ms detalles sobre cmo configurar tus proyectos


= Session.Cookies.Value("UserName")

para que compartan cdigo, consulta el Captulo 5: Compartir


Cdigo Entre Proyectos.

Ejemplo de Navegador
Este simple ejemplo utiliza una clase para abrir una nueva pgina
web o una ventana nueva, en funcin del tipo de app.

59

Crea un nuevo proyecto web o de escritorio y aade una clase

Crea ahora un nuevo proyecto web. Aade un Button en

denominada Navegador. En esta, aade un mtodo llamado

WebPage1 y aade el mismo cdigo a su manejador de evento

ShowScreen2 con este cdigo:

Action:

#If TargetWeb Then


WebPage2.Show
#ElseIf TargetDesktop Then
Window2.Show
#Endif

Dim n As New Navigator


n.ShowScreen2

Copia la clase Navigator desde el proyecto de escritorio al


proyecto web.

Este cdigo muestra WebPage2 o Window2 en funcin del tipo

Por ltimo, aade una segunda pgina web, llamada WebPage2.

de aplicacin.

Dale unnombre de modo que puedas distinguirla cuando se abra.

En Window 1, aade un Button y pon este cdigo en su

Ejecuta el proyecto y haz clic sobre el botn en la pgina web por

manejador de Evento Action:

defecto, aparecer Web Page 2.


Has creado una clase (muy simple) que puede utilizarse tanto en

Dim n As New Navigator


n.ShowScreen2

una aplicacin de escritorio como web. Esta tcnica puede


aplicarse a prcticamente cualquier cosa. El cdigo que se refiera
a objetos especficos Web debera de estarincluido en #If

Aade ahora una nueva ventana (debera de tomar por defecto el


nombre Window2). Deberas dar un ttulo a esta ventana que diga
Window 2, de modo que la distingas cuando se abra.
Ejecuta el proyecto y haz clic sobre el botn en la ventana por
defecto. Se abre Window2.

TargetWeb, y el cdigo que sea para apps de escritorio deberan


de utilizar TargetDesktop.
Aunque ests usando la misma clase Navigator, no ests
compartiendo exactamente la misma clase. Los cambios
realizados en Navigator en un proyecto no afectarn al otro
proyecto. Si quieres compartir exctamente la misma clase de
60

modo que un cambio en un proyecto quede reflejado en el otro,


entonces necesitas utilizar un tem de Proyecto Compartido. Esto
est descrito en el Captulo 5.

61

Section 3

Soporte Mvil
Las aplicaciones web pueden ser un modo genial de

puede hacer scroll por la aplicacin web. Si el mnimo es ms

proporcionar aplicaciones mviles para tus usuarios y clientes.

pequeo que el tamao real de la pantalla, entonces se muestra

Soporte Mvil General

toda la pgina.

Utiliza la propiedad Session.Platform para determinar la

El evento Session.OrientartionChanged te permite saber que el

plataforma sobre la que est ejecutndose tu aplicacin web.

usuario ha cambiado la orientacin del dispositivo. Puedes

Con esta informacin puedes mostrar una pgina diseada

utilizarlo para mostrar una pgina diferente en caso de que sea

especficamente para la pantalla ms pequea del iPhone, por

apropiado.

ejemplo. Este cdigo en el manejador de evento Session.Open


muestra la pgina apropiada para el dispositivo utilizado:

La ampliacin est bloqueada al 100%, evitando que el tamao


de pgina cambie y mostrndose as del mejor modo sobre
dispositivos mviles.

Select Case Session.Platform


Case WebSession.PlatformType.iPhone
iPhonePage.Show
Case WebSession.PlatformType.AndroidPhone
AndroidPhonePage.Show
Case Else
MainPage.Show // All other devices
End Select

iOS
Con iOS el usuario puede crear un marcador de una pgina
web como icono de pantalla. Cuando el usuario hace esto con
una aplicacin web, entonces el icono que hayas especificado
para la pantalla de carga se utilizar como el icono de la pgina
de inicio.

Las pginas cambian su tamao al tamao de la pantalla o bien


al MinimumHeight y MinimumWidth de la pgina. Si cualquier
valor mnimo es mayor que el tamao de pantalla, el usuario
62

Chapter 4

Migrar desde
Otras
Herramientas
Has llegado a Xojo desde otra herramienta de
desarrollo? Aqu encontrars algunos consejos.

Section 1

Visual Basic
Figura 4.2 Controles VB y
Xojo

Visual Basic (6 o anterior) y Visual Basic .NET utilizan un lenguaje

lenguaje VB es muy similar a

muy similar al lenguaje Xojo. Advertirs que muchos de los

Xojo. Vers sintaxis familiar

Control VB

Control RS

comandos son prcticamente iguales, pero tambin hay

para If..Then..Else, For..Next,

diferencias.

While..Wend, Dim y muchos

PictureBox

Canvas

Label

Label

TextBox

TextField

Frame

GroupBox

CommandButton

PushButton,
BevelButton

CheckBox

CheckBox

ComboBox

ComboBox

Listbox

ListBox,
PopupMenu

HScrollBar,
VScrollBar

ScrollBar

Timer

Timer

Shape

Oval,
Rectangle

WebBrowser

HTMLViewer

TreeView

ListBox

Toolbar

Toolbar

MediaPlayer

MoviePlayer

Similitudes con Visual


Basic

Figura 4.1 Tipos de


datos VB y Xojo

Visual Basic 6 (VB6) ya no est

Tipo de
Dato VB

Tipo de
Dato Xojo

soportado por Microsoft, quien

Boolean

Boolean

Byte

Byte

Currency

Currency

recomienda migrar a Visual


Basic .NET (VB.NET). Pero Visual
Basic .NET es ms grande y
complejo, por no mencionar que
no es multiplataforma. Xojo es por
lo general una mejor opcin para
las aplicaciones de Visual Basic 5,
dado que tiene la simplicidad de
VB6 pero es un lenguaje
totalmente orientado a objetos

Date

Date class

Double

Double

Integer

Short

Long

Integer

Object

Object

Single

Single

como en VB.NET.
Para empezar, la sintaxis del

Variant

Variant

otros. Cualquiera que haya


usado VB6 o VB.NET no
tendr problema con Xojo.

Tipos de Datos
Aunque los tipos de datos
Xojo no presentan siempre los
mismos nombres que los tipos
de datos VB6, s estn todos
los tipos equivalentes. Por
ejemplo, Integer es equivalente
al Long de VB6.

Controles
Los controles de IU incluidos
por defecto con VB tambin
estn incluidos, en su mayora,
en Xojo.

64

Pero Xojo tambin tiene varios controles que no estn incluidos


por defecto con VB. Por supuesto, VB tiene multitud de controles
adicionales, aunque especficos para Windows, que pueden
aadirse a su configuracin por defecto.

basndose en un caracter especial en su nombre (name$ sera


una cadena, por ejemplo). Antes de probar a migrar el cdigo
VB6 deberas de utilizar el comando OPTION EXPLICIT para
asegurarte de que todas las variables estn declaradas.

Diferencias con Visual Basic

Visual Basic Migration Assistant

Una gran diferencia es que Xojo no puede crear DLLs, controles

Visual Basic Migration Assistant (VBMA) es una utilidad gratuita

ActiveX o cualquier tipo de librera compartida. Dado que estas

que te apuede ayudar a comenzar la migracin de cdigo VB6 y

son todas tecnologas especficas de Windows, no son tiles para

VB.NET a Xojo. VBMA crea un proyecto de Xojo a partir de los

las aplicaciones multiplataforma.

contenidos de tu proyecto VB. En concreto, convierte los

Xojo puede acceder a las DLLs y a muchos de los controles

formularios, mdulos, clases y su cdigo.

ActiveX, pero su uso implica que la aplicacin slo funcionar

Qu hace?

sobre Windows y no ser multiplataforma.

VBMA coje el proyecto VB indicado y crea un archivo de proyecto


Xojo XML que contiene los formularios, mdulos, clases y el
cdigo fuente del proyecto VB. El propsito de esta herramienta
es llevar tu proyecto a Xojo, para que puedas trabajar sobre l
desde un nico lugar. La herramienta no crea una aplicacin
funcional en Xojo a partir del cdigo VB.

Por supuesto, Xojo puede crear aplicaciones web con facilidad,


algo que no es posible con VB6.

I/O de Archivo
La entrada y salida de Archivo en VB5 utiliza acceso directo para
sus arachivos, basado en ruta. Esto no es algo que funcione en
aplicaciones multiplataforma, de modo que Xojo consolida todo
el proceso de archivos en unas cuantas clases: FolderItem,
TextInputStream, TextOutputStream y BinaryStream.

Tipos de Datos
Xojo es un lenguaje de programacin de tipado fuerte. VB6 (y las
anteriores versiones) permitan el uso de variables que no
hubiesen sido declaradas previamente. Poda inferir un tipo

Dado que los formularios de VB no se corresponden


exactamente con las ventanas de Xojo, VBMA mapea los
controles VB a sus equivalentes como controles Xojo a medida
que migra el proyecto.
El cdigo fuente no se convierte o modifica de modo alguno. El
cdigo se migra al proyecto Xojo, pero est totalmente
comentado y se utiliza principalmente como referencia.

65

Para Mejores Resultados

Figura 4.4 Mapeado de Control VBMA

VB 5 y 6 y VB.NET estn soportados. Si ests utilizando una

Figura 4.3 Seleccin de Proyecto en Visual


Basic Migration Assistant

Convertir un Proyecto
Cuando ejecutas VBMA se presenta un asistente que te gua por
el proceso. La primera pantalla es la correspondiente a la
seleccin del proyecto.
Selecciona el botn Importar Proyecto y elige el archivo de
versin antigua de VB, actualiza tu cdigo a una posterior antes
de intentar el uso de VBMA.
Revisa y procura reducir el uso de controles VB de terceros. No
slo no son multiplataforma, sino que ninguno de ellos funcionar
con Xojo.

proyecto VB. Tambin puedes arrastrar archivos individuales


sobre el listado o puedes utilizar el botn Aadir tem para
seleccionar archivos individuales.
Especifica la codificacin en caso necesario. Esta es la
codificacin/lenguaje utilizados en la creacin del proyecto VB.
Esto es especialmente importante si tu proyecto VB utiliza algn
caracter no ingls como parte de los nombres de archivo.

66

Haz clic en el botn Next para ir a la pantalla de Mapeo de


Controles.
VBMA analiza el proyecto VB y muestra el tipo de controles que
est utilizando. En la pantalla de Mapeo puedes seleccionar el
control Xojo a utilizar para cada control VB.
Puedes guardar el Mapa de Control a un archivo, de modo que
puedas usarlo de nuevo para otros proyectos.
Haz clic en el botn Migrate para migrar el proyecto VB a un
archivo de proyecto Xojo XML. Se solicitar la ubicacin de
destino para guardar el archivo.
Cuando VBMA termine intentar abrir el archivo de proyecto con
Xojo.
Con tu proyecto de VB en Xojo, puedes comenzar ahora a crear
una versin en Xojo.

67

Section 2

Microsoft Access
Microsoft Access es un software de base de datos que funciona
sobre Windows y que es parte de algunas versiones de Oce.

Migracin
Migrar una aplicacin Access es generalmente un proceso de

Se suele utilizar habitualmente para crear aplicaciones de bases

tres pasos donde se migra la base de datos propiamente dicha,

de datos domsticas. Pero Access no puede crear aplicaciones

los formularios utilizados para manipular los datos y el cdigo

autnomas reales. Si tienes una aplicacin access y ests

fuente.

alcanzando sus lmites, Xojo es una excelente opcin para llevar


tu aplicacin al siguiente nivel.

Similitudes

Base de datos
Cuando se migra una aplicacin de Microsoft Access, debes de
considerar en primer lugar la base de datos. Si ests utilizando el

Access tiene un diseador de formularios, un diseador de

motor de bases de datos Jet de Access, entonces

bases de datos y un lenguaje de programacin (VBA: Visual

probablemente querrs migrarla a otro motor de base de datos.

Basic for Applications).

Si bien puedes conectar a una base de datos Jet utilizando

Xojo tambin tiene estos componentes, pero ampla cada uno de


ellos. Tiene un diseador de formularios con muchos ms
controles en comparacin con los proporcionados por Access y

ODBC o ADO en Windows, Jet no es un formato de base de


datos multiplataforma. OS X solo puede conectar a la base de
datos Jet utilizando ODBC en modo de slo lectura.

te permite disear tu interfaz de usuario del modo que quieras.

Tu mejor apuesta en este caso es utilizar SQLite, que es mucho

Utiliza SQLite como base de datos interna y tiene un diseador

ms rpida que la base de datos Access Jet y que es totalmente

de bases de datos para disear tus tablas. Y, por supuesto, Xojo

multiplataforma. Puedes migrar fcilmente las tablas de tu base

tiene un lenguaje de programacin mucho ms robusto en

de datos desde una base de datos Access a SQLite. Esto puede

comparacin.

68

realizarse usando ODBC, ADO o una variedad de productos de


terceros.
Si tu base de datos Access se est conectando a otra base de
datos como fuente de datos, entonces puedes utilizar el plugin
ODBC y el controlador ODBC para conectar. O puedes utilizar los
plugins incorporados para conectar a PostgreSQL, MySQL,
Oracle y Microsoft SQL Server.

Formularios
Tus formularios de Access probablemente se utilicen para editar
los datos en las tablas. Puedes recrearlos como Windows (o
pginas web) en tu aplicacin Xojo.
En las aplicaciones de escritorio puedes encontrar en el control
DataControl un modo sencillo de mapear tus campos con las
columnas y tablas de la base de datos sin tener que escribir una
sola lnea de cdigo.

Cdigo Fuente
Access est programada mediante el uso del lenguaje Visual
Basic for Applications, muy similar al lenguaje de programacin
Xojo
Tendrs que reescribir tu cdigo, pero al mismo tiempo
encontrars que el lenguaje Xojo resulta familiar en su sintaxis y
comandos.

69

Section 3

FileMaker
FileMaker es una herramienta de base de datos que funciona

Formularios

sobre Windows y OS X. Se suele llamar con frecuencia la versin

Probablemente utilices los formularios de FileMaker para editar


datos en las tablas. Puedes regrear dichos formularios como
Windows (o pginas web) en tu aplicacin Xojo. En la mayora de
los casos, utilizars Label, TextField y TextArea para recrear los
campos del formulario, pero hay una gran cantidad de controles
adicionales disponibles para ello.

de Access para OS X.
En gran parte como Access, FileMaker tiene su propio motor de
base de datos, diseador de formularios y lenguaje de guiones.

Migrar
Migrar una aplicacin de FileMaker es un proceso de tres pasos
donde migras la base de datos propiamente dicha, los
formularios utilizados para manipular los datos y el cdigo de
guiones.

Base de datos
Cuando se migra una aplicacin de FileMaker, debes de
considerar en primer ligar la base de datos. Aunque puedes
conectar a una base de datos FileMaker usando ODBC, tendrs
que obtener los controladores apropiados.

Para las aplicaciones de escritorio, encontrars que el control


DataControl supone un modo simple de mapear tus campos con
las tablas y columnas de la base de datos, todo ello sin tener
que escribir una lnea de cdigo.
En cualquier caso, probablemente quieras que tu aplicacin se
conecte con la base de datos durante el arranque y que pueble
el formulario con el primer registro. Pueden aadirse los botones
Next y Previous para obtener y mostrar la informacin apropiada
desde la base de datos.

En vez de ello puedes migrar los datos a SQLite (una base de


datos rpida y multiplataforma), convirtiendo en primer lugar los
datos de FileMaker a XML.

70

Cdigo Fuente
FileMaker se programa utilizando un lenguaje de guiones que es
similar en cierto modo al lenguaje de programacin Xojo.
Tendrs que volver a escribir tu cdigo, pero al mismo tiempo
encontrars que el lenguaje Xojo resulta muy familiar.

Figura 4.5 Algunos comandos de FileMaker y sus


equivalentes Xojo
Comando FileMaker

Comando Xojo

Exit Script

Return

Set Error Capture

Try..Catch..End Try

Set Variable

Dim

If..End if

If..End If

Loop..End Loop

Loop..Until

Go to Field

TextField.SetFocus

Field assignment

TextField.Text = "value"

Gracias especiales a Hal Gumbert de Camp Software por su ayuda con la


informacin en esta seccin.

71

Section 4

Visual FoxPro
Visual FoxPro (VFP) es una herramienta de programacin

datos VFP usando ODBC en Windows, pero tiene ms sentido

Windows creada por

migrar tus datos a SQLite, la cual es ms rpida y

Microsoft. Ha llegado a

Figura 4.6 Visual Fox Pro

su final de vida y ya no
est soportada por
Microsoft. VFP tiene su
propio motor de base
de datos integrado, un
diseador de
formularios y lenguaje
de programacin.

Migrar
Migrar una aplicacin Visual FoxPro es un proceso de tres pasos

multiplataforma.

Formularios
Tus formularios VFP probablemente se utilicen para la edicin de
los datos sobre las tablas. Puedes recrear dichos formularios
como Windows (o pginas web) utilizando arrastrar y soltar tal y
como hacas con VFP.
Para las aplicaciones de escritorio puedes encontar que el
control DataControl resulta un modo sencillo de mapear tus
campos con las tablas y columnas de la base de datos sin
necesidad de tener que escribir una sola lnea de cdigo.

donde migras la base de datos propiamente dicha, los

Cdigo Fuente

formularios utilizados para manipular los datos y el cdigo de

VFP est programado utilizando un lenguaje propietario que es


bastante similar al lenguaje de programacin Xojo.

guiones.

Base de datos
Cuando se migra una aplicacin VFP, necesitas considerar en

Tendrs que reescribir tu cdigo, pero al mismo tiempo


encontrars bastante familiar el lenguaje de programacin Xojo.

primer lugar la base de datos. Puedes conectarte a una base de

72

Cully Technologies crea un producto que te ayuda a migrar tus


proyectos Visual Fox Pro a Xojo:
http://cully.biz/

Figura 4.7 Algunos comandos VFP y sus


equivalentes Xojo
Comando VFP

Comando Xojo

ON ERROR

Exception

TRY..CATCH..END TRY

Try..Catch..End Try

DO WHILE..ENDDO

While..Wend

FOR EACH..ENDFOR

For Each..Next

FOR..ENDFOR

For..Next

IF..ENDIF

If..End If

LOOP

Continue

DECLARE

Dim

DO CASE..ENDCASE

Select Case..End Select

Sintaxis del Lenguaje


La sintaxis de los dos lenguajes es distinta, pero los conceptos
son muy similares. Por ejemplo, para crear una instancia de una
nueva clase en VFP, debas de usar este cdigo:

LOCAL oMyClass
oMyClass = CREATEOBJECT("MyClass")

En Xojo has de escribir:

Dim oMyClass As New MyClass


MsgBox("Hello, World!")
El comando MessageBox de VFP es similar. En vez de escribir
esto:

Otros comandos VFP y sus equivalentes Xojo son los listados en


la figura.

MessageBox("Hello, World!")

Gracias especiales a Kevin Cully de Cully Technologies por su ayuda en la


informacin de esta seccin.

Has de escribir esto:

73

Chapter 5

Gestin del
Cdigo
Este captulo cubre dos importantes conceptos
para la gestin de tu cdigo: compartir cdigo y
control de cdigo fuente.

Section 1

Compartir Cdigo Entre Proyectos


Normalmente tus proyectos son independientes entre s; pero
hay ciertas ocasiones en las que puedes tener items de proyecto
que quieras compartir entre mltiples proyectos.

Copiar y Pegar con un Proyecto Maestro


El modo ms sencillo de hacerlo es con copiar y pegar. Puedes
seleccionar los elementos de proyecto en el Navegador,
copiarlos y pegarlos en otro proyecto. Esto crea dos copias

tems Externos
Tambin puedes convertir tems de proyecto en tems Externos
de proyecto. Un Item Externo de Proyecto puede aparecer en
mltiples proyectos, de modo que al cambiar el item de proyecto
compartido en un proyecto lo cambia en todos los proyectos.
Cuando creas un Item Externo de Proyecto, el tem pasa a ser un
archivo en disco (ya sea con formato binario o XML)

independientes de los elementos del proyecto para cada

Para convertir un item de proyecto normal en un item externo de

proyecto.

proyecto, abre el men contextual para el tem

El mejor modo de utilizar esta tcnica es con un proyecto


maestro que contenga el cdigo compartido que suelas utilizar.

en el Navegador (haciendo clic derecho sobre


l) y selecciona Hacer Externo

Mantn dicho proyecto maestro actualizado con todo tu cdigo

Esto te pedir que selecciones una ubicacin

compartido y cualquiera de los cambios realizados.

para el archivo y tambin el tipo de archivo.

Puedes copiar tems de un proyecto compartido desde el


proyecto master a medida que los vayas necesitando en otros
proyectos. Esto te permite reutilizar elementos de proyecto sin
tener que preocuparte sobre que los cambios puedan afectar a
otros proyectos.

Figura 5.1
External
Item in the
Navigator

Tus opciones son Binario o XML. Si vas a


almacenar el Item Externo de Proyecto en un sistema de control
de fuentes (control de versiones), entonces deberas de elegir
XML en vez de Binario.
Los Items Externos de Proyecto aparecen en el Navegador con
una pequea flecha superpuesta sobre el icono normal.

75

Tambin puedes aadir a un proyecto los Items Externos de


Proyecto existentes que estn en disco. Para ello arrastra el
archivo desde disco sobre el Navegador al tiempo que mantienes
pulsada las teclas +Opcin (en OS X) o Shift+Ctrl (en Windows
y Linux).
Nota: Si haces un cambio sobre un item externo de proyecto en
un proyecto, entonces el cambio NO quedar reflejado
automticamente en otros proyectos que estn abiertos y utilicen
tambin el mismo item externo de proyecto. Debes de cerrar y
volver a abrir el proyecto para ver el cambio.

76

Section 2

Usar Control de Fuente (Control de Versiones)


Un buen desarrollador siempre tiene copias de seguridad de su

Subversion (SVN) es probablemente el sistema de control de

cdigo fuente. Pero las copias de seguridad no son suficientes.

versiones ms comunmente utilizado. SVN utiliza un

Siempre querrs utilizar un Sistema de Control de Fuentes, y que

repositorio central o base de datos que contiene todo tu

tambin se conoce como Sistema de Control de Versiones.

cdigo fuente y todas sus versiones.

Un sistema de control de fuente permite registrar los cambios

El proceso de trabajar con Subversion es este:

realizados sobre cada archivo, mantener un historial de los


cambios y permitirte regresar y observar las anteriores versiones
del archivo.
Para utilizar un sistema de control de fuente con tus proyectos,
has de asegurarte en primer lugar de que ests utilizando el
formato Text Project. Este guarda en disco cada elemento de

Crea un repositorio en el servidor de Subversion


Check Out el repositorio a un ordenador local. Aqu es donde
editas los archivos.
Cuando quieras hacer que los cambios sean permanentes,
haces un Commit de stos sobre el servidor Subversion.

proyecto como archivo de texto.


Si tienes a mltiples desarrolladores trabajando en equipo,
Al contar con archivos independientes, el sistema de control de

utilizars el comando Update para obtener los cambios

fuentes puede realizar un seguimiento sobre los cambios

aadidos en el servidor por otras personas de tu equipo.

producidos en cada elemento. Los archivos de texto te permite


utilizar herramientas de diferencias para comparar los cambios

Puedes controlar Subversion mediante una herramienta de la

entre diferentes versiones de un mismo archivo.

lnea de comandos llamada svn. Pero existen multitud de


herramientas grficas fciles de usar que funcionan con

Subversion
77

Subversion, como SmartSVN, RapidSVN, Versions y Cornerstone.

Hospedaje para Subversion


Puedes ejecutar un servidor de subversion en tu equipo de
desarrollo, pero disponer de subversion en un servidor externo es
un modo genial de tener una copia de seguridad externalizada de
tu cdigo fuente.

3. Ejecuta SmartSVN y deja que finalice su configuracin. En un


momento te llevar a los primeros pasos donde has de
indicar que ests listo para elegir un repositorio. Dado que ya
has creado un repositorio con Assenbla, selecciona My
repositories are already set up y haz clic en Finish:

Puedes elegir entre instalar subversion en tus propios servidores,


y algunas compaas de alojamiento web proporcionan
almacenamiento subversion como caracterstica opcional.
Tambin hay compaas que ofrecen hospedaje Subversion como
Code Spaces, Source Repo, Assembla y Beanstalk.

Configurar un proyecto con Subversion usando Assembla


y SmartSVN

4. Haz clic en Cancel en esta consulta sobre los ajustes de


importacin:

Assembla ofrece hospedaje gratuito para Subversion. Y


SmartSVN tiene una herramienta gratuita para trabajar con
Subversion. Estos pasos te guiarn en la creacin de un
repositorio con Assembla, aadiendo un proyecto y haciendo los
cambios de commit.
1. En primer lugar, crea una cuenta con Assembla y crea a
continuacin un repositorio. En este caso, se utiliza el
respositorio Xojo en la siguiente ubicacin: https://
subversion.assembla.com/svn/xojo/

5. Ahora debers de hacer un check out del repositorio vaco


desde Assembla. Selecciona Check out project from

2. Descarga e instala SmartSVN para tu sistema operativo:


http://smartsvn.com
78

repository and click OK:

Assembla y haz clic en login:

9. Decide si quieres crear un Password Maestro en el dilogo


Master Password, y haz clic en OK.
6. Ahora es el momento de indicar la informacin del repositorio.
Completa el URL del repositorio correspondiente a Assembla
(aade trunk al final del URL) y proporciona la ubicacin de
los archivos locales y haz clic en Continue.

10. El repositorio har un check out a la carpeta local y aparecer


la ventana Summary. Haz clic en Finish para descargar todo:

7. Haz clic en Accept en el dilogo Server Fingerprint.


8. En la ventana de Login, introduce el Nombre de Usuario y
Contrasea utilizados a la hora de crear tu cuenta en

79

11. Una vez completado el checkout vers la ventana principal:

12. En el Finder o Windows Explorer, ve hasta la carpeta local


para que veas los archivos que se han verificado en local.
13. Crea un nuevo proyecto en Xojo y selecciona Guardar.
Selecciona Proyecto Xojo como formato e introduce un
nombre como TestSVNProject. Selecciona tu carpeta local de
Subversion como destino.
14. Vuelve a SmartSVN. Vers los elementos del proyecto
mostrados con Unversioned junto a su Local State.
Significa que los archivos no han sido aadidos aun al
repositorio.

15. Para aadirlos al repositorio has de hacer un Commit. Pero


antes, querrs ignorar uno de estos archivos. El archivo
denominado .TestSVNProject.xojo_uistate se encarga de
registrar la posicin de la ventana principal de Xojo, las
pestaas abiertas y otros ajustes (no hay un . inicial en este
archivo bajo Windows). No debe de aadirse a Subversion.
Haz clic derecho sobre l y elige Ignore en el men
contextual. Haz clic OK en el dilogo de Ignore.
16. Ahora puedes hacer commit de otros archivos. Seleccinalos
y haz clic sobre el bitn Commit en la barra de herramientas.
Haz clic en Continuar en la advertencia que aparece. Ahora se
pedir que introduzcas un Commit Message. Es un texto que
deberas de introducir para describir los cambios realizados
en el commit. Esta informacin es parte importante en el xito
del uso de un sistema de control de versiones. En este caso
introduce commit inicial y haz clic en el botn Commit:

80

Ignorar: para excluir archivos en tu carpeta de Subversion y que


no sean gestionados por Subversion.
Revert: para recuperar versiones antiguas de un archivo desde
el repositorio.
Merge: usado para combinar archivos que han sido
modificados de forma separada por dos o ms personas.
Para saber todo lo que hay que saber sobre Subversion, lee el
libro oficial de Subversion: Version Control with Subversion, que
est disponible de forma gratuita en lnea en: http://svnbook.red17. Ahora tu proyecto se ha aadido a tu repositorio de
Subversion. A medida que hagas cambios en los diversos
elmentos del proyecto vers que su Local State aparecer
como Modified (modificado) en SmartSVN para indicar que
ha cambiado. Deberas de hacer un commit de todos los
cambios locales realizados en el repositorio, de modo que
otras personas puedan tener acceso a los cambios.

bean.com/

18. Para ver como funcionan los cambios, vuelve a Xojo y cambia
la propiedad Title de Window1 a Test y haz clic en Guardar.
Cuando regreses a SmartSVN vers Modified como el Local
State de Window1.

Hospedaje Git

Ahora tienes configurado tu primer proyecto con Subversion.

Assembla y Beanstalk.

Informacin Adicional

Puedes controlar Git utilizando la herramienta de la lnea de

Subversion tiene otras caractersticas para gestionar tu proyecto,

comandos, denominada git. Pero tambin son varias las

Git
Git es un sistema de control fuente que est ganando en
popularidad. A diferencia de Subversion, Git es un sistema de
control fuente distribuido y, por tanto, no utiliza un repositorio
central para tu cdigo fuente.

Puedes utilizar Git por completo sobre tu estacin de trabajo


local, pero tambin hay compaas de hospedaje que ofrecen
servicios Git centralizados como Code Spaces, Source Repo,

incluyendo:
81

herramientas con interfaz grfica que puedes utilizar con Git,

local/git/bin/git. Introduce la ubicacin y haz clic en Continue:

como SmartGit, GitHub and Gitbox.

Configurar un Proyecto con Git y SmartGit


Estos pasos describen cmo usar Git con tus proyectos Xojo.
1. Descarga e instala SmartGit: http://www.syntevo.com
2. Ejecuta SmartGit y acepta el Acuerdo de Licencia.
3. Selecciona el uso Non-commercial para el Tipo de Uso y
haz clic en Continuar:

5.

Deja el ajuste de SSH Client en sus valores por defecto y haz


clic en Continuar.

6. Ahora puedes indicar un Nombre de Usuario y E-Mail que


quedarn almacenados junto con tus Commits:

4. En la siguiente pantalla tendrs que indicar la ruta al


ejecutable de Git en la lnea de comandos. Tendrs que
descargar e instalarlo por separado (se incluye un enlace en
la pantalla de configuracin). En OS X est ubicado en /usr/
7. En la siguiente pantalla, puedes indicar un proveedor de
hospedaje. Para este ejemplo no se ha utilizado un proveedor

82

de hospedaje, de modo que has de seleccionar I dont use a


hosting provider. y hacer clic en Continue.

11. Se te pedir que elijas el tipo de repositorio a crear. Haz clic


en Git:

8. Haz clic en Finish en la ltima pantalla.


9. En la ventana Project que aparecer, selecciona Open an
existing local or create a new repository y haz clic en OK:

12. Haz clic en Finish en la pantalla Project para abrir el proyecto


en SmartGit:

13. Ahora puedes ejecutar Xojo y crear un nuevo proyecto.


10. Selecciona una carpeta para el repositorio Git y haz clic en
Continuar.

Guarda el proyecto a la carpeta que hayas seleccionado,


asegurndote de haber seleccionado Proyecto Xojo como el
formato de archivo.
14. Regresa a SmartGit. Vers los tems de proyecto como
archivos en el visor. Todos tendrn un Working Tree State de
Untracked. Selecciona el archivo con la extensin
xojo_uistate, haz clic derecho para abrir el men contextual y
selecciona Ignore. Haz clic en Ignore en el dilogo que
83

aparece. Esto aade un archivo llamado .gitignore a la


carpeta.
15. Ahora has de hacer commit de los archivos. Seleccinalos
todos (incluyendo el nuevo archivo .gitignore) y haz clic en
Commit sobre la barra de herramientas.
16. En la ventana de Commit, introduce un Commit Message,
como por ejemplo commit inicial. y haz clic en el botn
Commit & Push.
17. Los archivos desaparecern de la ventana SmartGit. Para que
aparezcan, selecciona View->Show Unchanged Files desde
el men principal. Cuando lo hagas volvern a aparecer con
un Working Tree State de Unchanged.
18. Vuelve al proyecto y cambia el ttulo de la ventana por defecto
y guarda el proyecto.
19. Cuando regreses a SmartGit vers que la ventana por defecto
tiene ahora un Working Tree State de Modified.
Ahora habrs configurado tu primer proyecto usando Git.

Mercurial
Mercurial es un sistema de control de versiones distribuido que
es similar a Git. Usa las instrucciones de Git para usar Mercurial
con SmartGit.

84

Chapter 6

Pruebas
Unitarias
Este captulo cubre las pruebas unitarias y el
framework de pruebas unitarias Regressinator.

Section 1

XojoUnit
Qu son las Pruebas Unitarias?

en los Proyectos de Ejemplo en la carpeta Unit Testing. Hay tres

Las Pruebas Unitarias son un concepto para probar

versiones de XojoUnit: escritorio, web y consola. Utiliza la

componentes discretos de tu aplicacin. Las pruebas unitarias

versin apropiada en funcin del tipo de app que ests creando.

prueban por lo general los objetos,


mtodos y este tipo de elementos. No
prueban la interfaz de usuario de tu

XojoUnit Desktop tiene una ventana

Figura 6.1 XojoUnit Window

aplicacin. Por lo general ejecutas


pruebas unitarias con frecuencia para
verificar que tu aplicacin se
comporta como se espera que lo
haga.

que muestra las pruebas en tu


aplicacin, proporciona un modo de
que puedas ejecutar las pruebas y
mostrar los resultados. XojoUnit Web
muestra los resultados en una pgina
web. XojoUnit Xonsole muestra los
resultados en un terminal o prompt de

Como ejemplo, puede utilizarse una

la lnea de comandos, y tambin

prueba unitaria para validad un

genera un archivo de texto con los

clculo. O puede utilizarse para

resultados.

verificar la recuperacin de datos


desde una base de datos.

Sobre XojoUnit
XojoUnit es un framework que facilita
la creacin de tus propias pruebas
unitarias. El framework de pruebas unitarias, XojoUnit se incluye

Para usar XojoUnit, copia la carpeta


XojoUnit desde uno de los proyectos
de ejemplo sobre tu proyecto.
Aadir tus propias pruebas es un
proceso simple:

86

Crea una clase de prueba (e.g. MyTests) como subclase de


TestGroup.
Crea una subclase of TestController.
Aade la subclase al manejador de evento InitializeTestGroups

Sub AddSalesTax(amount As Currency,


pct As Double) As Currency
Return amount + (amount * 0.10)
End Sub

de la subclase de TestController.
group = New MyTests(Self, "My Tests")

Crea mtodos en tu clase para hacer las pruebas. Los mtodos


deben de terminar en Test para que aparezcan en los
resultados de XojoUnit.
Proporciona un modo de mostrar los resultados y ejecutar las
pruebas. Para las aplicaciones de escritorio, querrs mostrar la

Se trata de un mtodo muy simple, pero contiene un bug. El bug


quiz sea obvio, pero la prueba unitaria nos permitir descubrirlo.
He aqu un ejemplo de una prueba XojoUnit que prueba una
variedad de clculos para asegurarse de que se devuelven los
resultados correctos. En primer lugar has de crear una clase de
prueba para contener la prueba unitaria, de modo que has de
crear una nueva clase llamada SampleTests y definir su Super a
TestGroup.

TestWindow, para las apps web querrs mostrar la TestPage, y


para las apps de consola querrs ejecutar las pruebas
manualmente.

Ejemplo con XojoUnit


Pongamos por caso una aplicacin que tiene un mtodo en la
clase Calculate que es responsable de calcular los impuestos de
las ventas y aadirlos a la cantidad suministrada. El cdigo
puede ser algo as:

87

Aade este cdigo al manejador de evento InitializeTestGroups

Assert.AreEqual. Si los dos valores son los mismos, entonces se

en el XojoUnitController:

pasa la prueba. Si los dos valores son diferentes, entonces la


prueba falla.

group = New SampleTests(Self, "Sample Tests")

En la clase SampleTests, aade el siguiente mtodo para probar

Ejecuta el proyecto para ver la ventana XojoUnit con la prueba

Figure 6.1 XojoUnit with AddSalesTax Test

la funcin Calculate.AddSalesTax:

Sub AddSalesTaxTest
Dim calc As New Calculate
Dim result As Currency
result = calc.AddSalesTax(10.00, 0.10)
Assert.AreEqual(11.00, result)
result = calc.AddSalesTax(20.00, 0.05)
Assert.AreEqual(21.00, result)
result = calc.AddSalesTax(10.00, 0.07)
Assert.AreEqual(10.70, result)
End Sub

AddSalesTax mostrada en la lista.


Ahora, haz clic en el botn Run Tests en la barra de herramientas.

Este mtodo de la prueba unitaria crea una instancia de la clase

Esto ejecutar las pruebas y mostrar los resultados. En este

Calculate de modo que pueda llamar al mtodo AddSales. Es

caso vers que ha fallado la prueba.

llamado tres veces y sus resultados comparados con lo que se


espera. La comparacin se realiza mediante el mtodo
88

Al hacer clic en la prueba se muestran los detalles para la prueba

Sal de la aplicacin y vuelve al cdigo. Actualzalo para que

correspondiente, incluyendo la cantidad de tiempo utilizada y los

utilice pct en lugar de 0.10:

mensajes. Aqu puedes ver que los mensajes indican que los

Figure 6.2 Fallo en los Resultados de la Prueba

Sub AddSalesTax(amount As Currency,


pct As Double) As Currency
Return amount + (amount * pct)
End Sub

Ejecuta el proyecto de nuevo y haz clic en el botn Run Tests.


Ahora vers que la prueba ha sido totalmente exitosa.

Figure 6.3 Resultados correctos de las


pruebas

valores calculados son diferentes de lo esperado. Esto nos inidca


que el mtodo AddSalesTax tiene un error en sus clculos.
Mirando el cdigo, deberas de advertir que est utilizando un
valor asignado de 0,10 como porcentaje en vez de utilizar el
parmetro pct.

89

La Ventana XojoUnit

Aserciones de XojoUnit

Cada clase de prueba puede contener cualquier cantidad de

En el anterior ejemplo has utilizado un mtodo de la clase Assert

pruebas. Tambin puedes tener cualquier nmero de clases de

llamado AreEqual. Hay otros mtodos disponibles para ayudarte

pruebas.

a escribir tus pruebas.

Puedes desactivar una clase de prueba en la ventana XojoUnit

AreDierent

para evitar que se ejecute dicha prueba.

AreEqual

El botn Export Results exportar los resultados de las pruebas

Este es el mtodo que utilizars con ms frecuencia. Est

como archivo de texto.

sobrecargado para los siguientes tipos de datos: Color, Date,


Double (y array), Integer (y array), String (y array).
AreSame
Comprueba si dos objetos apuntan a la misma referencia.
Fail
Usado para fallar manualmente una prueba y mostrar un
mensaje.
IsFalse
Prueba si la expresin boleana proporcionada es False.
IsNil
Comprueba si el objeto proporcionado es Nil.
IsNotNil
Comprueba si el objeto proporcionado no es Nil.
IsTrue
Comprueba si la expresin boleana es True.
90

Message
Muestra un mensaje en el rea de mensaje para la prueba.
Pass
Pasa manualmente una prueba y muestra un mensaje.

91

Chapter 7

Aplicaciones
de muestra
Estas aplicaciones son completas, totalmente
funcionales y que demuestran una variedad de las
caractersticas disponibles.

Section 1

Sliders
Sliders es una aplicacin que te permite jugar al juego de puzzle
deslizante. En este juego hay una serie de piezas sobre una
rejilla en un orden aleatorio. Tu misin consiste en poner todas

Controles Dinmicos
Diseo Orientado a Objetos

estas piezas en orden numrico en la menor cantidad de

Juegas al juego haciendo clic sobre una pieza prxima al

movimientos posibles.

cuadrado vaco. La pieza sobre la que has hecho clic se

Esta aplicacin de ejemplo


est disponible tanto como

Figura 7.1 Aplicacin Sliders


de Escritorio

desplaza al espacio vaco. El objetivo es poner las piezas en


orden numrico en la menor cantidad posible de movimientos.

aplicacin de escritorio como

Cada clic cuenta como movimiento. Hay varios niveles de juego,

web. Est ubicada en

correspondindose al tamao de la rejilla. El Fcil es para una

Examples/Sample

rejilla de 3x3, el Mediano es para una rejilla de 4x4 y el Difcil es

Applications.

para una rejilla de 5x5.

Escritorio

Revisin del Cdigo

La versin de escritorio de

Sliders est compuesto principalmente de dos objetos

Sliders (Sliders/

principales: SlidersWindow y SliderTileCanvas.

Sliders.xojo_binary_project)
funciona en Windows, OS X y

SlidersWindow es la ventana principal que muestra las piezas y

Linux y demuestra varias

controla el juego.

caractersticas, incluyendo:
Canvas

SliderTileCanvas muestra una nica pieza como nmero.


SLIDERTILECANVAS
93

SliderTileCanvas es una subclase de Canvas (que es por lo que

aaden el resto de piezas necesarias de forma dinmica

utiliza Canvas como sufijo). Es responsable de dibujar la pieza en

mediante el mtodo AddTiles en funcin del nivel de dificultad.

pantalla, incluyendo su color de fondo y el nmero de la pieza.


Cuando se hace clic sobre una pieza se llama al evento Action.

El metodo DeleteTiles elimina todas las piezas (excepto la

La mayor parte del cdigo se encuentra en el evento Paint,

cuando se inicie un nuevo juego o se cambie el nivel.

donde simplemente configura el color defono y rellena el tamao


de la pieza con el color, dibujando a continuacin el texto en la
propiedad Caption (este contiene el nmero de la pieza):

primera) de modo que pueda recrearse la cantidad correcta

Cuando el usuario hace clic sobre una pieza se llama al mtodo


ClickTile. Este mtodo verifica que se ha hecho clic sobre una
pieza que puede moverse y, si es as, cambiarse con la pieza
vaca. Este mtodo tambien incrementa el contador de

g.ForeColor = &c66CCFF
g.FillRect(0, 0, g.Width, g.Height)

movimiento.
ShueTiles remueve las piezas para un nuevo juego. Para que

g.ForeColor = &c0000FF
g.TextSize = 24
g.Bold = True
g.DrawString(Caption,
(g.Width-g.StringWidth(Caption))/2,
g.Height/2+10)

cada juego sea solucionable, las piezas siempre empiezan en


orden numrico. SueTiles simplemente hace clics aleatorios
sobre las piezas una gran cantidad de veces para ponerlas en un
orden aleatorio. Esto es similar a lo que haras para mezclarlas en
un juego real de este tipo.
Por ltimo, el mtodo CheckForWinner es llamado por

SliderTileCanvas se utiliza en SlidersWindow para dibujar las


piezas.
SLIDERSWINDOW

Cuando miras a la ventana ves que slo hay una pieza. Esta

WinnerTimer para comprobar si todas las piezas estan en la


posicin correcta. Se realiza en un temporizador de modo que
hay una breve pausa antes de que veas el mensaje You Won.

Web

pieza es parte de un Control Set. En tiempo de ejecucin se


94

La versin web de Sliders (SlidersWeb.xojo_binary_project)

Revisin del Cdigo

funciona en todos los navegadores soportados y demuestra

Sliders est compuesto principalmente por un objeto principal:

varias caractersticas, incluyendo:

SlidersPage, la pgina web principal que muestra las piezas y los

Animator
WebCanvas
Controles Dinmicos

controles del juego.


Adicionalmente, SliderTileStyle es un Style que controla el
aspecto de las piezas.
SLIDERPAGE

Adems de contar los movimientos y tener los mismos niveles de

Cuando miras la pgina web ves que no hay piezas sobre ella.

dificultad presentes en la app de escritorio, la versin web puede

SliderTileContainer es un ContainerControl que contiene una

guardar los resultados si introduces tu nombre. Dado que los

nica pieza. En tiempo de ejecucin se crean las piezas

resultados son globales a la aplicacin web, los jugadores que se


conecten a la aplicacin web pueden ver los resultados de otros
jugadores.

Figura 7.3 Proyecto Sliders con SlidersWindow


seleccionado
Figura 7.2 Sliders como Aplicacin Web

95

necesarias de forma dinmica sobre la pgina web mediante el

HIGHSCORE

mtodo AddTiles en funcin de la dificultad seleccionada.

La clase HighScore se utiliza para registrar los resultados de cada

El mtodo DeleteTiles elimina todas las piezas de modo que


puedan volver a recrearse la cantidad de piezas correctas cuando

jugador. El mtodo LoadScores de la pgina web carga los


marcadores para mostrarlos en la pgina.

se inicie un nuevo juego o se cambie de nivel.


Cuando el usuario hace clic sobre una pieza se llama al mtodo
ClickTile. Este mtodo verifica si la pieza sobre la que se ha
hecho clic puede moverse y, en tal caso, la cambia con la pieza
en blanco. Este mtodo tambin incrementa el contador de
movimiento.
ShueTiles remueve las piezas para un nuevo juego. Para que
cada juego sea solucionable, las piezas siempre empiezan en
rden numrico. ShueTiles se limita en esencia en aplicar clics
aleatorios sobre las piezas una gran cantidad de veces de modo
que queden en un orden aleatorio. Esto es muy similar a lo que
haras para mezclarlas en el juego real.
Por ltimo, el mtodo CheckForWinner es llamado si todas las
piezas estn en el orden correcto. Esto se hace mediante un
temporizador de modo que hay una breve pausan antes de que
aparezca el mensaje You Won.

96

Section 2

Eddies Electronics
La aplicacin de ejemplo Eddies Electronics es una aplicacin
funcional para una compaa ficticia que vende electrnica y que
est disponible en la carpeta Sample Applications. La aplicacin

Escritorio
La aplicacin de escritorio incluye una base de datos
prerellenada con datos de ejemplo para varios clientes y

demuestra muchas caractersticas, incluyendo:


El uso de una base de datos SQLite

Figura 7.4 Aplicacin de Escritorio Eddies Electronics

Similitudes entre las aplicaciones web y de escritorio


El diseo de la plantilla y la interaccin entre diferentes
ventanas y pginas web
Esta aplicacin est disponble tanto como aplicacin de
escritorio como web, y funcionan de forma similar. El cdigo de
acceso a la base de datos es exactamente el mismo en ambas
versiones y gran parte del diseo de la interfaz de usuario y el
cdigo son muy similares.

pedidos. La base de datos se recrea cada vez que se ejecuta la


aplicacin, de modo que los cambios realizados se pierden una
vez que se sale de la aplicacin.

97

Haz clic sobre un cliente para ver su informacin, una imagen y

El mtodo compartido SetupNewDatabase, crea una nueva

para ver los pedidos realizados.

base de datos en memoria para su uso por la apo cada vez que

Puedes hacer clic sobre facturas individuales para editar un


pedido o puedes aadir nuevas facturas para nuevos pedidos.

Revisin del Cdigo


La aplicacin de escritorio tiene cuatro ventanas para mostrar
informacin. La ventana principal, CustomerDetailsWindows,
muestra los clientes y sus pedidos. SearchWindow es un dilogo

se ejecute.
CUSTOMERDETAILSWINDOW

CustomerDetailsWindow es la primera ventana que aparece al


ejecutar la aplicacin. Cara todos los clientes en el ListBox
CustomerList en la izquierda (usando el mtodo
LoadCustomers).

(una hoja en OS X) que te permite buscar los clientes.

Cuando haces clic sobre un cliente sus datos se cargan en los

AboutWindow muestra el logo y versin. InvoiceDetailsWindow

campos usando el mtodo LoadCustomerFields. De igual

se utiliza para aadir o editar facturas.

modo, LoadInvoices carga todas las facturas del cliente en el

La clase OrdersDatabase gestiona todos los accesos a la base

ListBox InvoiceList.

de datos. Tiene mtodos para encontrar clientes, facturas y

El mtodo SearchForCustomer se utilizar para encontrar uno o

gestionar errores.

ms clientes por su nombre, y se llama cuando se utiliza la

APP

caracterstica Search.

La clase App inicializa la base de datos en el evento Open

El mtodo Save guarda cualquier cambio realizado en los

llamando al mtodo compartido SetupNewDatabase.

campos del cliente de nuevo en la base de datos.

ORDERSDATABASE

INVOICEDETAILSWINDOW

La clase OrdersDatabase es una subclase de SQLiteDatabase.

La ventana InvoiceDetails muestra los detalles de una factura

Se utiliza para todo el acceso a la base de datos. Los mtodos

para una factura existente y permite modificar los datos. Tambin

para encontrar u obtener datos devuelven un RecordSet que

se utiliza para crear nuevas facturas.

puedes procesar para mostrar o actualizar los datos.

98

SELECTABLEPOPUPMENU

Web

Es una subclase de PopupMenu y aade un mtodo,

La versin web es muy similar a la versin de escritorio.

SelectValue, que seleccionar un valor especfico en el men

Advertirs que las principales Ventanas de la aplicacin de

emergente. Se utiliza para seleccionar el estado correcto de un

escritorio son Pginas Web en la aplicacin web.

cliente.

La aplicacin web tienen un registro de errores (tanto a base de


datos como
sobre un
archivo).

Figura 7.5 Aplicacin Web de Eddies Electronics

La aplicacin
web tambin
usa el control
MapViewer
para mostrar la
unicacin del
cliente sobre
un mapa.
REVISIN
DEL CDIGO

La aplicacin web est estructurada de forma similar a la


aplicacin de escritorio, pero hay varios cambios necesarios para
que pueda acomodar las necesidades de una aplicacin web.
En primer lugar, dado que una aplicacin web es multiusuario por
defecto, se crea una nueva base de datos para cada sesin que
se conecte con la aplicacin web.
99

La aplicacin web registra los errores a una tabla y a un archivo

Este es equivalente a CustomerDetailsWindow en la aplicacin de

de texto, dado que no es posible mostrar un mensaje salvo que

escritorio. Se muestra cuando se conecta un usuario por primera

exista una sesin conectada.

vez a la aplicacin web. Carga todos los clientes en el ListBox

La caracterstica Search est embebida en la barra de


herramientas en vez de mostrarse como un dilogo separado.
AboutDialog e InvoiceDetails son WebDialogs en vez de ventanas
modales.
La versin web tambin tiene pginas separadas que estn
diseadas especficamente para las pequeas pantallas de los
dispositivos mviles como el iPhone.
En resument, gran parte del diseo de la interfaz de usuario es
diferente en la aplicacin web, pero vers que una buena
cantidad del cdigo es prcticamente el mismo o muy similar al

CustomerList en la izquierda (usando el mtodo LoadCustimers).


Cuando haces clic sobre un cliente, sus datos se cargan en los
campos usando el mtodo LoadCustomerFields. De igual
modo, LoadInvoices carga todas las facturas de un cliente en el
ListBox InvoiceList.
El mtodo SearchForCustomer se utiliza para encontrar uno o
ms clientes por nombre y es llamado cuando se utiliza la
caracterstica Search.
El mtodo Save guarda cualquier cambio realizado en los
campos del cliente de nuevo a la base de datos.

de la versin de escritorio.

CUSTOMERINVOICEDIALOG

En concreto, la edicin web tambin usa la clase OrdersDatabase

Equivae a InvoiceWindow, la ventana InvoiceDetailsDialog

para toda la comunicacin de base de datos.

muestra los detalles de la factura para una factura existente y


permite la modificacin de los datos. Tambin se utiliza para

SESSION

El evento Open del objeto Session es llamado cada vez que se


conecta un usuario a la aplicacin web. En este evento se crea
una nueva base de datos en memoria.

crear nuevas facturas.


CARPETA MOBILE SUPPORT

La carpeta Mobile Support tiene varias pginas alternativas que


se muestran cuando se conecta a la aplicacin web un usuario

CUSTOMERDETAILSPAGE

mediante un dispositivo mvil de pantalla pequea.

100

Estas pginas tienen un diseo diferente para mostrar menos


informacin, pero generalmente funcionan igual.

101

Você também pode gostar