Está en la página 1de 41

Tutorial de Gambas Programacin Visual en Linux Pgina 1 de 41

Tutorial de Gambas
http://www.wikilearning.com/tutorial_de_gambas-wkc-9153.htm
Tabla de contenidos
1. Instalando Gambas
2. Hola Mundo 1
3. Hola Mundo 2
4. Hola Mundo 3
5. Algo de Teora Bsica
6. Evento KeyPress
7. Grupos de Controles
8. Trabajo con Eventos
9. Multi-idioma
10. Proceso de Traduccin

Desarrollo de aplicaciones con Gambas
http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html
Introduccin
Primeros pasos
Gestin de eventos
Consideraciones relativas al diseo de formularios
Al grano ...
Accin "Limpiar"
Accin "Aadir"
Accin "Modificar"
Accin "Borrar"
Accin "Salir"
Accin "Abrir"
Accin "Guardar"
Un ltimo ajuste
Nuestro programa funcionando
Distribuyendo nuestra aplicacin
Conclusiones
Acerca de este documento y del autor
Notas
Tutorial de Gambas Programacin Visual en Linux Pgina 2 de 41
Tutorial de Gambas
http://www.wikilearning.com/tutorial_de_gambas-wkc-9153.htm
Tabla de contenidos

1. Instalando Gambas
2. Hola Mundo 1
3. Hola Mundo 2
4. Hola Mundo 3
5. Algo de Teora Bsica
6. Evento KeyPress
7. Grupos de Controles
8. Trabajo con Eventos
9. Multi-idioma
10. Proceso de Traduccin

1. Instalando Gambas
Distribuciones

En la pgina oficial de Gambas, puedes encontrar tanto el cdigo fuente, como indicaciones para encontrar
paquetes binarios de este software: http://gambas.sourceforge.net/download.html.

Algunas notas importantes:


TODAS LAS DISTRIBUCIONES: Los paquetes binarios no tienen por qu corresponder siempre a la ltima versin
disponible, algunas distribuciones pueden tener paquetes especialmente anticuados, con versiones anteriores a la
1.0. En esos casos, es mejor bajar el cdigo fuente y compilarlo en la propia mquina.

DEBIAN: desde los repositorios de Linex, puedes encontrar los paquetes ms actualizados disponibles.

SUSE: Los paquetes binarios creados por la propia SUSE (e instalables mediante YAST) no funcionan, estn mal
realizados, y no han sido corregidos hasta el momento (Suse 9.2), por lo que es necesario usar los que se
encuentran en esta otro repositorio, realizados por un voluntario:
ftp://ftp.gwdg.de/pub/linux/misc/suser-gbv/rpms/.

MANDRAKE: Algo similar a lo de SUSE, en lugar de usar los oficiales de Mandrake Stable o Cooker (Mandrake
10.1, 10.2), hay que usar los disponibles en http://www.kudla.org

Componentes

Para instalar la mayor parte de los componentes de Gambas, es necesario instalar una serie de libreras en el
sistema, de las cuales los componentes se sirven para realizar su labor:
gb.net : depende tan slo de la librera estndar de C, glibc, por lo que disponiendo de un sistema Linux o


Tutorial de Gambas Programacin Visual en Linux Pgina 3 de 41
*BSD en marcha, no se necesita nada adicional.

gb.net.curl : emplea libcurl para su trabajo. La librera se puede encontrar como cdigo fuente desde su
web http://curl.haxx.se/. Compilndola e instalndola antes de instalar Gambas, este componente
funcionar correctamente. Hay que tener en cuenta que Gambas necesita como mnimo la versin 7.11 de
libcurl. Con versiones anteriores, el componente gb.net.curl no funcionar correctamente, o ni siquiera
compilar. Tambin es posible instalar libcurl con los binarios de sistemas Mandrake o RedHat/Fedora
modernos mediante la herramienta "urpmi" ( ejecutar urpmi libcurl y urpmi libcurl-devel debera bastar), y en
sistemas Debian,Linex o Ubuntu (usando apt-get install libcurl y apt-get install libcurl-devel o bien con la
herramienta grfica Synaptic). En caso de instalar binarios, es necesario, como se indic previamente, que
los paquetes instalados correspondan a la versin 7.11 o posterior


2. Hola Mundo 1
Vamos a seguir una serie de pasos, sin pensar demasiado, para hacer una aplicacin muy sencilla, esto nos servir
para familiarizarnos con Gambas, aunque an desconozcamos muchas cosas.
1. Ejecuta Gambas, pulsa la opcin "Nuevo Proyecto", aparecer el asistente de creacin de nuevos
proyectos, lee la informacin, y pulsa "siguiente". Elige la opcin "Crear un proyecto grfico", y pulsa
"siguiente". En nombre de proyecto pon "HolaMundo", por ejemplo, y en el ttulo, "Proyecto de pruebas".

2. Elige la carpeta a partir de la cual se crear la carpeta donde se almacenarn los archivos del proyecto. Si
la creas, por ejemplo, en "/home/usuario", se crear una carpeta "/home/usuario/HolaMundo". Pulsa
"siguiente". Lee la informacin, y pulsa OK.
3. Aparecer el entorno de desarrollo. Por ahora no hemos creado nada, vers que en el rbol del proyecto
(que aparece con la cabeza de la mascota, y el nombre "HolaMundo"), hay una serie de secciones para
depositar las diferentes partes del proyecto. De momento no te preocupes por todas las opciones.


Tutorial de Gambas Programacin Visual en Linux Pgina 4 de 41

4. Pulsa "Formularios" con el botn izquierdo para seleccionar esta seccin, y a continuacin pulsa el botn
derecho para que aparezca un men flotante. Si eres zurdo y has configurado el ratn de ese modo, los
botones sern los contrarios, derecho para seleccionar, e izquierdo para los mens.
5. En el men aparece la opcin "Nuevo". Sitate sobre ella, y en el nuevo men que surge, pulsa sobre la
opcin "formulario", con el botn izquierdo.

6. Aparece un pequeo asistente para formularios. En "nombre" puedes poner "FrmPrincipal", para
identificarlo. Deja el resto de las opciones por defecto, y pulsa "OK".
7. Podrs comprobar que ha aparecido un formulario vaco, listo para editar. Si te situas en el borde del
formulario, hasta que el cursor cambie de forma, y lo mueves mientras mantienes el botn izquierdo
pulsado, comprobars que puedes variar el tamao del formulario hasta darle la forma que deseas.

Tutorial de Gambas Programacin Visual en Linux Pgina 5 de 41

8. Ahora fjate en la "Caja de herramientas". Aqu se muestran los controles que podemos utilizar para disear
los elementos de nuestro formulario. De momento utilizaremos una etiqueta. Pulsa con el botn izquierdo
en el icono que tiene una letra "A" grande y a continuacin sitate con el ratn en el formulario, y, mientras
mantienes pulsado el botn izquierdo, mueve el ratn hacia la derecha y hacia abajo. Vers como la
etiqueta se situa sobre el formulario y puedes variar su tamao. Si sueltas el botn del ratn y
acontinuacin pulsas sobre la etiqueta, vers que aparecen en los extremos unos cuadritos. Si te situas
sobre ellos, mantienes el botn izquierdo pulsado, y mueves el ratn, puedes variar el tamao de la
etiqueta, y en general, de cualquier control que uses. Si te situas en el centro de la etiqueta, y mantienes
pulsado el botn izquierdo mientras mueves el ratn, cambiars la posicin de la etiqueta en el formulario.

9. Vamos a dar el toque final, pulsa la etiqueta y mira la ventana de propiedades, aqu vemos las
caractersticas de la etiqueta. Busca la propiedad llamada "Text", y escribe ah "Hola Mundo". Para que
quede ms bonito, busca la propiedad "Align", y selecciona "Center".

Tutorial de Gambas Programacin Visual en Linux Pgina 6 de 41

10. Y por ltimo, la magia, ve al men "Proyecto" de la ventana principal de Gambas, y pulsa en la opcin
"Ejecutar". Ah lo tienes! tu programa con una ventana diciendo "Hola Mundo!"

11. Ha sido fcil, verdad?. No ha sido necesario emplear ni una lnea de cdigo, slo trabajar con el ratn un
poco.


3. Hola Mundo 2
Ahora vamos a aplicar un poco de cdigo escrito para hacer un ejemplo ms vivo. Has ledo el tutorial anterior del

