-
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
http://gambas.sourceforge.net/download.htmlftp://ftp.gwdg.de/pub/linux/misc/suser-gbv/rpms/http://www.kudla.org/
-
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.
http://curl.haxx.se/
-
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 class file 5. 6. PUBLIC SUB Button1_Click() 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 class file 13. ' Este es un ejemplo de programa
sencillo 14. ' para aprender algunos conceptos 15. ' bsicos sobre
Gambas 16.
http://wiki.gnulinex.org/gambas/7
-
Tutorial de Gambas Programacin Visual en Linux Pgina 8 de 41 17.
PUBLIC SUB Button1_Click() 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 class file 25. ' Este es un ejemplo de programa
sencillo 26. ' para aprender algunos conceptos 27. ' bsicos sobre
Gambas 28. 29. PUBLIC SUB Button1_Click() 30. 31. Message.Info
("Hola 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 module file 5. 6. PUBLIC SUB Main() 7. 8. END
http://wiki.gnulinex.org/gambas/7http://wiki.gnulinex.org/gambas/8
-
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 module file 11. 12. PUBLIC SUB Main() 13. 14. PRINT
"Hola 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 Java 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:
DIM MyVar As Integer PRIVATE Respuesta As String PUBLIC Suma As
Float
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
PUBLIC FUNCTION nombre_de_la_funcion (p1 As TipoDato,p2 As
TipoDato...) As TipoDato o bien PUBLIC SUB nombre_de_la_funcion (p1
As TipoDato,p2 As TipoDato...)
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 funcin que no devuelve ningn valor y no necesita parmetros:
PUBLIC SUB MyFuncion() Una funcin que no devuelve ningn valor y
necesita un valor entero como parmetro: PUBLIC SUB
OtraFuncion(MiValor As Integer) Una funcin que devuelve una cadena
de texto y necesita un valor entero y un valor de cadena: PUBLIC
FUNCTION OtraMas(MiDato As Integer,MiCadena As String) As
String
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.
http://wiki.gnulinex.org/gambas/8
-
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:
Mdulo 1: Public SUB MiFuncion(Dato As Integer) Mdulo 2: Public
SUB MiFuncion(Dato As Integer)
Si nos encontramos dentro de otra funcin del mdulo 1, yqueremos
llamar a la funcin "MiFuncion", directamente lo indicaremos as en
el cdigo:
... MiFuncion(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:
... Mifuncion(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:
Modulo1.MiFuncion(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.
PRIVATE Var1 As Integer PUBLIC Var2 As String PUBLIC FUNCTION
SumaEspecial (V1 As Integer,V2 As Integer) As Integer DIM Media As
Integer Media=(V1+V2)/2 RETURN Media+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:
... PUBLIC SUB Button1_KeyPress() Message.Info(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:
... PUBLIC SUB Button1_KeyPress() IF Key.Code = 4116 THEN
Message("Has pulsado la tecla de flecha derecha") END IF 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:
... PUBLIC SUB Button1_KeyRelease() IF Key.Code = Key.Right THEN
Message("Has soltado la tecla de flecha derecha") END IF 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: ... PUBLIC SUB Button1_KeyPress() IF 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:
PUBLIC SUB Btn1_Click() ... 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:
PUBLIC SUB Botones_Click() ... 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
PRINT 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:
DIM Btn As Button ... Btn=NEW Button(ME) AS "Botones" ...
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 MiEvento(Data AS String) Tras esto, aadimos una variable
privada que acta como contador: PRIVATE Contador AS Integer
Escribimos ahora el cdigo de la funcin de llamada: PUBLIC SUB
Llamada() ' Incrementamos el contador Contador=Contador+1 IF
Contador>9 THEN ' Si el valor del contador es 10 ' disparamos el
evento RAISE MiEvento("Contador vale 10") ' Y reseteamos el
contador Contador=0 END IF END Finalmente, escribimos el cdigo
principal del programa. Para ello cremos un formulario con un botn.
Al inicio declaramos un objeto de nuestra clase: PRIVATE MiClase AS
ClsElemento Al abrirse el formulario, creamos el objeto, declarando
el "observador" de eventos entre comillas: PUBLIC SUB Form_Open()
MiClase=NEW ClsElemento AS "MiObservador" END Aadimos al botn el
cdigo para que utilize el objeto: PUBLIC SUB Button1_Click()
MiClase.Llamada () END Y finalmente, recogemos el evento: PUBLIC
SUB MiObservador_MiEvento(Data AS String) Message.Info (Data)
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 class
file PRIVATE Contador AS Integer EVENT MiEvento(Data AS String)
PUBLIC SUB Llamada() Contador=Contador+1 IF Contador>9 THEN
RAISE MiEvento("Contador vale 10") Contador=0 END IF END Cdigo
completo de "Form1": PRIVATE MiClase AS ClsElemento PUBLIC SUB
Button1_Click() MiClase.Llamada () END PUBLIC SUB
MiObservador_MiEvento(Data AS String) Message.Info (Data) END
PUBLIC SUB Form_Open() MiClase=NEW ClsElemento AS "MiObservador"
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. PUBLIC SUB Button1_Click() 4. 5. Message.Info ("Hola Mundo")
6. 7. END
En el caso de un texto ha traducir, hemos de delimitar la cadena
textual con signos de parntesis:
PUBLIC SUB Button1_Click() Message.Info ( ("Hola Mundo") )
END
El compilador sabe distinguir automticamente entre los
parentesis que corresponden al mtodo, y los
http://wiki.gnulinex.org/gambas/11http://wiki.gnulinex.org/gambas/11
-
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.
http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Introducci#Introduccihttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Primeros#Primeroshttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Gesti#Gestihttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Considerac#Considerachttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#grano#granohttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Limpiar#Limpiarhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#adir#adirhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Modificar#Modificarhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Borrar#Borrarhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Salir#Salirhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Abrir#Abrirhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Acci#Accihttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#ltimo#ltimohttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Funcionando#Funcionandohttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Distribuye#Distribuyehttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Conclusion#Conclusionhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Acerca#Acercahttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#Notas#Notas
-
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.
http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#enlaces#enlaceshttp://gambas.sourceforge.net/http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/agenda.tar.gzhttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial.pdf
-
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:
PUBLIC SUB Control_Evento
Donde Control es el nombre del control que est respondiendo al
evento y Evento es el evento que se produce. Algunos controles
tienen un evento predeterminado, que es el ms usual: un botn tiene
como evento predeterminado el Click, 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:
http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#procedimiento#procedimiento
-
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 class file PUBLIC SUB _new() END PUBLIC SUB _free() END
PUBLIC SUB Form_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 class file STATIC PUBLIC SUB _init() END STATIC PUBLIC
SUB _exit() END PUBLIC SUB _new() END PUBLIC SUB _free() END PUBLIC
SUB Form_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 " Clear", 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:
PUBLIC SUB Limpiar_Click() ListBox1.Clear() 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 ( TextBox) 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
Enter:
Los controles Button tienen dos propiedades adecuadas para este
cometido. Son " Default" y " Cancel". Para el botn "Aceptar",
ponemos " Default" a True y " Cancel" a False. 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 module file PUBLIC texto AS String
As, sin ms. Ahora tenemos una variable visible desde cualquier
punto del programa que puede ser accedida con la notacin
MComun.texto
Lo siguiente es implementar el formulario que har las veces de
"InputBox". Esta sera su implementacin:
' Gambas class file PUBLIC SUB _new(titulo AS String, mensaje AS
String, OPTIONAL texto AS String) ME.Caption = titulo
Label1.Caption = mensaje ' un String se evala como False si est
"vaco" IF texto THEN TextBox1.Text = texto END PUBLIC SUB
Button1_Click() ' Este es el botn Aceptar MComun.texto =
TextBox1.Text ME.Close(0) END
-
Tutorial de Gambas Programacin Visual en Linux Pgina 34 de
41
PUBLIC SUB Button2_Click() ' Este es el botn Cancelar
ME.Close(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 TextBox en la variable
texto del mdulo MComun y cierra el formulario. El botn "Cancelar"
simplemente cierra la ventana.
Como la variable MComun.texto 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:
PUBLIC SUB Annadir_Click() ' Declaramos nuestro "Inputbox" f AS
FInputBox ' Creamos el InputBox, pasndole el ttulo, mensaje a
mostrar ' y un valor por defecto: la fecha y hora del momento y una
flechita f = NEW FInputBox("Escribir entrada", "Escriba la lnea que
desea aadir:", CStr(Now) & " -> ") ' Lo mostramos
f.ShowModal() ' Si han pulsado aceptar y han metido texto, ' estar
en la variable MComun.texto IF MComun.texto THEN 'Una cadena vaca
es False ' El control ListBox tiene un mtodo para aadir texto: .Add
ListBox1.Add(MComun.texto) ' "Vaciamos" la variable comn
MComun.texto = "" END IF 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
' Accin "Modificar" PUBLIC SUB Modificar_Click() f AS FInputBox
IF ListBox1.Count > 0 THEN ' Si no hay nada en el formulario, '
su propiedad Count es 0. En este caso, ' no hacemos nada. IF
ListBox1.Index = -1 THEN ' La propiedad Index nos devuelve el ndice
de la lnea seleccionada. ' Si no hay seleccionada ninguna, devuelve
-1. En este caso, avisamos ' al usuario y no hacemos ms.
message.Info("Debe seleccionar la lnea que desea modificar.") ELSE
' El usuario ha seleccionado una lnea en el ListBox. ' Mostramos
nuestro InputBox, pasndole tambin el texto seleccionado. ' El texto
seleccionado es la propiedad Text del objeto ListBoxItem '
seleccionado, al que se accede a su vez con la propiedad Selected '
del ListBox f = NEW FInputBox("Modificar entrada", "Modifique la
lnea seleccionada:", ListBox1.Current.Text) f.ShowModal() ' El
cuadro de dilogo FInputBox modifica la variable compartida ' en el
mdulo MComun. ' Si no est vaca, la asignamos al ListBoxItem
seleccionado. IF MComun.texto THEN ListBox1.Current.Text =
MComun.texto ' Como antes, "vaciamos" la variable compartida despus
de usarla. MComun.texto = "" END IF END IF 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":
PUBLIC SUB Borrar_Click() i AS Integer i = ListBox1.Index IF i
>= 0 THEN ListBox1.Remove(i) ' El mtodo Remove quita una lnea,
justo ' lo que queremos ELSE IF ListBox1.Count > 0 AND i = -1
THEN ' Comprobamos que el ListBox no est vaco y que ' haya algo
seleccionado. message.Info("Debe seleccionar la lnea que desea
borrar.") END IF 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:
PUBLIC SUB Salir_Click() ME.Close(0) ' ME es una referencia al
propio formulario FInputBox 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:
PUBLIC SUB Abrir_Click() DIM c AS String
-
Tutorial de Gambas Programacin Visual en Linux Pgina 37 de 41
DIM arr_cadenas AS String[] Dialog.Title = "Seleccione un archivo"
Dialog.Filter = [ "Datos de agenda (*.data)", "Todos los ficheros
(*.*)" ] IF NOT Dialog.OpenFile() THEN arr_cadenas =
Split(File.LOAD(Dialog.Path), "\n") ListBox1.Clear() FOR EACH c IN
arr_cadenas ListBox1.Add(c) NEXT END IF 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 " File" y "Dialog".
Por ejemplo, la clase Dialog 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 Dialog de la
siguiente forma:
Dialog.Title = "Seleccione un archivo" Dialog.Filter = [ "Datos
de agenda (*.data)", "Todos los ficheros (*.*)" ] IF NOT
Dialog.OpenFile() THEN
http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html#oop#oop
-
Tutorial de Gambas Programacin Visual en Linux Pgina 38 de 41 '
etc ...
Ajustamos el ttulo del cuadro de dilogo, proporcionamos un
filtro para la seleccin del tipo de fichero por extensin y
finalmente invocamos el mtodo OpenFile() de la clase. Curiosamente,
si NO se selecciona un fichero (el usuario pulsa "Cancelar", etc
...), el valor de retorno del mtodo OpenFile() es True. Una vez
seleccionado el fichero por parte del usuario, podemos acceder a la
ruta completa con la propiedad Dialog.Path
La clase File (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 String con todo
el contenido del fichero. Para separar las lneas que contiene el
fichero, utilizamos la funcin Split(), 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 Array de
Strings. Por ello hemos declarado la variable arr_cadenas como
String[]: DIM arr_cadenas AS String[]
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:
PUBLIC SUB Guardar_Click() lineas AS String destino AS String
numArchivo AS Integer
-
Tutorial de Gambas Programacin Visual en Linux Pgina 39 de
41
lineas = ListBox1.Contents Dialog.Title = "Seleccione un
archivo" Dialog.Filter = [ "Datos de agenda (*.data)" ] IF NOT
Dialog.SaveFile() THEN IF Right$(Dialog.Path, 5) ".data" THEN
destino = Dialog.Path & ".data" ELSE destino = Dialog.Path END
IF File.Save(destino, lineas) END IF END
Queremos que los datos se guarden en un fichero con la extensin
.data, 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 File, que toma como argumentos la ruta al fichero y el
texto que queremos volcar. Accedemos al contenido del ListBox
mediante su propiedad Contents, que devuelve un String, 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:
PUBLIC SUB ListBox1_DblClick() IF ListBox1.Index >= 0 THEN
message.Info(ListBox1.Current.Text) END IF 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 Java para ejecutara un
programa escrito en Java).
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-runtime). 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 ;-)
mailto:[email protected]?Subject=Tutorial%20Gambashttp://gambas.gnulinex.org/
Tutorial de
Gambashttp://www.wikilearning.com/tutorial_de_gambas-wkc-9153.htmDesarrollo
de aplicaciones con
Gambashttp://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html
Tutorial de
Gambashttp://www.wikilearning.com/tutorial_de_gambas-wkc-9153.htm1.
Instalando Gambas
DistribucionesComponentes2. Hola Mundo 13. Hola Mundo 24. Hola
Mundo 35. Algo de Teora Bsica
Programacin estructurada6. Evento KeyPress7. Grupos de
Controles8. Trabajo con Eventos9. Multiidioma
1. En una nueva aplicacin2. En una aplicacin ya existente3.
Trabajo con aplicaciones "traducibles"10. Proceso de Traduccin
Desarrollo de aplicaciones con Gambas.Tutorial y ejemplo de un
programa hecho con Gambas.IntroduccinPrimeros pasosGestin de
eventosConsideraciones relativas al diseo de formulariosAl grano
...Accin "Limpiar"Accin "Aadir"Accin "Modificar"Accin "Borrar"Accin
"Salir"Accin "Abrir"Accin "Guardar"Un ltimo ajusteNuestro programa
funcionandoDistribuyendo nuestra aplicacinConclusionesAcerca de
este documento y del autorNotas