Tutorial de Gambas - MachiquesTeletriunfador · Tutorial de Gambas – Programación Visual en...

41
Tutorial de Gambas – Programación Visual en Linux Página 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 Teoría Básica 6. Evento KeyPress 7. Grupos de Controles 8. Trabajo con Eventos 9. Multi-idioma 10. Proceso de Traducción Desarrollo de aplicaciones con Gambas http://www.laclavedefa.org/codigo_abierto/gambas_tutorial/gambas_tutorial_es.html Introducción Primeros pasos Gestión de eventos Consideraciones relativas al diseño de formularios Al grano ... Acción "Limpiar" Acción "Añadir" Acción "Modificar" Acción "Borrar" Acción "Salir" Acción "Abrir" Acción "Guardar" Un último ajuste Nuestro programa funcionando Distribuyendo nuestra aplicación Conclusiones Acerca de este documento y del autor Notas

Transcript of Tutorial de Gambas - MachiquesTeletriunfador · Tutorial de Gambas – Programación Visual en...

  • 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