Tutorial de Gambas Programacin Visual en Linux Pgina 7 de 41
"Hola Mundo"? Pues si no lo has hecho, aprovecha ahora, y realiza los pasos indicados en l del nmero 1 al
nmero 7, de forma que tengas un formulario vaco listo para editar.

1. Vamos a aadir un botn. Mira ahora en la "Caja de herramientas". Hay un control que parece un botn
con el texto "OK". De hecho, es un botn.

2. Sitalo en el formulario del mismo modo que hiciste con la etiqueta del primer programa, de modo que
quede situado a tu gusto. A continuacin busca en la ventana de propiedades la propiedad "Text", y cambia
su valor por "Saludar".

3. Ahora pulsa dos veces seguidas (o doble click, como le gusta decir a muchos) sobre el botn. Acceders a
una ventana de cdigo, en el que te indica esto:
4. ' Gambas cl ass f i l e
5.
6. PUBLI C SUB But t on1_Cl i ck( )
7.
8.
9.
10. END

11. Vamos a pararnos un momento a ver este cdigo: observa la primera lnea, vers que comienza con el
smbolo " ' ". Todas las lneas que empiezan por este smbolo, son "comentarios", y significa simplemente
que es una nota aclaratoria para el programador, que es ignorada totalmente por el compilador de Gambas.
Si quieres, prueba a aadir ms comentarios en el cdigo:
12. ' Gambas cl ass f i l e
13. ' Est e es un ej empl o de pr ogr ama senci l l o
14. ' par a apr ender al gunos concept os
15. ' bsi cos sobr e Gambas
16.

Tutorial de Gambas Programacin Visual en Linux Pgina 8 de 41
17. PUBLI C SUB But t on1_Cl i ck( )
18.
19.
20.
21. END

22. Observemos las siguientes lneas: "PUBLIC SUB Button1_Click()" y "END". Estas dos palabras claves
definen el principio y final de una "Funcin". Una funcin no es ms que un conjunto de ordenes que
Gambas ejecuta cuando la funcin es llamada. En este caso, la funcin se ejecutar cuando se haga
"Click" sobre el botn "Button1". Ahora mismo no hay nada entre el principio y el final de la funcin, por
tanto no pasar nada al pulsar el botn.
23. Diremos a Gambas que ha de mostrar un dilogo de mensaje diciendo "Hola Mundo" cuando se pulse el
botn. Para eso, utilizaremos el objeto "Message". Ya hablaremos ms adelante acerca de los objetos:
24. ' Gambas cl ass f i l e
25. ' Est e es un ej empl o de pr ogr ama senci l l o
26. ' par a apr ender al gunos concept os
27. ' bsi cos sobr e Gambas
28.
29. PUBLI C SUB But t on1_Cl i ck( )
30.
31. Message. I nf o ( " Hol a Mundo! " )
32.
33. END

34. Despus de escribir "Message." habrs observado que se ha desplegado un men con varias palabras
clave: "Info", "Warning", ... Esto es lo que se llama "autocompletado de cdigo", y es una utilidad para
mostrarte las diferentes posibilidades que ofrece un objeto, en este caso "Message". Cuando termines este
ejemplo, prueba las otras opciones, vers como vara el aspecto del mensaje. Tambin habrs
comprobado que tras escribir el parntesis inicial, aparece una ayuda indicando la sintxis de este mtodo.
35. Ahora ya solo resta probarlo. Si has hecho todo bien, tras acudir al men "Proyecto", y pulsar la opcin
"ejecutar", aparecer el formulario con nuestro botn. Pulsa el botn, y surgir el mensaje deseado.



4. Hola Mundo 3
Ahora vamos a trabajar sin utilizar el componente grfico. Hay muchos programas que no necesitan de

Tutorial de Gambas Programacin Visual en Linux Pgina 9 de 41
componente grfico, por ejemplo, por que slo realizan tareas no visibles para el usuario, o porque quieren
consumir pocos recursos, o porque el equipo donde se ejecutar no va a disponer de sistema grfico. Hay mltiples
razones para utilizar slo la consola, y los ejemplos indicados son slo unas pocas.
1. Ejecuta Gambas, y selecciona nuevo proyecto. Al llegar hasta el punto donde se selecciona el tipo de
proyecto, elige "Crear un proyecto de terminal"

2. El resto de los pasos ya los sabes desde el primer tutorial. Una vez ests en la interfaz de Gambas,
tendremos que escribir el cdigo para escribir "Hola Mundo" en la consola (o terminal, la palabra que ms
te guste). Ya no podemos crear un nuevo formulario, puesto que no hay interfaz grfica. Crearemos
entonces un nuevo mdulo, que es un archivo de cdigo que no est asociado a ningn formulario.
Tambin podramos haber creado una clase, pero como no sabemos todava nada de clases y objetos, lo
dejaremos para ms adelante. Pon al mdulo el nombre "ModPrincipal", y acepta.
.
3. Observa que en el cdigo ha aparecido una funcin, automticamente, como ocurri en la segunda parte
de este tutorial.
4. ' Gambas modul e f i l e
5.
6. PUBLI C SUB Mai n( )
7.
8. END


Tutorial de Gambas Programacin Visual en Linux Pgina 10 de 41
9. Todos los programas cuyo inicio no se encuentra en un formulario, deben tener una funcin, llamada
forzosamente "Main", que ser la que se ejecute nada ms comenzar el programa. Ahora mismo no hay
nada, y si ejecutramos el programa, nada pasara. De hecho, este es el programa ms simple que puede
escribirse con Gambas. Aadiremos ahora el cdigo para mostrar nuestro mensaje. Ya no utilizaremos la
clase "Message", que forma parte del componente grfico de Gambas, si no una funcin llamada "PRINT"
que permite "imprimir" mensajes en la consola:
10. ' Gambas modul e f i l e
11.
12. PUBLI C SUB Mai n( )
13.
14. PRI NT " Hol a Mundo"
15.
16. END

17. Para ver mejor el resultado del programa, vamos a aprender a compilar un programa. Acude al men
"Proyecto" y pulsa la opcin "Crear Ejecutable". Si no te aparece ningn mensaje de error, ya tienes el
ejecutable listo para utilizar. Dnde est, por cierto? Pues est en la carpeta del proyecto, as si el
proyecto se encuentra, por ejemplo en /home/usuario/HolaMundo, el ejecutable estar dentro de esta
carpeta, y con el nombre "HolaMundo".
18. Abre una ventana de terminal, acude a la carpeta, y ejecuta el programa para ver el resultado.


Es el momento de decir tambin que hay dos tipos de lenguaje de programacin, los compilados y los
interpretados. Los primeros, al compilar, crean verdaderos binarios, cdigo entendible directamente por el
microprocesador del equipo. Los segundos, o bien no disponen de compilador (como la shell bash), o bien el
compilador genera un "cdigo intermedio", como es el caso de J ava o Gambas. Dicho cdigo intermedio, no es
entendible directamente por el microprocesador, si no que un programa llamado intrprete (gbx, en el caso de
Gambas), hace de intermediario entre la ejecucin real del programa y el cdigo intermedio. La razn de utilizar ese
cdigo intermedio, es que es ms rpido que el cdigo "humano" que nosotros hemos escrito, aunque ms lento
que el cdigo binario.
Este planteamiento tiene la ventaja de que el cdigo generado puede ser ejecutado en cualquier mquina para la
que exista un intrprete del lenguaje, independientemente de la marca del procesador o el sistema operativo
(compila una vez y salo en todos sitios, es el lema). Como inconveniente, el rendimiento es menor (no se puede
utilizar para aplicaciones que exijan gran rendimiento del equipo), y es necesario tener instalado el intrprete en la
mquina.


5. Algo de Teora Bsica
Existen muchas teoras programacin, Gambas implementa algunos de sus conceptos, y vamos a tratar de
aclararnos un poco respecto a las tcnicas en las que nos apoyaremos para programar.
Programacin estructurada

La verdad es que el ttulo es algo pretencioso, hay libros completos sobre ello, pero lo que aqu interesa explicar es


Tutorial de Gambas Programacin Visual en Linux Pgina 11 de 41

el concepto de "variable", "funcin" y "mbito".

Variables

Los programas almacenan la informacin de uso inmediato en memoria RAM. Trabajando al ms bajo nivel, se
deposita la informacin indicando la direccin de la memoria RAM directamente. Esto es muy engorroso,
especialmente cuando el nmero de datos a almacenar es muy grande.

Para solucionarlo, los lenguajes de programacin aportan el concepto de "variable": es nombre al cual nos
referimos para almacenar informacin u obtenerla, de direcciones de memoria que se gestionan sin que a nosotros
nos afecte directamente.

Nosotros indicaremos un nombre, por ejemplo "MiValor", asignaremos valores con el operador " =" (MiValor = 3), y
haciendo referencia a ese nombre podremos leer su contenido (PRINT MyValor , mostrara en pantalla "3" en este
ejemplo).

Segn el lenguaje de programacin se habla de que no est "tipado", o que est "tipado", en funcin del modo en
que usa las variables. En un lenguaje "no tipado", cada variable puede almacenar cualquier cosa, (un nmero, una
cadena de texto, etc). Esto puede estar bien para programar muy rpido, pero da lugar a graves errores en
aplicaciones medianas y grandes. Gambas, por el contrario, es un lenguaje "tipado", y esto significa que de modo
previo al uso de cualquier variable, forzosamente hemos de "declararla", especificando el tipo de datos que va a
contener. Estos son algunos ejemplos de "declaraciones" con Gambas:

DI M MyVar As I nt eger
PRI VATE Respuest a As St r i ng
PUBLI C Suma As Fl oat


En estos ejemplos, y sin que nos interese ahora la primera parte de estas declaraciones (DIM, PRIVATE,PUBLIC),
estamos indicando que deseamos utilizar una variable llamada "MyVar" que almacenar nmeros enteros, otra
llamada "Respuesta" que almacenar cadenas de texto, y otra llamada "Suma" que almacenar nmeros con coma
flotante (es decir, es capaz de almacenar nmeros con parte decimal)

Funciones

En los primeros tiempos de la informtica, y en realidad, en la actualidad los microprocesadores siguen trabajando
as, los programas eran una ristra largusima de ordenes, una detrs de otra, sin ms posibilidad de
"estructuracin" que dar saltos hacia a delante o hacia atrs en el cdigo.

Ms adelante se impuso un modelo ms "estructurado": dividir el cdigo en bloques separados, llamados
"funciones" o "mtodos". Un programa completo estar formado por funciones, pequeos bloques de cdigo a los
que se le envan una serie de valores de los cuales se hace responsable para procesarlos, y retornar un valor, si
procede.

Cada programa en Gambas empieza con una funcin "Main", o principal, y a lo largo de su cdigo, esta funcin
enva datos a otras funciones, y , si es necesario, recibe sus resultados. Este proceso se denomina "llamada", una
funcin "llama" a otra funcin, esta puede "llamar" a otras, etc. Los valores que se envan para ser procesados, se
denominan "parmetros".

Para indicar a Gambas el inicio de una funcin, emplearemos bsicamente esta nomenclatura:
Tutorial de Gambas Programacin Visual en Linux Pgina 12 de 41


PUBLI C FUNCTI ON nombr e_de_l a_f unci on ( p1 As Ti poDat o, p2 As Ti poDat o. . . ) As Ti poDat o

o bi en

PUBLI C SUB nombr e_de_l a_f unci on ( p1 As Ti poDat o, p2 As Ti poDat o. . . )


Respecto a la palabra "PUBLIC", no nos preocuparemos por ahora, pero observa que podemos indicar
"FUNCTION" o "SUB". La primera palabra significa que el cdigo de la funcin va a retornar algn valor, mientras
que "SUB" significa que se trata de una funcin que no retornar ningun valor, como fue el ejemplo de nuestro
segundo tutorial, donde emitamos un mensaje, pero no retornabamos ningn valor.

nombre_de_funcion : Es el nombre con que llamaremos a la funcin desde otras partes del cdigo, y ser un
identificador nico para ese fragmento de cdigo en todo el programa.

(p1 As TipoDato,p2 As TipoDato...) : A continuacin, se indican las variables que se pasarn como parmetros,
separadas por comas, e indicando el tipo de la variable, del mismo modo que en las declaraciones antes
explicadas. Segn lo que vaya a hacer la funcin emplearemos ms o menos parmetros.

As TipoDato : Si hemos indicado la palabra clave "FUNCTION", indicaremos al final el tipo de dato que vamos a
devolver. Dependiendo del tipo de parmetros que utilicemos, estos pueden tambien utilizarse en ocasiones para
devolver el resultado deseado, al margen de este valor retornado.

Unos ejemplos:

Una f unci n que no devuel ve ni ngn val or y no necesi t a par met r os:

PUBLI C SUB MyFunci on( )

Una f unci n que no devuel ve ni ngn val or y necesi t a un val or ent er o como par met r o:

PUBLI C SUB Ot r aFunci on( Mi Val or As I nt eger )

Una f unci n que devuel ve una cadena de t ext o y necesi t a un val or ent er o y un val or
de cadena:

PUBLI C FUNCTI ON Ot r aMas( Mi Dat o As I nt eger , Mi Cadena As St r i ng) As St r i ng



mbito

No todas las funciones y variables se utilizan desde todo el cdigo, hay varias razones para limitar las zonas desde
donde se puede acceder a una variable o funcin: desde razones de rendimiento, por ejemplo, es mejor tener
variables que se creen y se destruyan tras ser usadas, que tener un "monstruo" en memoria con todas las variables
permanentemente almacenadas, hasta razones de comodidad para el programador, ya que es mejor poder definir
el mismo nombre para ciertas variables, en zonas "aisladas" del cdigo, que tener que inventar miles de nombres a
lo largo de un gran programa.

Tutorial de Gambas Programacin Visual en Linux Pgina 13 de 41

Gambas permite verias tcnicas para separar o aislar el "mbito" de las variables y funciones. Los programas
escritos en Gambas, constan de "mdulos", "formularios", y "clases". Pues bien, el cdigo de cada mdulo est
parcialmente aislado del cdigo de todos los dems, y de igual modo sucede con los formularios y clases. Es
posible tener dos mdulos que contengan una funcin con el mismo nombre:


Mdul o 1:
Publ i c SUB Mi Funci on( Dat o As I nt eger )
Mdul o 2:
Publ i c SUB Mi Funci on( Dat o As I nt eger )


Si nos encontramos dentro de otra funcin del mdulo 1, yqueremos llamar a la funcin "MiFuncion", directamente
lo indicaremos as en el cdigo:

. . .
Mi Funci on( 34)
. . .


Al llamar a "MiFuncion", el intrprete sabe que nos referimos a la funcin que se encuentra dentro del mismo
mdulo. Ahora bien, si nos encontramos dentro del mdulo 2, o de cualquier otro mdulo, clase o formulario, hemos
de especificar el mdulo en el que se encuentra la funcin. As, si desde el mdulo 2 indicaramos:

. . .
Mi f unci on( 9654)
. . .


Realmente estaramos llamando a la funcin con ese nombre que se encuentra dentro del mdulo 2. Hemos de
especificar que deseamos utilizar la del mdulo 1, indicando el nombre del mdulo, un punto, y el nombre de la
funcin:

Modul o1. Mi Funci on( 9654)


La segunda tcnica para delimitar el mbito de la funcin, es indicar al intrprete si deseamos que esa funcin sea
accesible desde otro mdulo, formulario o clase. Si indicamos la palabra "PUBLIC", delante de la declaracin de la
funcin, esta podr ser llamada desde otros mdulos, clases o formularios, pero si indicamos "PRIVATE", slo
podremos acceder desde el propio mdulo (se dice tambin que "no es visible" desde otros mdulos)

En cuanto a las variables, tenemos los mismos casos que con las funciones, y otro ms:

Las variables pueden ser declaradas al principio del mdulo, formulario o clase, antes de cualquier funcin, en este
caso emplearemos las palabras "PRIVATE" y "PUBLIC" de igual modo que con las funciones, y estas variables
existirn mientras exista el mdulo, clase o formulario. Pero tambin podemos indicar una variable dentro de una
Tutorial de Gambas Programacin Visual en Linux Pgina 14 de 41

funcin, empleando ahora la palabra clave "DIM", y en este caso la variable slo existe desde que se entra en la
funcin, hasta que se sale, y no es accesible en absoluto desde ninguna otra zona del cdigo fuera de la funcin.

PRI VATE Var 1 As I nt eger
PUBLI C Var 2 As St r i ng

PUBLI C FUNCTI ON SumaEspeci al ( V1 As I nt eger , V2 As I nt eger ) As I nt eger

DI M Medi a As I nt eger

Medi a=( V1+V2) / 2

RETURN Medi a+V1+V2


END


6. Evento KeyPress
Con Gambas se puede utilizar la clase 'Key' para conocer las teclas que pulsa el usuario sobre cualquier control
grfico. Cada control, posee dos eventos para indicarnos la accin del usuario:

KeyPress : se activa cuando el usuario aprieta la tecla
KeyRelease : se activa cuando el usuario suelta la tecla

Estos eventos no disponen de parmetros, ya que la clase 'Key' almacena en cada momento el cdigo de la tecla
que se acaba de apretar o soltar. Es una clase esttica, por la tanto no es necesario que creemos ningn objeto de
esa clase para utilizarlo:
. . .
PUBLI C SUB But t on1_KeyPr ess( )

Message. I nf o( Key. Code)

END
. . .


Cuando se pulse una tecla con el foco situado sobre el botn, se mostrar un mensaje con el cdigo de la tecla
pulsada. Si pulsa por ejemplo la flecha derecha, devolver el valor 4116. Con ello ya se sabe que ese cdigo
corresponde a la flecha derecha. Si se desea que el evento responda slo a la pulsacin de una/s determinada/s
teclas:
. . .
PUBLI C SUB But t on1_KeyPr ess( )

I F Key. Code = 4116 THEN
Message( " Has pul sado l a t ecl a de f l echa der echa" )
END I F

END
. . .


Tutorial de Gambas Programacin Visual en Linux Pgina 15 de 41


Tambin podemos valernos de las constantes que aporta la clase "Key" para olvidarnos de los extraos cdigos
numricos de cada tecla:
. . .
PUBLI C SUB But t on1_KeyRel ease( )

I F Key. Code = Key. Ri ght THEN
Message( " Has sol t ado l a t ecl a de f l echa der echa" )
END I F

END
. . .


Por ltimo, el evento KeyPress es cancelable, de modo que podemos evitar que la pulsacin de una tecla llegue al
programa, para cancelar, por ejemplo, una accin del usuario no admitida en ese momento:
. . .
PUBLI C SUB But t on1_KeyPr ess( )

I F key. Code <> key. Tab THEN STOP EVENT

END
. . .


Se observa en el ejemplo, que se evita la cancelacin del evento cuando la tecla "Tab" es pulsada, dada la
importancia de esta tecla para moverse por los formularios sin necesidad del ratn.

La clase "Key" aporta tambin los valores 'Alt', 'Code', 'Control'y 'Shift' para saber si estas teclas estaban pulsadas
a la vez que la principal.


7. Grupos de Controles
En otros lenguajes de programacin, como VB, se suele trabajar con grupos de controles, de forma que, por
ejemplo, varios botones lancen un evento comn al ser pulsados, y dentro del evento, cada botn se distingue, en
el caso de VB, con el valor "Index" que aporta el evento.

Gambas tiene su propia solucin:
1) En tiempo de diseo: Dentro del IDE, en el panel de propiedades de un objeto grfico, existe siempre
una propiedad llamada "Group", que no es en s una propiedad real de dicho objeto, si no el nombre que se
dar a su gestor de eventos.
Por defecto, cuando no se indica nada, el gestor de eventos se llama igual que el objeto, as, si tenemos un
botn llamado "Btn1", su gestor de eventos ser "Btn1", de forma que para capturar un evento, como
puede ser "Click", escribiremos el cdigo as:
PUBLI C SUB Bt n1_Cl i ck( )

. . .

END

Sin embargo, si especificamos la pseudo-propiedad "Group", podremos indicar cualquier otro nombre, y de
hecho podemos indicar el mismo nombre para mltiples controles. Si disponemos, por ejemplo, de cinco

Tutorial de Gambas Programacin Visual en Linux Pgina 16 de 41

botones, y a los cinco les ponemos "Botones" como valor de "Group", capturaremos los eventos de los
cinco dentro de:
PUBLI C SUB Bot ones_Cl i ck( )

. . .

END

Y cmo sabemos cual es el botn pulsado? Dentro de cada evento, se puede llamar a un objeto especial,
llamado "LAST", el cual mantiene una referencia al objeto que lanz el evento. As, si indicamos
PRI NT LAST. Text

Se mostrar en la consola el texto del botn que ha lanzado el evento. Tambin podemos emplear la
propiedad "TAG" de cada botn para aadir cualquier caracterstica especfica que requiramos para
diferenciarlos:
SELECT CASE LAST. Tag

. . .
. . .

END SELECT


2) En tiempo de ejecucin: en Gambas tenemos libertad para crear cualquier control durante la ejecucin
de un programa. Si deseamos crear seis botones, y hacer que respondan a un gestor de eventos comn, lo
indicaremos en la creacin del control:
DI M Bt n As But t on
. . .
Bt n=NEWBut t on( ME) AS " Bot ones"
. . .

De esta forma, todos los botones creados responden al gestor de eventos "Botones", y podemos, como se
hizo en el primer caso, diferenciarlos por la palabra clave "LAST".
Tambin tenemos la posibilidad de almacenar una referencia a cada botn dentro de una matriz tipo
"Object[]" para manejarlos desde fuera de los eventos.


8. Trabajo con Eventos
La interfaz grfica ofrece una serie de eventos para modelar el comportamiento de un programa, no obstante,
podemos crear nuestros propios eventos personalizados, y no slo en programas grficos, si no tambin en
programas de consola, ya que la gestin de eventos de Gambas es independiente del entorno grfico, a diferencia
de otros lenguajes.

Tutorial de Gambas Programacin Visual en Linux Pgina 17 de 41


Para empezar, crearemos un mdulo de clase llamado, en nuestro ejemplo, "ClsElemento". Esta clase de ejemplo,
tendr un slo mtodo "Llamada()" que incrementa un contador. Una vez que el contador alcanza el valor "10", se
resetea el contador, y se dispara un evento para informar de ello.

Lo primero es declarar el evento. En nuestro caso, enviar como parmerto una cadena advirtiendo que el contador
vale 10:
EVENT Mi Event o( Dat a AS St r i ng)


Tras esto, aadimos una variable privada que acta como contador:
PRI VATE Cont ador AS I nt eger


Escribimos ahora el cdigo de la funcin de llamada:
PUBLI C SUB Ll amada( )

' I ncr ement amos el cont ador
Cont ador =Cont ador +1
I F Cont ador >9 THEN
' Si el val or del cont ador es 10
' di spar amos el event o
RAI SE Mi Event o( " Cont ador val e 10" )
' Y r eset eamos el cont ador
Cont ador =0

END I F

END


Finalmente, escribimos el cdigo principal del programa. Para ello cremos un formulario con un botn. Al inicio
declaramos un objeto de nuestra clase:
PRI VATE Mi Cl ase AS Cl sEl ement o


Al abrirse el formulario, creamos el objeto, declarando el "observador" de eventos entre comillas:
PUBLI C SUB For m_Open( )

Mi Cl ase=NEWCl sEl ement o AS " Mi Obser vador "

END


Aadimos al botn el cdigo para que utilize el objeto:
PUBLI C SUB But t on1_Cl i ck( )

Mi Cl ase. Ll amada ( )

END


Y finalmente, recogemos el evento:
PUBLI C SUB Mi Obser vador _Mi Event o( Dat a AS St r i ng)

Message. I nf o ( Dat a)

END


Tutorial de Gambas Programacin Visual en Linux Pgina 18 de 41

Esta funcin tiene el nombre del "observador" de eventos, un guin bajo, y el nombre del evento, por lo que ser
llamada cuando se dispare el evento.


Cdigo completo de "ClsElemento":
' Gambas cl ass f i l e
PRI VATE Cont ador AS I nt eger
EVENT Mi Event o( Dat a AS St r i ng)

PUBLI C SUB Ll amada( )

Cont ador =Cont ador +1
I F Cont ador >9 THEN

RAI SE Mi Event o( " Cont ador val e 10" )

Cont ador =0

END I F

END


Cdigo completo de "Form1":
PRI VATE Mi Cl ase AS Cl sEl ement o

PUBLI C SUB But t on1_Cl i ck( )

Mi Cl ase. Ll amada ( )

END
PUBLI C SUB Mi Obser vador _Mi Event o( Dat a AS St r i ng)

Message. I nf o ( Dat a)

END


PUBLI C SUB For m_Open( )

Mi Cl ase=NEWCl sEl ement o AS " Mi Obser vador "

END


9. Multiidioma
Gambas incorpora soporte nativo para crear aplicaciones que se distribuyan entre usuarios que hablan idiomas
distintos. Un proyecto ha de ser marcado como "Traducible" para que esto sea posible.
1. En una nueva aplicacin
1. Crea un nuevo proyecto grfico con Gambas y detente en el punto donde se solicita el nombre del
proyecto. Observars que puedes marcar un "check" que indica que el proyecto es traducible. Mrcala.

Tutorial de Gambas Programacin Visual en Linux Pgina 19 de 41

2. El proyecto gestionar de forma automtica los textos a partir de ese momento.
2. En una aplicacin ya existente
1. Acude al men "Proyecto" y dentro de este pulsa "Propiedades".
2. En el asistente de propiedades del proyecto, acude a la pestaa "Traduccin" y marca la opcin "El
proyecto es traducible". Acepta los cambios.

Tutorial de Gambas Programacin Visual en Linux Pgina 20 de 41

3. Trabajo con aplicaciones " traducibles"
1. Todos los textos de la interfaz grfica, se gestionan de forma automtica, de modo que al acudir al gestor
de traducciones, los encontrars disponibles tras cualquier cambio o adicin en la intefaz.
2. En cuanto a los textos del programa, hemos de indicar explcitamente que deseamos tenerlos disponibles
para su traduccin, ya que podra tratarse de textos que no se deben traducir, como, por ejemplo, cadenas
SQL, o etiquetas de XML. Si en un cdigo no traducible, indicamos las cadenas como en este ejemplo:
3. PUBLI C SUB But t on1_Cl i ck( )
4.
5. Message. I nf o ( " Hol a Mundo" )
6.
7. END

En el caso de un texto ha traducir, hemos de delimitar la cadena textual con signos de parntesis:
PUBLI C SUB But t on1_Cl i ck( )

Message. I nf o ( ( " Hol a Mundo" ) )

END

El compilador sabe distinguir automticamente entre los parentesis que corresponden al mtodo, y los

Tutorial de Gambas Programacin Visual en Linux Pgina 21 de 41
referidos a la cadena.
8. Por ltimo, ten en cuenta que hay signos especiales o "de escape" en Gambas; as, por ejemplo, el smbolo
" & " se utiliza para indicar en la interfaz grfica, que esa tecla ser el atajo de teclado para acceder al
men o botn, por ejemplo. Otros smbolos tienen significado similar al que tienen en C o algunas shells,
como es el caso de "\n" (retorno de carro). el gestor de traducciones, es capaz de comprobar la coherencia
de caracteres especiales escritos en la versin original, y en la traduccin.


10. Proceso de Traduccin
Vamos a tomar como ejemplo el propio entorno de desarrollo Gambas. Cuando descargamos una versin de Gambas en
paquete fuente, y descomprimimos el paquete tar.bz2, se genera una carpeta llamada gambas-X.XX (X.XX depende de la
versin). Dentro de esta carpeta, hay dos subcarpetas:
app/gambas : contiene el propio entorno de desarrollo.
app/gambas-database-manager : contiene el gestor de bases de datos.
Pues bien, ejecutemos Gambas, indiquemos "Abrir proyecto", busquemos la carpeta gambas-X.XX/app/gambas, y abramos
este proyecto. A continuacin, acudamos al men "Proyecto", seleccionando la opcin "Traducir".



Una vez seleccionada la opcin, entramos en el asistente de traduccin. Hemos de elegir el idioma que deseamos traducir.
Si ya habamos trabajado previamente en ella, aparecern los textos sin traducir, as como los ya traducidos. Todas las
cadenas sin traducir, as como las introducidas con posterioridad a la ltima fase de traducciones, aparecern con la
traduccin en blanco.


Tutorial de Gambas Programacin Visual en Linux Pgina 22 de 41


Cada vez que pulsamos con el botn izquierdo en una de las cadenas en la primera lista, en las listas inferiores se nos
muestra la cadena original, y en la parte inferior disponemos de la caja de texto para escribir la traduccin correspondiente.
Cuando cambiamos a otra cadena, la que habamos editado queda guardada durante esta sesin (es necesario pulsar
"Guardar traduccin" para que quede guardado permanentemente).
El resto de las opciones son las siguientes:



Guardar traduccin : los cambios realizados en esta sesin, se guardan y quedan disponibles para los usuarios del
programa en ese idioma.
Recargar traduccin : se borran todos los cambios realizados en la ltima sesin, y se vuelve al estado anterior.
Borrar traduccin : elimina todos los textos traducidos.
Duplicar una traduccin : hace una copia de la traduccin que haba en otro idioma, de modo que nos sirva como

Tutorial de Gambas Programacin Visual en Linux Pgina 23 de 41

base para el idioma a traducir. Puede ser til, por ejemplo, para hacer una traduccin en "Espaol (variante
Argentina)", basada en la original "Espaol (variante Espaa)". Lo mismo ocurre con el Francs de Blgica o
Canad respecto al de Francia, que puede llegar a ser confuso segn la nacionalidad del usuario, si no se realizan
adaptaciones.
Exportar una traduccin : convierte la traduccin en un fichero estndar tipo ".po", usado por la mayora de los
programas escritos en C y C++sobre GNU/Linux, FreeBSD y software libre para otros sistemas operativos. este
formato permite enviar la traduccin realizada a otras personas, en un sistema de desarrollo donde se trabaje en
diferentes lugares. Este es el caso de Gambas: una vez escrita la traduccin, se exporta a formato .po, y se enva a
la lista de desarrollo de Gambas.
Importar una traduccin : proceso inverso al anterior. El coordinador recibe un fichero ".po", y lo absorve para
incorporarlo a la versin de programa.
Verificar traduccin : imprescindible antes de dar por buena una nueva versin, comprueba que todos los smbolos
especiales (por ejemplo '&') coinciden entre los textos originales y los traducidos. No debe utilizarse, ni exportarse
nunca, una traduccin en la cual el verificador da un mensaje de error.
Buscar la siguiente cadena no traducida : nos dirige directamente a la siguiente cadena pendiente de traducir desde
la anterior traduccin, de modo que sea ms fcil traducir conforme se incorporan nuevas cadenas al programa.



Tutorial de Gambas Programacin Visual en Linux Pgina 24 de 41

Desarrollo de aplicaciones con Gambas.
Tutorial y ejemplo de un programa hecho con Gambas.
Sumario: Vamos a crear una aplicacin sencilla con Gambas. Veremos cmo se programan los eventos y
algunos trucos y tcnicas de trabajo con este magnfico entorno de desarrollo.
David Asorey lvarez. Febrero de 2005.
Introduccin
Primeros pasos
Gestin de eventos
Consideraciones relativas al diseo de formularios
Al grano ...
Accin "Limpiar"
Accin "Aadir"
Accin "Modificar"
Accin "Borrar"
Accin "Salir"
Accin "Abrir"
Accin "Guardar"
Un ltimo ajuste
Nuestro programa funcionando
Distribuyendo nuestra aplicacin
Conclusiones
Acerca de este documento y del autor
Notas
Introduccin
Gambas es una herramienta de desarrollo visual de aplicaciones muy similar a los conocidos programas
comerciales Microsoft Visual Basic o Borland Delphi.
Con Gambas se pueden hacer aplicaciones o programas con interfaz grfica de forma muy rpida, pues integran
un diseador de formularios o ventanas, un editor de cdigo, un explorador de clases, un visor de ayuda, etc.
Este tipo de herramientas han sido siempre muy habituales en la plataforma Microsoft Windows, pero para
Linux no existan tantas, o bien no estaban tan depuradas. Podemos encontrar Kdevelop, Kylix o VDK Builder.
Hay que destacar que en el desarrollo de aplicaciones en Linux hay una larga tradicin y costumbre de emplear
muchas herramientas diferentes, cada una especializada en una tarea en concreto (p. ej., un compilador, un
editor, un depurador, cada uno por separado), por lo que este tipo de herramientas integradas (IDE) no han
aparecido hasta hace poco.
Existe un grupo de programadores y desarrolladores que estn acostumbrados a estas herramientas integradas,
ya sea porque suelen trabajar con ellas en otras plataformas o porque les resulta ms cmodo o fcil.
Gambas es una herramienta, que, en palabras de su autor, Benot Minisini, permite la creacin de programas
potentes, de forma fcil y sencilla. El lenguaje de programacin que se utiliza es una versin del "viejo"
BASIC. Puede sorprender que se haya escogido un lenguaje tan bsico e incluso limitado como es el BASIC,
pero no hay que olvidar que uno de los objetivos de la herramienta es acercar el desarrollo de aplicaciones a
personas no expertas en la programacin.
Tutorial de Gambas Programacin Visual en Linux Pgina 25 de 41
El objetivo de este tutorial es presentar un poco por encima la herramienta, pero vamos a presuponer que el
lector ya sabe programar un poco, y que trminos como funcin, evento, variable y similares le son familiares.
Hay excelentes tutoriales disponibles en Internet ( 1), y el propio programa incorpora un navegador de
documentacin bastante completo.
La versin de Gambas utilizada al redactar este tutorial es la 1.0-1. La pgina web de Gambas est en
http://gambas.sourceforge.net

Descargar el programa de ejemplo: agenda.tar.gz
Este tutorial en pdf: gambas_tutorial.pdf
Primeros pasos
Para no repetirnos y aportar algo ms a lo que ya hay escrito, no vamos a entrar en cmo es el entorno de
desarrollo, ni para qu sirve cada herramienta, etc. En la propia documentacin de Gambas vienen algunos
tutoriales introductorios y un apartado llamado "Visual Introduction to Gambas".
En este tutorial intentaremos hacer un programa completo y funcional desde el principio, y solucionaremos las
necesidades segn vayan surgiendo.
Vamos a crear un programa que sea una especie de cuaderno o agenda para tomar notas. Se podrn aadir o
borrar notas, adems de modificar las existentes. En cualquier momento se pueden guardar las notas a un
fichero o recuperar otras de un fichero.

Tutorial de Gambas Programacin Visual en Linux Pgina 26 de 41
En Gambas, seleccionamos la opcin "Nuevo proyecto". Seleccionamos crear un proyecto grfico y el
programa nos pide algunos datos como el nombre y ttulo del proyecto:

Tambin nos deja elegir dos opciones adicionales: "El proyecto es traducible" y "Los controles del formulario
son pblicos". Las dejamos sin marcar y seguimos.
A continuacin seleccionamos el directorio donde queremos guardar el proyecto y finalizamos el asistente para
la creacin de proyectos. Con el botn derecho pulsamos en el apartado "Formularios" y seleccionamos la
opcin "Nuevo formulario".
Vamos a disear el formulario con un "ListBox" y varios botones para aadir, modificar, borrar, etc. El diseo
que proponemos sera algo as:

Tutorial de Gambas Programacin Visual en Linux Pgina 27 de 41


Tenemos un "Label", un "ListBox" y varios botones, que se insertan en el formulario seleccionndolos en la
caja de herramientas y "dibujndolos" sobre el formulario. Lo ms destacable en este caso son los botones
"Abrir", "Guardar" y "Salir", que los hemos situado encima de un "Panel" en vez de sobre el formulario
directamente.
Para conseguir que los botones respondan a "atajos de teclado", hay que poner un "ampersand" (&) delante de
la letra que servir como "atajo".
Para crear el men, pulsamos con el botn derecho en cualquier punto vaco del formulario y seleccionamos la
opcin "Editor de men":
Tutorial de Gambas Programacin Visual en Linux Pgina 28 de 41


Al crear los botones y las distintas entradas en el men podemos observar en la ventana de propiedades que
hay, aparte de las opciones tpicas (nombre, clase, texto a mostrar, etc.), una opcin llamada "Grupo". Esta
opcin es muy interesante, puesto que si tenemos varios controles (p. ej., el men "Abrir" y el botn "Abrir")
que deben hacer lo mismo, asocindolos al mismo grupo slo tenemos que escribir el cdigo correspondiente al
grupo de acciones al que pertenece cada control.
As pues, en nuestro programa de ejemplo, hemos asociado al grupo "Abrir" el men y el botn "Abrir", al
grupo "Guardar" el botn y el men "Guardar", etc.
Si ahora hacemos click en un botn o en el men correspondiente, se nos abrir el editor de cdigo
posicionndose el cursor en la declaracin de un procedimiento que se llama igual que el grupo de acciones.
Gestin de eventos
Los programas con interfaz grfica de usuario suelen basar su funcionamiento en eventos. Esto es, cada vez que
el usuario "hace algo" en la aplicacin, se genera un evento y ste evento puede tener asociado una funcin o
procedimiento que responda a la accin del usuario.
Si, por ejemplo, el usuario hace click en un control determinado, se generan varios eventos: MousePress, al
presionar el botn del ratn, MouseRelease, al liberar el botn del ratn, Click como resultado de esta accin. Si
el usuario hace doble click, el evento generado es un DblClick. Por supuesto, no todos los controles son capaces
Tutorial de Gambas Programacin Visual en Linux Pgina 29 de 41

de responder a todos los eventos. No tiene sentido hablar del evento Resize en un botn, puesto que este evento
se genera al redimensionar una ventana.
En Gambas, para introducir el cdigo del procedimiento ( 2) correspondiente a un evento, se declara de la
siguiente manera:
PUBLI C SUB Cont r ol _Event o
Donde Cont r ol es el nombre del control que est respondiendo al evento y Event o es el evento que se produce.
Algunos controles tienen un evento predeterminado, que es el ms usual: un botn tiene como evento
predeterminado el Cl i ck, etc.
En Gambas, al hacer click sobre cualquier control, se abre el editor de cdigo en la declaracin del evento
predeterminado, con una excepcin. Como comentbamos antes, si el control est asociado a un grupo de
acciones, el editor se abre en la declaracin del procedimiento correspondiente al grupo de acciones.
Consideraciones relativas al diseo de formularios
Al disear el formulario de la aplicacin, debemos tener en cuenta varias cuestiones:
No todos los usuarios utilizan la misma resolucin de pantalla, gestor de ventanas y tipo de fuentes. Hay
que tener cuidado y no tratar de "aprovechar" demasiado el espacio. Podemos acabar con etiquetas de
texto (Label) ilegibles, botones con el texto cortado, etc
Por la misma razn, conviene que la ventana principal de la aplicacin sea redimensionable por el
usuario (en Gambas es la propiedad Border del formulario. No es recomendable fijar esta propiedad a
Fixed.
Al crear el formulario, se nos ofrecen varias opciones que pueden ser interesantes:

Tutorial de Gambas Programacin Visual en Linux Pgina 30 de 41



Las opciones relativas al constructor y destructor nos sirven en el caso de que queramos hacer alguna
operacin sobre el formulario antes de visualizarlo y al cerrarlo, respectivamente.
Aparecen las siguientes declaraciones:
' Gambas cl ass

f i l e PUBLI C SUB _new( )



END



PUBLI C SUB _f r ee( )



END



PUBLI C SUB For m_Open( )



END
Tutorial de Gambas Programacin Visual en Linux Pgina 31 de 41

Si seleccionamos elegimos las opciones "Constructor esttico" y "Destructor esttico", las declaraciones
que nos aparecen ahora en el editor de cdigo son:
' Gambas cl ass f i l e



STATI C PUBLI C SUB _i ni t ( )



END



STATI C PUBLI C SUB _exi t ( )



END



PUBLI C SUB _new( )



END



PUBLI C SUB _f r ee( )



END



PUBLI C SUB For m_Open( )



END
Podemos as alterar el comportamiento de nuestra aplicacin al abrirse y/o cerrarse el formulario. Que el
procedimiento est declarado como STATIC significa que slo podr acceder a variables declaradas
tambin como STATIC.
Al grano ...
Ya tenemos nuestro formulario diseado. Ahora se trata de implementar funcionalidad a los controles.
Lo primero que vamos a hacer es que los botones "Aadir", "Modificar", "Borrar" y "Limpiar" (y las entradas
correspondientes en los mens) funcionen.
Accin " Limpiar"
Este botn se encarga de borrar todas las entradas que haya en el ListBox. Para saber cmo hacer sto,
buscamos en el navegador de ayuda la documentacin relativa al control ListBox:
Tutorial de Gambas Programacin Visual en Linux Pgina 32 de 41

La documentacin se encuentra bajo el "rbol" gb. qt , que es donde se encuentra la documentacin de todos los
controles del tipo "visual" (botones, etiquetas, mens, etc...). Vemos que el ListBox proporciona un mtodo "
Cl ear ", que precisamente hace lo que queremos: borrar todo el contenido del control.
Haciendo click en el botn "Limpiar", se abre el editor de cdigo en el procedimiento correspondiente.
Aadimos el siguiente cdigo:
PUBLI C SUB Li mpi ar _Cl i ck( )

Li st Box1. Cl ear ( )

END
Fcil, verdad?.
Accin " Aadir"
Esto ya es un poco ms complicado. Queremos que el usuario, al pulsar el botn, pueda escribir una lnea de
texto que se cargue en el ListBox.
Gambas no proporciona por defecto un dilogo del tipo "InputBox", as que lo vamos a crear nosotros mismos.
Creamos un nuevo formulario, pero ahora s que queremos disponer de un constructor. Por qu?. Porque en el
momento de crearlo cambiaremos algunas propiedades como el ttulo, algn mensaje de texto y un valor por
defecto para la entrada de texto. Este es el diseo que proponemos:


Tutorial de Gambas Programacin Visual en Linux Pgina 33 de 41

El formulario no tiene mucha complicacin. Dispone de una etiqueta o Label , una entrada de texto ( Text Box)
y dos botones. Como buen cuadro de dilogo que se precie, es conveniente que se pueda cancelar con la tecla
Escape y aceptar con la tecla Ent er :
Los controles But t on tienen dos propiedades adecuadas para este cometido. Son " Default" y " Cancel". Para el
botn "Aceptar", ponemos " Default" a Tr ue y " Cancel" a Fal se. Para el botn "Cancelar", al contrario.
De esta manera, cuando se abra el formulario, una pulsacin en la tecla <ENTER>ser equivalente a pulsar el
botn "Aceptar" y una pulsacin en la tecla <ESC>simular el botn "Cancelar".
El siguiente problema que se nos plantea es cmo retornar el valor que introduce el usuario en la entrada de
texto a la ventana principal. Hay que destacar que en Gambas no hay variables globales, as que tendremos que
buscar otra solucin. En el "Consejo del da n 7", (men "? >Consejos del da") se nos sugiere que creemos un
mdulo en el cual ponemos una variable PUBLIC, as puede ser accedida desde cualquier punto de la
aplicacin.
Creamos un mdulo (botn derecho en "Mdulos >Nuevo mdulo") y lo llamamos MComun, por ejemplo. Esta
sera la implementacin del mdulo:
' Gambas modul e f i l e

PUBLI C t ext o AS St r i ng
As, sin ms. Ahora tenemos una variable visible desde cualquier punto del programa que puede ser accedida
con la notacin MComun. t ext o
Lo siguiente es implementar el formulario que har las veces de "InputBox". Esta sera su implementacin:
' Gambas cl ass f i l e



PUBLI C SUB _new( t i t ul o AS St r i ng, mensaj e AS St r i ng, OPTI ONAL t ext o

AS St r i ng)

ME. Capt i on = t i t ul o

Label 1. Capt i on = mensaj e

' un St r i ng se eval a como Fal se si est " vac o"

I F t ext o THEN Text Box1. Text = t ext o

END



PUBLI C SUB But t on1_Cl i ck( ) ' Est e es el bot n Acept ar

MComun. t ext o = Text Box1. Text

ME. Cl ose( 0)

END



Tutorial de Gambas Programacin Visual en Linux Pgina 34 de 41

PUBLI C SUB But t on2_Cl i ck( ) ' Est e es el bot n Cancel ar

ME. Cl ose( 0)

END
El procedimiento _new es el constructor. Como nos interesa que el texto de la etiqueta, el ttulo y el texto a
editar sean distintos cada vez, los ajustamos al crear la ventana.
El botn "Aceptar" asigna el texto en el Text Box en la variable t ext o del mdulo MComun y cierra el
formulario. El botn "Cancelar" simplemente cierra la ventana.
Como la variable MComun. t ext o es comn, tenemos que acordarnos de "limpiarla" cada vez que la utilicemos.
Vamos a verlo ahora mismo.
El procedimiento para el botn "Aadir" del formulario principal es el siguiente. Es bastante autoexplicativo:
PUBLI C SUB Annadi r _Cl i ck( )

' Decl ar amos nuest r o " I nput box"

f AS FI nput Box

' Cr eamos el I nput Box, pasndol e el t t ul o, mensaj e a most r ar

' y un val or por def ect o: l a f echa y hor a del moment o y una f l echi t a

f = NEWFI nput Box( " Escr i bi r ent r ada" ,

" Escr i ba l a l nea que desea aadi r : " ,

CSt r ( Now) & " - > " )

' Lo most r amos

f . ShowModal ( )

' Si han pul sado acept ar y han met i do t ext o,

' est ar en l a var i abl e MComun. t ext o

I F MComun. t ext o THEN ' Una cadena vac a es Fal se

' El cont r ol Li st Box t i ene un mt odo par a aadi r t ext o: . Add

Li st Box1. Add( MComun. t ext o)

' " Vaci amos" l a var i abl e comn

MComun. t ext o = " "

END I F

END
Accin " Modificar"
Al pulsar este botn, el usuario modificar alguna de las entradas que haya en el ListBox. Si no hay ninguna, el
botn no debe hacer nada, y si no han seleccionado ninguna lnea, mostrar un mensaje de aviso. Veamos la
implementacin del procedimiento asociado.
Tutorial de Gambas Programacin Visual en Linux Pgina 35 de 41

' Acci n " Modi f i car "

PUBLI C SUB Modi f i car _Cl i ck( )

f AS FI nput Box

I F Li st Box1. Count > 0 THEN ' Si no hay nada en el f or mul ar i o,

' su pr opi edad Count es 0. En est e caso,

' no hacemos nada.

I F Li st Box1. I ndex = - 1 THEN

' La pr opi edad I ndex nos devuel ve el ndi ce de l a l nea sel ecci onada.

' Si no hay sel ecci onada ni nguna, devuel ve - 1. En est e caso, avi samos

' al usuar i o y no hacemos ms.

message. I nf o( " Debe sel ecci onar l a l nea que desea modi f i car . " )

ELSE

' El usuar i o ha sel ecci onado una l nea en el Li st Box.

' Most r amos nuest r o I nput Box, pasndol e t ambi n el t ext o sel ecci onado.

' El t ext o sel ecci onado es l a pr opi edad Text del obj et o Li st BoxI t em

' sel ecci onado, al que se accede a su vez con l a pr opi edad Sel ect ed

' del Li st Box

f = NEWFI nput Box( " Modi f i car ent r ada" ,

" Modi f i que l a l nea sel ecci onada: " ,

Li st Box1. Cur r ent . Text )

f . ShowModal ( )

' El cuadr o de di l ogo FI nput Box modi f i ca l a var i abl e compar t i da

' en el mdul o MComun.

' Si no est vac a, l a asi gnamos al Li st BoxI t emsel ecci onado.

I F MComun. t ext o THEN Li st Box1. Cur r ent . Text = MComun. t ext o

' Como ant es, " vaci amos" l a var i abl e compar t i da despus de usar l a.

MComun. t ext o = " "

END I F

END I F

END
Tutorial de Gambas Programacin Visual en Linux Pgina 36 de 41

Accin " Borrar"
Como en el caso anterior, el ListBox debe tener alguna lnea, y el usuario debe haber seleccionado una al
menos. El cdigo es similar al del botn "Modificar":
PUBLI C SUB Bor r ar _Cl i ck( )

i AS I nt eger

i = Li st Box1. I ndex

I F i >= 0 THEN

Li st Box1. Remove( i ) ' El mt odo Remove qui t a una l nea, j ust o

' l o que quer emos

ELSE I F Li st Box1. Count > 0 AND i = - 1 THEN

' Compr obamos que el Li st Box no est vac o y que

' haya al go sel ecci onado.

message. I nf o( " Debe sel ecci onar l a l nea que desea bor r ar . " )

END I F

END
Podemos observar que la implementacin de estas cuatro acciones es comn para los botones y las entradas
equivalentes en el men.
Ahora pasamos a implementar las acciones relativas al manejo de ficheros (Abrir, Guardar) y salir de la
aplicacin. Empezaremos por lo fcil:
Accin " Salir"
La funcin de este botn (y la correspondiente entrada en el men) es cerrar la aplicacin. Nada ms sencillo:
PUBLI C SUB Sal i r _Cl i ck( )

ME. Cl ose( 0) ' ME es una r ef er enci a al pr opi o f or mul ar i o

FI nput Box

END
Se podra hacer un poco ms amigable esta accin agregando un dilogo del tipo " Est Ud. seguro de que
quiere salir de la aplicacin?" y actuar en consecuencia. Dejamos esta mejora como ejercicio para el lector.
Accin " Abrir"
Qu se supone que debe hacer?. Pues preguntarle al usuario por un archivo, leerlo y cargar el contenido en el
ListBox. Veamos directamente la accin correspondiente:
PUBLI C SUB Abr i r _Cl i ck( )

DI M c AS St r i ng
Tutorial de Gambas Programacin Visual en Linux Pgina 37 de 41

DI M ar r _cadenas AS St r i ng[ ]

Di al og. Ti t l e = " Sel ecci one un ar chi vo"

Di al og. Fi l t er = [ " Dat os de agenda ( *. dat a) " , " Todos l os f i cher os ( *. *) " ]

I F NOT Di al og. OpenFi l e( ) THEN

ar r _cadenas = Spl i t ( Fi l e. LOAD( Di al og. Pat h) , " \ n" )

Li st Box1. Cl ear ( )

FOR EACH c I N ar r _cadenas

Li st Box1. Add( c)

NEXT

END I F

END
Este trozo de cdigo se nos presenta una caracterstica muy interesante de Gambas, las clases "no instanciables"
o estticas ( 3). Son clases que no pueden instanciarse pero pueden utilizarse directamente. En esta accin
vemos en accin dos de estas clases: la clase " Fi l e" y "Di al og".
Por ejemplo, la clase Di al og proporciona acceso a los tpicos cuadros de dilogo de seleccin de ficheros,
colores, etc. Est documentada en gb. qt

En nuestra aplicacin, queremos seleccionar un fichero y cargarlo. Para hacer sto, utilizaremos la clase Di al og
de la siguiente forma:
Di al og. Ti t l e = " Sel ecci one un ar chi vo"

Di al og. Fi l t er = [ " Dat os de agenda ( *. dat a) " , " Todos l os f i cher os ( *. *) " ]

I F NOT Di al og. OpenFi l e( ) THEN


Tutorial de Gambas Programacin Visual en Linux Pgina 38 de 41
' et c . . .
Ajustamos el ttulo del cuadro de dilogo, proporcionamos un filtro para la seleccin del tipo de fichero por
extensin y finalmente invocamos el mtodo OpenFi l e( ) de la clase. Curiosamente, si NO se selecciona un
fichero (el usuario pulsa "Cancelar", etc ...), el valor de retorno del mtodo OpenFi l e( ) es Tr ue. Una vez
seleccionado el fichero por parte del usuario, podemos acceder a la ruta completa con la propiedad
Di al og. Pat h
La clase Fi l e (su documentacin se encuentra "colgando" de la entrada gb) proporciona varios mtodos para
trabajar con ficheros.

En la documentacin de Gambas, en la seccin "How do I ..." se muestran varios ejemplos para leer y escribir
ficheros. Nosotros vamos a utilizar en nuestra aplicacin el mtodo Load( ) , que recibe como argumento la ruta
de un fichero y devuelve un St r i ng con todo el contenido del fichero. Para separar las lneas que contiene el
fichero, utilizamos la funcin Spl i t ( ) , que toma como argumentos la cadena que queremos "partir", el carcter
a utilizar como separador (un salto de lnea en nuestro caso, " \ n") y devuelve un Ar r ay de St r i ngs. Por ello
hemos declarado la variable ar r _cadenas como St r i ng[ ] :
DI M ar r _cadenas AS St r i ng[ ]
Una vez que tenemos la lista de cadenas contenidas en el fichero, limpiamos el ListBox y vamos aadiendo una
a una cada cadena utilizando el mtodo Add( ) del ListBox.
Accin " Guardar"
Al pulsar el botn "Guardar" o la entrada equivalente en el men, el programa debe volcar los contenidos a un
fichero de texto. Mostraremos un cuadro de dilogo al usuario para que nos proporcione el nombre del fichero a
utilizar. Este es el cdigo correspondiente:
PUBLI C SUB Guar dar _Cl i ck( )

l i neas AS St r i ng

dest i no AS St r i ng

numAr chi vo AS I nt eger


Tutorial de Gambas Programacin Visual en Linux Pgina 39 de 41

l i neas = Li st Box1. Cont ent s

Di al og. Ti t l e = " Sel ecci one un ar chi vo"

Di al og. Fi l t er = [ " Dat os de agenda ( *. dat a) " ]

I F NOT Di al og. SaveFi l e( ) THEN

I F Ri ght $( Di al og. Pat h, 5) <> " . dat a" THEN

dest i no = Di al og. Pat h & " . dat a"

ELSE

dest i no = Di al og. Pat h

END I F

Fi l e. Save( dest i no, l i neas)

END I F

END
Queremos que los datos se guarden en un fichero con la extensin . dat a, as que si el nombre del fichero que
proporciona el usuario no termina en ".data", concatenamos manualmente la extensin. Para guardar el
contenido en un fichero, utilizamos el mtodo Save( ) de la clase Fi l e, que toma como argumentos la ruta al
fichero y el texto que queremos volcar. Accedemos al contenido del ListBox mediante su propiedad Cont ent s,
que devuelve un St r i ng, con un salto de lnea " \ n" separando cada entrada en el ListBox.
Un ltimo ajuste
Se nos ocurre que sera interesante que cuando el usuario se posicione en una de las lneas del ListBox pudiese
visualizar el contenido completo de la lnea, ya que pueden aparecer cortadas si son muy largas. Lo vamos a
hacer de la siguiente forma: cuando el usuario hace doble click en una entrada, el contenido de la lnea lo
mostraremos en un cuadro de dilogo:
PUBLI C SUB Li st Box1_Dbl Cl i ck( )

I F Li st Box1. I ndex >= 0 THEN

message. I nf o( Li st Box1. Cur r ent . Text )

END I F

END
Tutorial de Gambas Programacin Visual en Linux Pgina 40 de 41
Nuestro programa funcionando

Distribuyendo nuestra aplicacin
Ya tenemos la aplicacin creada. Podemos probarla en cualquier momento del desarrollo utilizando la tecla F5.
Ahora queremos utilizarla como un programa normal, sin tener que tener Gambas funcionando. Para ello hay
una opcin en el men principal de Gambas ("Proyecto >Crear ejecutable"). Esto nos genera un archivo
ejecutable "monoltico", esto es, incluye todos los formularios, implementacin y ficheros adicionales del
proyecto. Este ejecutable no es cdigo mquina, es "bytecode" ejecutable por el intrprete de Gambas, gbx.
Esto implica que necesitamos tener instalado Gambas para ejecutar programas escritos con Gambas (al igual
que otros lenguajes: se necesita tener J ava para ejecutara un programa escrito en J ava).
Por fortuna, en la mayora de las distribuciones que incluyen Gambas se han separado los componentes y hay
un "Gambas runtime", que incluye el intrprete, pero no el entorno de desarrollo completo.
Tambin podemos crear paquetes RPM o DEB para nuestro programa. Estos paquetes tendrn como
dependencia el intrprete de Gambas (el gambas- r unt i me). Hay un asistente muy fcil de usar para crear los
paquetes ("Proyecto >Crear paquete de instalacin ...").

Tutorial de Gambas Programacin Visual en Linux Pgina 41 de 41
Conclusiones
Hemos visto lo fcil que es crear una aplicacin mnimamente funcional con Gambas. Proporciona bastantes
controles y clases predefinidas. Hay tambin extensiones para crear aplicaciones cliente/servidor, acceso a
bases de datos, multimedia, etc.
Personalmente me parece que es una herramienta con muchsimo futuro, y, afortunadamente, el desarrollo de
Gambas es muy activo, corrigindose los errores que van surgiendo con mucha rapidez.
Gracias, Benot (et col.)! Excelente trabajo!

Acerca de este documento y del autor
Como mencionbamos antes, la aplicacin se ha desarrollado utilizando la versin 1.0-1 de Gambas (he
utilizado los paquetes precompilados para Debian "Sid"). En el momento de escribir este documento, la versin
1.0.3 acaba de ser publicada, y en el momento en que leas este documento, probablemente haya una versin
ms moderna. Conviene leer la lista de cambios de una versin a otra por si se produce alguna
incompatibilidad.
Cualquier comentario, sugerencia o mejora de este documento es bienvenida.
Mi correo es forodejazz (arroba) gmail (punto) com
Rollo legal: Este documento es libre, puedes copiarlo, distribuirlo, modificarlo, enlazarlo, traducirlo a otras
lenguas e incluso venderlo, pero siempre conservando esta nota y citando la procedencia del documento. En
cualquier caso, el autor agradecera que se le notificase, y en un momento dado, ser retribuido econmicamente
por su esfuerzo (si cuela, cuela ;-)
Notas
1. Hay un buen tutorial de iniciacin y documentacin de Gambas en castellano en
http://gambas.gnulinex.org
2. Los eventos deben tratarse con un procedimiento, esto es, una funcin que no retorna valor alguno.
3. No soy experto en la terminologa usada en la programacin orientada a objetos, as que, probablemente
estar usando algn trmino incorrectamente. Mis disculpas ;-)

También podría gustarte