Manual_Basico_de_Gambas español

51
PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información. PDF generated at: Sat, 13 Nov 2010 22:51:58 UTC Manual basico Gambas Michael Gomez

Transcript of Manual_Basico_de_Gambas español

Page 1: Manual_Basico_de_Gambas español

PDF generado usando el kit de herramientas de fuente abierta mwlib. Ver http://code.pediapress.com/ para mayor información.PDF generated at: Sat, 13 Nov 2010 22:51:58 UTC

Manual basico GambasMichael Gomez

Page 2: Manual_Basico_de_Gambas español

ContenidosArtículos

Gambas 1Gambas/Conceptos básicos de programación 4Gambas/Diseño de Aplicaciones con Gambas 7Gambas/Estructuras de control de ciclos o bucles 8Gambas/Estructuras de control y funciones de evaluación de expresiones 10Gambas/Funciones Internas 12Gambas/Funciones personalizadas 16Gambas/Programación Orientada a Objetos 17Gambas/Elementos de la GUI 20Gambas/Diseño de la GUI 23Gambas/Eventos 23Gambas/Manejo de Errores 24Gambas/Administración de procesos 25Gambas/Invocar Funciones Externas 25Gambas/Manipular documentos XML 25Gambas/Trabajar con Bases de Datos 32Gambas/Scripting con Gambas 33Gambas/Networking con Gambas 38Gambas/Traducir tus proyectos 38Gambas/Referencia Rápida 38

ReferenciasFuentes y contribuyentes del artículo 47Fuentes de imagen, Licencias y contribuyentes 48

Licencias de artículosLicencia 49

Page 3: Manual_Basico_de_Gambas español

Gambas 1

GambasGambas es un entorno y lenguaje de programación que permite el desarrollo rápido de aplicaciones (RAD por sussiglas en Ingles) en Linux. Esta basado en un interprete BASIC parecido a VB pero no es un clon y no corre códigoVB. Es un aplicación original de Linux muy inspirada por JAVA. El creador es un Frances llamado Benoît Minisini(alias El Merovingio) que ha trabajado en este proyecto durante 7 años y ha escrito o coordinado más de 400,000líneas de código, distribuidas en casi 350 clases. Gambas es la manera más fácil y rápida de crear aplicaciones enLinux, sin importar si eres nuevo o experimentado en la programación en Linux. Una de las virtudes de Gambas esque integra completamente los tres elementos que hacen funcional y atractivo un lenguaje de programación: ellenguaje en si, un entorno de programación moderno y muy intuitivo, y una colección muy completa de objetos deinterfase con el usuario. Estas tres características trabajando juntas simplifican el rápido desarrollo de aplicacionesusando QT o GTK()+. También permite acceder a bases de datos como MySQL, PostgreSQL, Firebird, ODBC ySQLite. Traducir tus programas a cualquier lenguaje, crear fácilmente aplicaciones para trabajo en red, haceraplicaciones 3D OpenGL, y mucho más.Gambas es un entorno y lenguaje de programación que permite el desarrollo rápido de aplicaciones (RAD por sussiglas en Ingles) en Linux. Esta basado en un interprete BASIC parecido a VB pero no es un clon y no corre códigoVB. Es un aplicación original de Linux muy inspirada por JAVA. El creador es un Frances llamado Benoît Minisini(alias El Merovingio) que ha trabajado en este proyecto durante 7 años y ha escrito o coordinado mas de 400,000lineas de código, distribuidas en casi 350 clases. Gambas es la manera mas fácil y rápida de crear aplicaciones enLinux, sin importar si eres nuevo o experimentado en la programación en Linux. Una de las virtudes de Gambas esque integra completamente los tres elementos que hacen funcional y atractivo un lenguaje de programación: ellenguaje en si, un entorno de programación moderno y muy intuitivo, y una colección muy completa de objetos deinterfase con el usuario. Estas tres características trabajando juntas simplifican el rápido desarrollo de aplicacionesusando QT o GTK()+. También permite accesar a bases de datos como MySQL, PostgreSQL, Firebird, ODBC ySQLite. Traducir tus programas a cualquier lenguaje, crear fácilmente aplicaciones para trabajo en red, haceraplicaciones 3D OpenGL, y mucho mas.

Tabla de Contenido1. El Entorno Integrado de Desarrollo (IDE)/

1. El entorno de programación2. Componentes del IDE

2. /Conceptos básicos de programación/1. Tipos de Datos2. Variables

1. Declaración2. Asignación

3. Constantes4. Operadores

1. Aritmeticos2. De Comparación3. De Asignación

5. Comentar el código3. /Diseño de Aplicaciones con Gambas/

1. Pasos para RAD (Desarrollo Rápido de Aplicaciones)2. Programación Interactiva

Page 4: Manual_Basico_de_Gambas español

Gambas 2

4. /Estructuras de control de ciclos o bucles/1. FOR – NEXT2. FOR EACH IN3. DO – LOOP4. REPEAT – UNTIL5. WHILE - WEND

5. /Estructuras de control y funciones de evaluación de expresiones/1. IF – THEN – ELSE2. SELECT – CASE3. Función Choose4. Función If (o IIf)

6. /Funciones Internas/1. Cadenas de caracteres2. Flujo & Entrada/Salida3. Archivos y Directorios4. Aritméticas5. Logarítmicas y Exponenciales6. Trigonométricas7. Números aleatorios8. Fecha y tiempo9. Tipo de Datos10. Evaluación de caracteres11. Localización y Traducción12. Formateo

7. /Funciones personalizadas/1. Subrutinas o procedimientos2. Funciones

8. /Programación Orientada a Objetos/1. Objectos

1. Propiedades o Atributos2. Comportamientos or Métodos

2. Abstracción de Datos3. Encapsulación4. Polimorfismo5. Herencia

9. /Elementos de la GUI/1. Componentes comunes de la GUI2. Controles de entrada3. Controles de salida4. Contenedores5. Controles personalizados

10. /Diseño de la GUI/1. Widgets básicos2. Widgets avanzados3. Menus4. Barras de herramientas

Page 5: Manual_Basico_de_Gambas español

Gambas 3

5. Ventanas de Dialogo6. Cajas de Mensaje

11. /Eventos/1. Programación dirigida por eventos2. Código para responder a eventos

12. /Dibujar/13. /Imprimir y convertir a PDF/

1. Imprimir2. Visualizar formato PDF

14. /Depurar el codigo/15. /Manejo de Errores/

1. DEBUG2. FINALLY3. Error4. TRY5. ERROR6. CATCH7. TRY – ERROR – CATCH – FINALLY trabajando juntos8. Enfoque proactivo a los errores (anticiparse a los errores)

16. /Administración de procesos/1. Concepto de Front-end2. Sincronizacion de procesos3. EXEC4. Shell

17. /Invocar Funciones Externas/1. Declarar la función externa

1. Nombrarla2. Uso de Alias

2. Convertir tipos de datos3. Obtener información sobre la libreria

18. /Realizar operaciones con Archivos/19. /Manipular documentos XML/

1. Estructura básica de un documento XML2. Escribir XML3. Leer XML4. Usar XSLT

20. /Trabajar con Bases de Datos/1. Gambas Database Manager2. Diseño de la base de datos3. Agregar datos4. Borrar datos5. Consultar datos6. Editar datos

21. Scripting con Gambas/1. Gsb2 - En la consola de Linux

Page 6: Manual_Basico_de_Gambas español

Gambas 4

2. Gsw - En CGI Web22. Networking con Gambas/

1. TCP2. UDP3. HTTP4. FTP

23. /Empaquetar e instalar proyectos/24. /Traducir tus proyectos/

1. Internacionalización2. Localización3. Traducción

25. /Programar tus propios controles/1. Widgets personalizados hechos en Gambas2. Widgets personalizados hechos en C or C++

26. /Referencia Rápida/

Se autoriza la copia, la distribución y la modificación de este documento bajo los términos de la licencia dedocumentación libre GNU, versión 1.2 o cualquier otra que posteriormente publique la Fundación del SoftwareLibre (Free Software Fundation); sin secciones invariantes (Unvariant Sections), textos de portada (Front-CoverTexts), ni textos de contraportada (Back-Cover Texts).Se incluye una copia en inglés de esta licencia en el artículo Text of the GNU Free Documentation License.

Gambas/Conceptos básicos de programación

Tipos de DatosLos datos son abstracciones del mundo real que son necesarias para la resolución de una tarea y están representadasde forma que puedan ser procesadas por la computadora. Un dato puede ser único elemento o un conjunto de ellosque aporte información sobre el problema.Si el dato está formado exclusivamente por números, será de tipo numérico. Si está formado por letras será de tipoalfanumérico, ya que puede contener datos numéricos, caracteres especiales y letras. los datos lógicos o “booleanos”,únicamente pueden tomas dos valores: Cierto (True) o Falso (False).Los datos pueden ser variables y constantes.

Tipo Rango de Valores

Boolean Verdadero o Falso

Byte 0 a 255

Short -32.768 a +32.767

Integer -2.147.483.648 a +2.147.483.647

Long -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807

Single Igual que el tipo float en C

Float Igual que el tipo double en C

Date Fecha y Hora, cada uno almacenado como un entero

String Una cadena de caracteres de longitud variable

Page 7: Manual_Basico_de_Gambas español

Gambas/Conceptos básicos de programación 5

Variant Cualquier tipo de dato

Object Referencia anónima a cualquier objeto

Pointer Una dirección de memoria

VariablesUna variable es un dato que se almacena en la memoria de la computadora, del que su valor puede variar a lo largode la ejecución del programa. Una variable, en general, consta de: un identificador o nombre, que es una cadena decaracteres que sirve para referenciarla, y un valor.

Declaración• Sintaxis[STATIC] {PUBLIC|PRIVATE} Identifier [Static array declaration] AS Datatype [=Expression]

STATIC PUBLIC GridX AS Integer

STATIC PRIVATE bGrid AS Boolean

PUBLIC Name AS String

PRIVATE Control AS Object

PRIVATE Languages AS String[] = [ "fr", "it", "es", "de", "ja" ]

PRIVATE DefaultLanguage AS String = Languages[1]

'Todas las declaraciones DIM debe estar en FUNCTION o SUB antes de cualquier comando ejecutable

DIM fTimeDiff2 AS Float

DIM iTest AS Integer

DIM iK[9] AS Integer 'ik[0] to ik[8]

DIM shX[3,3] AS Short

DIM date1 AS Date

• Sintaxis[STATIC] {PUBLIC|PRIVATE} Identifier AS NEW Native Datatype [Array dimensions...]

PUBLIC CONST WORD_MAX AS Integer = 12

PRIVATE Words AS NEW String[WORD_MAX * 2]

PUBLIC Matrix AS NEW Float[3, 3]

AsignaciónDestination = Expression

iVal = 1972

Name = "Gambas"

hObject.Property = iVal

cCollection[sKey] = Name

Page 8: Manual_Basico_de_Gambas español

Gambas/Conceptos básicos de programación 6

ConstantesUna Constante es un dato almacenado en la computadora del que su valor se mantiene fijo o constante durante laejecución del programa. Las constantes pueden representarse:1. Indicando su valor (por ejemplo, 3.14, 13033 o "Este texto" son datos constantes de distinto tipo, o2. Empleando un identificador o nombre que permita hacer referencia a su valor en el programa. Imagina que

asignamos al identificador “pi” el valor constante 3.14159. El identificador es más fácil de recordar que el valor yhace que el programa sea más sencillo de modificar si el valor de la constante variase, ya que bastará conactualizar el valor asignado al identificador.

• Sintaxis{PUBLIC|PRIVATE} CONST Identifier AS Datatype = Constant value

'Los tipos de datos de las Constantes pueden ser: Boolean, Integer, Long, Float o String

PUBLIC CONST MAX_FILE AS Integer = 30

PRIVATE CONST DEBUG AS Boolean = TRUE

PRIVATE CONST MAGIC_HEADER AS String = "# Gambas form file"

Operadores

AritméticosA = Numero1 + Numero2 'Suma dos números

A =- Numero 'Calcula el signo opuesto de un numero. El cero es el opuesto de él mismo

A = Numero1 – Numero2 'Resta dos números

A = Numero1 * Numero2 'Multiplica dos números

A = Numero1 / Numero2 'Divide dos números. Una división sobre cero causará un error [A Division By Zero (#26) error]

A = Numero ^ Potencia 'Eleva un numero a una potencia

A = Numero1 \ Numero2

A = Number1 DIV Number2 'Calcula el cociente de dos números enteros, truncando el resultado. Una división sobre cero causará un error (#26)

A = Numero1 MOD Numero2 'Calcula el remanente de un cociente de dos números. Una división sobre cero causará un error (#26)

De comparaciónNumero1 = Numero2 'Retorna TRUE si dos números son iguales

Numero1 <> Numero2 'Retorna TRUE si dos números son diferentes

Numero1 < Numero2 'Retorna TRUE si Numero1 es estrictamente menor que Numero2

Numero1 > Numero2 'Retorna TRUE si Numero1 es estrictamente mayor que Numero2

Numero1 <= Numero2 'Retorna TRUE si Numero1 es menor o igual que Numero2

Numero1 >= Numero2 'Retorna TRUE si Numero1 es mayor o igual que Numero2

' Si el resultado de una comparación es asignado a una variable entera, entonces el resultado sera -1 (True) o 0 (False)

De asignaciónVariable = Expresión 'Asignación directa

Variable += Expresión 'Asignación con suma. Es sinónimo de Variable = Variable + Expresión

Variable -= Expresión 'Asignación con resta. Es sinónimo de Variable = Variable - Expresión

Variable *= Expresión 'Asignación con multiplicación. Es sinónimo de Variable = Variable * Expresión

Variable /= Expresión 'Asignación con división. Es sinónimo de Variable = Variable / Expresión

Variable \= Expresión 'Asignación con división de enteros. Es sinónimo de Variable = Variable \ Expresión

Variable &= Expresión 'Asignación con concatenación de texto. Es sinónimo de Variable = Variable & Expresión

Page 9: Manual_Basico_de_Gambas español

Gambas/Conceptos básicos de programación 7

Variable &/= Expresión 'Asignación con concatenación de ruta. Es sinónimo de Variable = Variable &/ Expresión

Comentar el códigoEs una buena práctica agregar comentarios al código que escribes, independientemente si es un programa en Gambaso en cualquier otro lenguaje. En los ejemplos anteriores hacemos uso de los comentarios para proporcionar detallesdel significado de los operadores. Todos los comentarios inician con un apostrofe (') y todo lo que se escriba despuésde él, sera ignorado por el compilador.

'Esta línea es ignorada por el compilador de Gambas

PRINT "Hola Mundo" 'Esta línea imprime Hola Mundo en la consola

Uno de los peores vicios de los programadores es no comentar su código, y después cuando tratan de darlemantenimiento a una sección de código que escribieron unos cuantos meses antes, son incapaces de recordar paraque usaron ciertas variables o que función tiene una parte especifica de su código. Ahora imagina que estastrabajando en un proyecto de programación en equipo, donde cada desarrollador se encarga de escribir una parte delcódigo, o una clase que sera usada por alguna otra parte del código. Muchos desarrolladores dicen que sólo los tontoscomentan su código, pero creo que es al revés.

Gambas/Diseño de Aplicaciones con Gambas

Pasos para el RAD (Desarrollo Rápido de Aplicaciones)Los pasos para RAD son los siguientes:1. Crear la especificación del diseño2. Crear la interfase gráfica para el usuario (GUI por sus siglas en inglés)3. Configurar las propiedades de los objetos de la GUI4. Escribir código para agregar funcionalidad5. Probar y depurar la aplicación6. Empaquetar e instalar la aplicaciónY Gambas soporta estos pasos con las características integradas en su entorno de desarrollo (IDE)1. Por ejemplo el Editor de Código te permite comentar la especificación de diseño que al mismo tiempo te servirá

de guía para ir escribiendo el código necesario según tu diseño.2. El Diseñador de Formularios y la Caja de Herramientas te permite crear rápidamente la GUI.3. El Visor de Propiedades te permite ajustar los valores de las propiedades de los objetos en la GUI para conseguir

los atributos deseados.4. Nuevamente el Editor de Código te permite ir agregando la funcionalidad necesaria para responder a los eventos

que active el usuario, el sistema o la misma aplicación.5. El Depurador integrado te facilita la tarea de depurar tu código, mediante monitoreo del valor de las variables

internas y objetos, vigilar el resultado de expresiones y mantener el registro del stack backtrace. También tepermite correr la aplicación paso a paso o en bloques con marcadores específicos.

Page 10: Manual_Basico_de_Gambas español

Gambas/Diseño de Aplicaciones con Gambas 8

Programación InteractivaGambas permite la programación interactiva, en otras palabras, correr la aplicación frecuentemente durante la fasede desarrollo, en lugar de escribir, compilar y después probar el código. Con esta técnica puedes ver el resultado detu código mientras aun estas trabajando en el, en lugar de esperar a compilarlo. Presionas F5, haces click enDepuración\Ejecutar de la barra de menú y conforme vayas haciendo algún progreso en tu programa puedesprogresivamente evaluar los cambios.

Es recomendable usar buen juicio al usar esta técnica, pues no creo que quieras correr tuprograma cada vez que tecleas una nueva instrucción, verdad?

Gambas/Estructuras de control de ciclos o buclesUna de las razones por las que escribimos un programa es para automatizar la ejecución de tareas repetitivas segúnalguna condicion. Esta funcionalidad es provista por las estructuras de control de ciclos o repetición. Estasestructuras hacen posible que una parte del programa se repita un número determinado de veces, dependiendo dealguna condición.

FOR – NEXTSe repite un numero predeterminado de veces.• SintaxisFOR Variable = Expression TO Expression [STEP Expression] ... NEXT 'Counter loop.

FOR iCount = 1 TO 20 STEP 3

PRINT iCount & " ";

NEXT

FOR EACH INSe repite para cada uno de los miembros de una colección de elementos.• SintaxisFOR EACH Variable IN Expression ... NEXT

'Enumeration loop.

FOR EACH Element IN Dict

PRINT Element;

NEXT

DO – LOOPEste estructura de control de ciclosse repetirá mientras que una determinada condición sea cierta. La condición puedeser evaluada al inicio o al final de la estructura dependiendo si se usa DO WHILE - LOOP o DO - LOOP UNTIL. Sila condición se evalúa al comienzo de la estructura (condición de entrada) el bloque de instrucciones pude noejecutarse ninguna vez, si la condición de entrada es inicialmente falsa. Por el contrario, si la condición se evalúa alfinal de la estructura (condición de salida) el bloque de instrucciones se ejecutará al menos una vez, aunque lacondición de salida ya sea cierta al entrar en la estructura.

Page 11: Manual_Basico_de_Gambas español

Gambas/Estructuras de control de ciclos o bucles 9

• SintaxisDO [WHILE Condition] ... [BREAK|CONTINUE] ... LOOP [UNTIL Condition]

'Infinite loop.

DO WHILE a <= 5

PRINT "Hello World"; a

INC a

LOOP

' The same effect with UNTIL

DO

PRINT "Hello World"; a

INC a

LOOP UNTIL a = 6

REPEAT – UNTILEl bloque de acciones se repetirá hasta que una determinada condición sea cierta. La condición se evalúa al final dela estructura (condición de salida). Esto implica que el bloque de instrucciones se ejecutará al menos una vez, aunquela condición de salida ya sea cierta al entrar en la estructura.• SintaxisREPEAT ... UNTIL Condition

'Loop with an exit test at the end.

REPEAT

PRINT Timer 'The repeat loop is always executed at least once, even if the UNTIL value is initially false.

UNTIL Timer > 10

WHILE - WENDEl bloque de acciones se repetirá mientras que una determinada condición sea cierta. La condición se evalúa alcomienzo de la estructura (condición de entrada). Esto implica que el bloque de instrucciones pude no ejecutarseninguna vez, si la condición de entrada es inicialmente falsa.• SintaxisWHILE Condition ... WEND

'Loop with an exit test at the beginning

WHILE a \<= 10

PRINT "Hello World"; a

INC a

WEND

Page 12: Manual_Basico_de_Gambas español

Gambas/Estructuras de control y funciones de evaluación de expresiones 10

Gambas/Estructuras de control y funciones deevaluación de expresionesUn programa puede considerarse como una sucesión de instrucciones o comandos que van a dirigir elfuncionamiento de la computadora con el fin de resolver un determinado problema o responder a ciertanecesidad.Las estructuras de control permiten que las instrucciones no sean estrictamente ejecutadas en el mismoorden en el que fueron escritas. Dichas estructuras, hacen posible que el control de la ejecución se pase de una partea otra del programa. Las estructuras de control básicas son la secuencia, la bifurcación por evaluación de expresionesy la repetición de ciclos (descrito en sección anterior).En la secuencia, cuando una instrucción se ha ejecutado pasa inmediatamente el control a la siguiente.

INICIO

Instruccion 1

Instruccion 2

Instruccion ...

Instruccion n

FIN

La bifurcación permite transferir el control a otra parte del programa dependiendo de si se cumple una determinadacondición o expresión. Las estructuras de control que ofrece Gambas son las siguientes:

IF – THEN – ELSEEsta estructura de control es conocida como bifurcación simple, porque la condición sólo pude tomar los valoresverdadero o falso. Esta instrucción permite realizar unas instrucciones u otras en función de una condición. Esposiblemente el comando más utilizado, puesto que permite tomar una decisión durante la ejecución del programa.• SintaxisIF Expression [{AND IF|OR IF} Expression ...] [THEN] ... [ELSE IF Expression [{AND IF|OR IF} Expression ...][THEN] ...] [ELSE ...] ENDIF

FOR k = 1 TO 10

IF k < 5 OR IF k > 5 THEN

PRINT k;;

ELSE

PRINT "5 has been reached!"

END IF

NEXT

SELECT – CASEA esta estructura se le conoce como bifurcación múltiple y esto se debe a que la variable de control puede asumir unamplio rango de valores.• SintaxisSELECT [CASE] Expression [CASE Expression [TO Expression2] [, ... ] ...] [CASE Expression [TO Expression2] [,... ] ...] [{CASE ELSE|DEFAULT} ...] END SELECT

SELECT CASE w

CASE 1

Page 13: Manual_Basico_de_Gambas español

Gambas/Estructuras de control y funciones de evaluación de expresiones 11

a = a + 1

CASE 2

b = b + 1

CASE 3

c = c + 1

CASE 4

d = d + 1

CASE 5

e = e + 1

CASE 6

f = f + 1

CASE ELSE

PRINT "This is impossible!"

END SELECT

Anidar estructuras de controlLas estructuras de control pueden usarse recursivamente o anidadas, es decir dentro de una estructura de controlpuede haber otras, que a su vez tomaran decisiones para el buen funcionamiento del programa. La unica restricciones que deben ir cerrandose en el orden en que fueron abiertas, pensemos en el siguiente ejemplo:

[ 'Estructura 1er nivel

{2do nivel},

(2do nivel),

<2do nivel>,

{2do nivel,

<3er nivel

(4to nivel

{5to nivel}

)'Fin del 4to nivel

>'Fin del 3er nivel

}'Fin del 2do nivel

]'Fin del 1er nivel

Función ChooseLa función Choose usa una variable o expresión de selección (Coice) para indicar cual es la posición del resultadoque será seleccionado de un grupo de resultados (Result1, Result2 [, ... ]).Si la variable o expresión de selección apuntan a una posición fuera del rango entonces la función devuelve un valornull.• SintaxisValue = Choose (Choice, Result1, Result2 [, ... ])

X = 3

PRINT Choose(X, "one", "two", "three", "four") 'three

PRINT IsNull(Choose(X * 2, "one", "two", "three", "four")) 'True

Page 14: Manual_Basico_de_Gambas español

Gambas/Estructuras de control y funciones de evaluación de expresiones 12

Función If (o IIf)• SintaxisValue = IIf (bTest AS Boolean , vTrue , vFalse) Value = If (bTest AS Boolean , vTrue , vFalse)

PRINT If((X MOD 2) = 0, "even", "odd")

PRINT "You have " & X & " message" & If(X <> 1, "s", "") & " waiting."

Gambas/Funciones Internas

Cadenas de caracteres• Asc Returns the ASCII code of a character in a string.• Chr$ Returns a character from its ASCII code.• Comp Compares two strings.• InStr Searches a string into another string.• LCase$ Converts a string to lowercase.• Left$ Returns the first characters of a string.• Len Returns the length of a string.• LTrim$ Strips white spaces from the left of a string.• Mid$ Returns a part of a string.• Replace$ Replaces in a string a substring by another one.• Right$ Returns the last characters of a string.• RInStr Searches a string into another string from its right.• RTrim$ Strips white spaces from the right of a string.• Scan Splits a string against a regular expression pattern.• Space$ Returns a string containing only space.• Split Splits a string into substrings.• String$ Returns the same string concatenated many times.• Subst$ Substitutes strings in a pattern.• Trim$ Strips white spaces from a string.• UCase$ Converts a string to uppercase.

Flujo & Entrada/Salida• CLOSE Closes a stream• Eof Returns if the end of file is reached.• ERROR Prints expressions to the error standard output.• ERROR TO Redirects the standard error output.• FLUSH Flushes the output of a buffered stream.• INPUT Reads strings from a text stream and converts them into values.• INPUT FROM Redirects the standard input.• LINE INPUT Reads lines from a text stream.• LOCK Locks an opened stream.• Lof Returns the length of a stream.• OPEN Opens a file for reading or writing and creates a stream for it.• OUTPUT TO Redirects the standard output.

Page 15: Manual_Basico_de_Gambas español

Gambas/Funciones Internas 13

• PIPE Opens a named pipe for reading or writing and creates a stream for it.• PRINT Prints expressions to a stream.• READ Reads binary data from a stream.• SEEK Change the position of the stream file pointer.• Seek Gets the position of the stream file pointer.• UNLOCK Unlocks an opened stream.• WRITE Write binary data to a stream.

Archivos y Directorios• Access Tests the access authorization of a file.• COPY Copy a file.• DFree Returns the free space on a device.• Dir Browses a directory.• Exist Checks if a specific file or directory exists.• IsDir Returns if a path points at a directory.• KILL Removes a file.• LINK Creates a symbolic link.• MKDIR Creates a directory.• MOVE Renames or moves a file or a directory.• RDir Browses a directory recursively.• RMDIR Removes an empty directory.• Stat Get information about a file.• Temp$ Makes temporary file names.

Aritméticas• Abs Returns the absolute value of a number.• DEC Decrements a variable.• Fix Returns the integer part of a number.• Frac Returns the fractional part of a number.• INC Increments a variable.• Int Returns the mathematical integer part of a number.• Max Returns the maximum number.• Min Returns the minimum number.• Round Rounds a number.• Sgn Returns the sign of a number.

Page 16: Manual_Basico_de_Gambas español

Gambas/Funciones Internas 14

Logarítmicas y Exponenciales• Cbr Cubic root• Exp Exponential, e^x• Exp2 2^x• Exp10 10^x• Expm Exp(x) - 1• Log Neperian logarithm, base e logarithm• Log2 Base 2 logarithm• Log10 Decimal logarithm• Logp Log(1+x)• Sqr Square root

Trigonométricas• ACos Computes the arc cosine of an angle.• ACosh Computes the hyperbolic arc cosine of an angle.• Ang Computes the angle polar coordinate from two rectangular coordinates.• ASin Computes the arc sine of an angle.• ASinh Computes the hybperbolic arc sine of an angle.• ATan Computes the arc tangent of an angle.• ATan2 Computes the arc tangent of two numbers.• ATanh Computes the hyperbolic arc tangent of an angle.• Cos Computes the cosine of an angle.• Cosh Computes the hyperbolic cosine of an angle.• Deg Converts radians to degrees.• Hyp Calculate the hypotenuse of a triangle.• Mag Computes the distance polar coordinate from two rectangular coordinates.• Pi Returns π or a multiple of π.• Sin Computes the sine of an angle.• Sinh Computes the hyperbolic sine of an angle.• Tan Computes the tangent of an angle.• Tanh Computes the hyperbolic tangent of an angle.• Rad Converts degrees to radians.

Números aleatorios• RANDOMIZE Initializes the pseudo-random number generator.• Rnd Returns a pseudo-random number.

Fecha y tiempo• Date Returns a date without its time component.• DateAdd Adds a period to a given date.• DateDiff Returns the period between two dates.• Day Returns the day of a Date value.• Hour Returns the hours of a Date value.• Minute Returns the minutes of a Date value.• Month Returns the month of a Date value.

Page 17: Manual_Basico_de_Gambas español

Gambas/Funciones Internas 15

• Now Returns the current date and time.• Second Returns the seconds of a Date value.• Time Returns the time part of a Date value.• Timer Returns the number of elapsed seconds since the program started.• Week Returns the week number of a Date value.• WeekDay Returns the week day of a Date value.• Year Returns the year of a Date value.

Tipo de Datos• IsBoolean Returns if an expression is a Boolean value.• IsByte Returns if an expression is a Byte value.• IsDate Returns if an expression is a Date value.• IsFloat Returns if an expression is a Float value.• IsInteger Returns if an expression is an Integer value.• IsLong Returns if an expression is a Long value.• IsNull Returns if an expression is NULL.• IsNumber Returns if an expression is a number.• IsObject Returns if an expression is an Object value.• IsShort Returns if an expression is a Short value.• IsSingle Returns if an expression is a Single value.• IsString Returns if an expression is a String value.• TypeOf Returns the type of the value of an expression.

Evaluación de caracteres• IsAscii Tests if a string contains only ASCII characters.• IsBlank Tests if a string contains only blank characters.• IsDigit Tests if a string contains only digits.• IsHexa Tests if a string contains only hexadecimal digits.• IsLCase Tests if a string contains only lowercase letters.• IsLetter Tests if a string contains only letters.• IsPunct Tests if a string contains only printable non-alphanumeric characters.• IsSpace Tests if a string contains only space characters.• IsUCase Tests if a string contains only uppercase letters.

Localización y Traducción• Format$ Format a number or a date.• Str$ Converts a number or a date into a string.• Subst$ Substitutes strings in a pattern.• Tr$ Translate a string.• Val Converts a string into a number or a date.

Page 18: Manual_Basico_de_Gambas español

Gambas/Funciones Internas 16

Formateo• Bin$ Format a number in binary.• Format$ Format a number or a date.• Hex$ Format a number in hexadecimal.

Gambas/Funciones personalizadas

Subrutinas o procedimientosLos procedimientos son rutinas secundarias, de ahi la palabra clave en ingles SUB, que se ejecutan sin devolverningun valor.• Sintaxis[STATIC] {PUBLICSUB} Identifier ( BYREF] Parameter AS Datatype [, ... [,] [OPTIONAL [BYREF] OptionalParameter AS Datatype [, ... [,] [...] ) ... END

PUBLIC SUB Button1_Click()

PRINT Calc(0);; Calc(0.5);; Calc(1)

END

FuncionesLas funciones son subprogramas al igual que los procedimientos pero que devuelven un valor.• Sintaxis[STATIC] {PUBLICPROCEDURE|SUB} Identifier ( BYREF] Parameter AS Datatype [, ... [,] [OPTIONAL[BYREF] Optional Parameter AS Datatype [, ... [,] [...] ) AS Datatype ... RETURN Value 'In Gambas the RETURNvalue is passed as a parameter to the RETURN statement. In VB the RETURN value is assigned to the FUNCTIONname: Solve1 = TRUE END

FUNCTION Calc(fX AS Float) AS Float

RETURN Sin(fX) * Exp(- fX)

END

Page 19: Manual_Basico_de_Gambas español

Gambas/Programación Orientada a Objetos 17

Gambas/Programación Orientada a ObjetosDurante esta sección estarás escarbando en el IDE de Gambas y aprendiendo algunos conceptos clave en tuaprendizaje de Gambas. Aprenderás un concepto de programación importantísimo, conocido como Objeto.El término de programación Objeto, probablemente es nuevo para ti hasta este momento. Cuanto más trabajes conGambas más escucharas (y aprenderás) sobre objetos, porque como ya se mencionó antes, Gambas es un lenguajeque soporta programación orientada a objetos (OOP por sus siglas en ingles). Puesto que la programación orientada aobjetos es un tema muy complejo y va más allá del alcance de este libro, sólo se cubrirá en un sentido muy general.Aun así, no deja de ser un tanto complicado. El reto ahora para ti es aprender acerca de objetos al mismo tiempo queaprendes Gambas. De hecho, todo en Gambas es un objeto y pertenece a una colección de objetos. Todos los objetostienen propiedades (también conocidas como atributos), la mayoría también tienen métodos (también llamadoscomportamientos), y muchos tienen eventos. Sin importar si crearás una aplicación sencilla o una solución de granescala, debes entender qué es un objeto y como funciona.

ObjetosUn objetos es una estructura de programación que encapsula datos y funcionalidad como una unidad singular y porlo tanto el único acceso público a ella es a través de sus interfaces: propiedades, métodos y eventos. Los objetosusados más comúnmente son los formularios y los componentes de la interfaz gráfica. En lecciones anteriores seexplicó como trabajar con formularios y sus componentes e incluso se mostró como fijar sus propiedades.Otra importante característica de los objetos es el uso de clases. Una clase es un "machote" o plantilla usado paracrear un objeto. Cada objeto de una misma clase tendrá características parecidas. En las clases se definen todas lascaracterísticas particulares del objeto. Cuando escribes un programa en un lenguaje orientado a objetos no definesobjetos individuales. En vez de eso, defines clases usadas para crear esos objetos. Cuando agregas una caja deimagen llamada PictureBox1, lo que en realidad estas haciendo es usar la clase PictureBox y crear una instancia deella.

Propiedades o AtributosLas propiedades son datos que diferencias un objeto de otro. Todos los objetos tienen atributos usados paraespecificar e informar sobre el estado del objeto. Estos pueden ser usados para determinar la apariencia, estado, yotras cualidades de objetos que pertenece a tal clase. En una clase, las propiedades son definidas por variables(lugares para almacenar información en un programa de computación). Las variables instanciadas son propiedadesque tienen valores que difieren de un objeto a otro. En otras lecciones ya has usado algunas de ellas al usar el visorde Propiedades del IDE. La ventana de propiedades esta disponible en "tiempo de diseño", y es usada sólo paramanipular las propiedades del formulario y sus componentes. También puedes modificar las propiedades en "tiempode ejecución" usando algo de código. Cuando hacemos referencia a las propiedades en código primero se especificael nombre del objeto (propiamente hablando, el nombre de la instancia del objeto), seguido de un punto "." ydespués el nombre de la propiedad, como en el siguiente ejemplo:

NombreDelObjeto.Propiedad

O como en la siguiente linea de código valido de Gambas:

FileChooser1.Filter = [“*.png;*.jpg;*.jpeg;*.bmp”, “Picture files”]

Asumamos que tenemos un objeto llamado HeroesCharacter con las siguientes propiedades: Nombre,InterpretadoPor & Habilidad. Ahora tenemos dos instancias de ese objetos llamadas Heroe1 y Heroe2. Para asignarvalores a las propiedades de esos objetos usando código haríamos algo parecido a lo siguiente:

Page 20: Manual_Basico_de_Gambas español

Gambas/Programación Orientada a Objetos 18

Heroe1.Nombre = “Claire Bennet”Heroe1.InterpretadoPor = “Hayden Panettiere”Heroe1.Habilidad = “Rápida regeneración celular”Heroe2.Nombre = “Hiro Nakamura”Heroe2.InterpretadoPor = “Masi Oka”Heroe2.Habilidad = “Manipulacion del espacio-tiempo: teletransportación y viajar por el tiempo”

WITH - END WITH

La estructura WITH - END WITH nos facilita la asignación de variables de objetos pues en vez de teclear vez trasvez el nombre del objeto (de la instancia, propiamente dicho) sólo hacemos mención de él al principio, hacemostodas las asignaciones necesarias y por ultimo cerramos la estructura de asignación.El ejemplo anterior usando WITH - END WITH se haría de la siguiente manera:

WITH Heroe1

.Nombre = "Claire Bennet"

.InterpretadoPor = "Hayden Panettiere"

.Habilidad = "Rápida regeneración celular"

END WITH

Comportamiento o MétodosEl comportamiento se refiere a las cosas que la clase del objeto puede hacer a ella misma o a otros objetos. Losmétodos pueden ser usados para cambiar las propiedades de un objeto, recibir información de otros objetos, enviarmensajes a otros objetos y/o pedirles que realicen tareas. En otras palabras, los métodos son acciones que los objetospuede hacer, en contraste con las propiedades que sólo describen a los objetos. El comportamiento de una clase esimplementado usando métodos. Los objetos se comunican entre ellos usando métodos. Piensa en los métodos comofunciones. Cuando invocas un métodos algún código es ejecutado. Puedes pasar datos o parámetros a los métodos, yellos pueden devolver valores. Sin embargo, un método no necesariamente debe aceptar parámetros ninecesariamente debe devolver algún valor. Invocar un método es muy similar a hacer referencia al valor de unapropiedad; primero haces referencia al nombre del objeto, después un punto "." y por ultimo el nombre del métodoseguido de paréntesis, los cuales opcionalmente puede contener parámetros que serán pasados al método.

NombreDelObjeto.Metodo()

Regresemos a nuestro objeto HeroesCharacter. Imagina que nuestra instancia Heroe2 tiene un método llamadoViajarEnTiempo() que acepta dos parámetros: fecha y lugar.

Heroe2.ViajarEnTiempo(“5/2/2009”, “México”)

Cuando invoques este método nuestro amigo Hiro viajará en el tiempo y el espacio a Mayo 2 del 2009 a la ciudad deMéxico.Las propiedades y los métodos trabajan de la mano, y algunas veces un método en particular se hace no disponibledebido al valor de una o más propiedades. Por ejemplo, si la propiedad Habilidad de Heroe2 se cambiará a"Ninguna" el método ViajarEnTiempo() se volvería obviamente inaplicable. Aun podrías llamar al método, pero alhacerlo podrías causar un error o la llamada seria ignorada.

Page 21: Manual_Basico_de_Gambas español

Gambas/Programación Orientada a Objetos 19

Crear una claseCon algo de suerte, solo necesitaras un par de ejemplos para entender mejor estos conceptos (objetos, clases,propiedades y métodos). Crea un nuevo proyecto como una aplicación de línea de comando llamado Objetos.Cuando creas un proyecto de esta manera se genera una aplicación sin ningún formulario, sólo contendrá un módulollamado MMain. Dentro del IDE de Gambas, haz click derecho sobre el directorio Clases sobre el visor delProyecto, selecciona Nuevo... en el menu contextual y haz click sobre Clases... bajo el campo Nombre tecleaHeroesCharacter y después OK. Después bajo el folder Clases un nuevo archivo de clase es agregado. Aquí esdonde declararas tres propiedades y un único método como sigue:PUBLIC Nombre AS String

PUBLIC InterpretadoPor AS String

PUBLIC Habilidad AS String

PUBLIC FUNCTION ImprimeMe()

PRINT (“Hola mi nombre es “ & Nombre & “; Mi personaje es interpretado por “ & InterpretadoPor & “; y mi habilidad es “ & Habilidad)

END

Ahora haz doble click en el modulo MMain y declara dos instancias de la clase HeroesCharacter antes de PUBLICSUB Main().

PRIVATE Heroe1 AS NEW HeroesCharacter

PRIVATE Heroe2 AS NEW HeroesCharacter

Dentro de las lineas PUBLIC SUB Main() y END asigna valores a las propiedades como ya habíamos comentado.

WITH Heroe1

.Nombre = "Claire Bennet"

.InterpretadoPor = "Hayden Panettiere"

.Habilidad = "Rápida regeneración celular"

END WITH

Heroe2.Nombre = "Hiro Nakamura"

Heroe2.InterpretadoPor = "Masi Oka"

Heroe2.Habilidad = "Manipulación del espacio-tiempo: teletransportación y viajar por el tiempo"

Después de estas líneas ahora invocarás el método ImprimeMe() como sigue:

Heroe1.ImprimeMe()

Heroe2.ImprimeMe()

Ejecuta el programa y en la consola aparecerán dos líneas de código desplegando los valores de las propiedades denuestros objetos

Hola mi nombre es Claire Bennet; Mi personaje es interpretado por

Hayden Panettiere; y mi habilidad es Rápida regeneración celular.

Hola mi nombre es Hiro Nakamura; Mi personaje es interpretado por Masi

Oka; y mi habilidad es Manipulación del espacio-tiempo:

teletransportación y viajar por el tiempo.

La cosa importante para recordar aquí es que los métodos son acciones que los objetos pueden hacer, en este casoimprimir en la consola algún texto y las sus propiedades. En contraste, las propiedades describen el objeto, en estapráctica nos dicen acerca de las características de los objetos Heroe1 y Heroe2. Si esta es la primer vez que escuchassobre programación orientada a objetos, probablemente parezca un tanto teórico y un poco abrumador. Hasta estepunto, debieras haber adquirido un entendimiento básico de clases, objetos, propiedades y métodos. Si no es así, lee

Page 22: Manual_Basico_de_Gambas español

Gambas/Programación Orientada a Objetos 20

nuevamente la sección y has las practicas, porque usaras estos conceptos en las secciones siguientes.

HerenciaLa herencia es uno de los conceptos más cruciales en la programación orientada a objetos. Tiene un efecto directoen como diseñarás y escribirás tus propias clases. La herencia es el mecanismo que permite a una subclase heredarlas propiedades y métodos de una superclase.Vemos el siguiente ejemplo:

Gambas/Elementos de la GUIFalta traducir!!! No borrar contenido tomado del libro Gambas 24 en ingles.

Componentes comunes de la GUI

Puesto que Gambas ofrece independencia de GUI y de escritorio las descripciones en estasección son muy generales, tratando de amoldarse en los mas posible a los posibles manejadoresde escritorio.

El componente mas común, pero al mismo tiempo el mas ignorado, es el apuntador o cursor. Pordefinición el cursor es la imagen gráfica sobre la pantalla que indica la localización del dispositivo apuntador, ypuede ser usado para seleccionar y arrastrar objetos o indicar comandos sobre la pantalla. El apuntador típico es unaflecha inclinada, pero puede variar según los diferentes estatus, operaciones, programas o sistemas operativos. Lamayoría de las operaciones con el cursor son disparadas al presionar los botones del raton, tarea que es conocidacomo hacer click. El click que se hace con el botón izquierdo es llamado solamente click; el click que se hace usandoel botón derecho es llamado click derecho.

La acción de arrastrar es realizada al hacer click en cierta área de un objeto (ya sea un icono,una ventana, etc) y manteniendo el botón presionado, mover el cursor a otra área deseada.

La ventana es el área sobre la pantalla sobre la que se muestra información, con su contenido siendomostrada independientemente del resto de la pantalla. Un ejemplo de ventana es la que aparece en la

pantalla cuando haces click en el icono de tu navegador de internet favorito. Es fácil manipular una ventana: puedeser abierta o cerrada con un simple click; pude moverse a cualquier area mediante arrastrarla; puede cambiarse sutamaño o minimizarse; puede colocarse enfrente o detrás de otra ventana, como las molestas ventanas en esos sitiosque visitas; sus barras de desplazamiento pueden ser usadas para navegar las secciones que contiene; multiplesventanas pueden ser abiertas al mismo tiempo con diferentes aplicaciones, etc.

Los menús permiten al usuario ejecutar comandos seleccionándolos de una lista de opciones. Las opcionesdisponibles pueden seleccionarse usando el ratón o el teclado. El uso de menús acelera la curva de aprendizaje de unnuevo usuario para entender una aplicación.• La barra de menu es mostrada horizontalmente a lo largo de la parte superior de la ventana. El menú desplegable

es comúnmente asociado con este tipo de menús. Cuando el usuario hace click sobre la opción el menúdesplegable aparece.

• La barra de herramientas es un tipo de menú que muestra mayormente iconos en vez de texto.• El menú tiene un titulo visible dentro de la barra de menú. Su contenido solo es mostrado cuando el usuario lo

selecciona con un click. El usuario puede seleccionar los elementos dentro del menú desplegable. Normalmente,cuando el usuario hace click en cualquier otra parte del contenido el menu desaparece.

• El menú contextual es invisible hasta que el usuario hace click derecho sobre el objeto, o al mover el cursor sobre el objeto y presionar la tecla de menú contextual del teclado, entonces el menú contextual aparecerá cerca

Page 23: Manual_Basico_de_Gambas español

Gambas/Elementos de la GUI 21

del cursor.• Los extras son elementos individuales dentro o al lado de un menú.• Un icono es una pequeña imagen que representa objetos como archivos, programas, paginas web, o comandos.

Estos son una manera rápida de ejecutar comandos, abrir documentos, ejecutar programas, etc. Los iconos estándiseñados de tal manera que no se requiera mayor explicación para entender que significa la pequeña imagen.

Controles de entradaControls or widgets are the interface elements the user interacts with. In Gambas you’ll find the following inputcomponents:• Form and window. By now, you are familiar with the concept of window and form.• Mouse cursor. You are also familiar with this concept.• Text box and. It is a box-like representation in which you can enter text or numbers. Gambas offers the value box

control that only allows numerical entries• Date chooser. It is a window that shows a calendar and let the user select a date.• Text box area. It is just like the text box, differs only in that the text box area allows multiple lines of text.• Slider. It is a bar with an indicator that allows the user to set a value by dragging the indicator or by clicking on a

point on the bar.• Spinner or spin box. Commonly it is a a vertical bar with and up & down arrow buttons that the user use to adjust

the value in the adjoining text box. The value can be increased or decreased depending on what button is beingclicked.

• Button. It is a button-like picture you can push it by clicking over it.• Combo box or drop-down list. A list of items from which to select. The list only displays items when the indicator

is clicked.• List box. A list of items from which to select one or more. The difference with the drop-down list is that the list

box uses multiple lines and allows multiple selections.• Tree view. This control presents a hierarchical view of information. Each item or node can have one or more

sub-items that can be expanded to shown more contained sub-items, and collapsed to hide them.• Check box. A box which indicates a true or false state via a check mark. In Gambas you’ll find also the toggle

button.• Radio button. It is a button, similar to the check box, except that only one item in a group can be selected.

Selecting a new item from the set of options also deselects the previously selected button.• Data grid or grid view. It is a spreadsheet-like grid that shows or allows numbers or text to be entered in rows and

columns. In Gambas there is more than one control of this data-oriented type: column view, grid view, table view,data source and data view.

Controles de salidaEn una lista separada estan los controles de salida que no tienen interactividad alguna:• Label o text label. Esta función despliega algún texto en el formulario.• Tool tip. Funciona en conjuto con el cursor del raton, cuando el usuario posa el cursor sobre un elemento, sin

hacer click sobre el, un pequeño recuadro aparece con información suplementario sobre el objeto.• Progress bar. Es un control tipo barra que despliega el progreso de una tarea como cuando descargas un archivo

en tu navegador de internet.

Page 24: Manual_Basico_de_Gambas español

Gambas/Elementos de la GUI 22

ContenedoresGetting controls on a form is the easy part. Arranging them so that they create an intuitive and attractive interface isthe real challenge. Interface possibilities are nearly endless, so I can't tell you how to design any given interface.There are controls that contains other controls called containers that makes possible to optimize the ‘space’ (if suchword is applicable to the GUI design world) of the form. Gambas provides a rich collection of containers, even youcan see some of these in the Gambas IDE in self. HBox. It is a horizontal container box that organizes its childcontrols into a single row. VBox. It is vertical container, that arranges its child widgets into a single column. HPanel.It is a container that arranges its child components from top to bottom, and then left to right. VPanel. It is a containerthat arranges its children from left to right, and then top to bottom HSplit. It is a horizontal splitter that lays out itschild widgets horizontally, and allows the user to resize them by dragging the boundary between them. VSplit. It is avertical splitter that lays out its children vertically, and that allows the user to resize them by dragging the boundarybetween them. Panel. It is a container with a changeable border that allows you to organizes related componentsunder the same area. Frame. It is a container with an etched border and a label that allows you arrange relatedcontrols under the same description and area. Tab strip. It is a multi-container with a rectangular small box whichcontains a text label or graphical icon associated with a view pane. When activated the view pane displays thecontrols associated to that tab; groups of tabs allow the user to switch quickly between different widgets. Scrollview. It is a rectangular container that allows scroll its contents displaying automatically scroll bars when some of itschildren controls are not fully visible. Expander. It is a container that can shrink to hide its contents or expand toshow them. Side panel. It is a container that can be hidden or resized. This container should be put on one side of itsparent. Tool panel. It is a tool box container with multiple scrollable vertical toolbar panels Wizard. It is amulti-container that provides a wizard-like functionality.

Actually, there are no stone-written rules about GUI design but there are some guidelines thatprobably you may want to become familiar with. For KDE visit http:/ / developer. kde. org/documentation/ design/ ui/ , and for GNOME go to http:/ / library. gnome. org/ devel/ hig-book/stable/ '''

Controles personalizadosThere are other controls that are not included on the Gambas toolbox, but they can be easily created using acombination of controls: Actually, many of the GUI components already described are indeed combination of othercontrols.• Status bar. It is a control usually located at the bottom of windows to display information about the current status

of the window or the application. Yyou see this control on web browsers and office software suites. You can buildthis control using panel containers, text labels, progress bars and other output controls.

• Info bar. It is a control mostly used on the web browser Firefox & Internet Explorer to display non-criticalinformation to the user. Since info bar allows the user read extra information on their own time without interruptany activity of the user, is being adopted increasingly instead of the info dialog boxes that you know also as infomessage boxes here in Gambas. By using panel containers, picture boxes, text labels and buttons.

• Apple Balloon help. This control display the help text in ‘balloons’, like those used on the comic books to showthe dialogs and works pretty much like the tooltips but oriented to provide help to the user.

• Microsoft Office 2007 Ribbon. Ribbons are part of the recently introduced fluent user interface of Microsoft andreplaces menus, tool bars and other task panes with contextual tabs and galleries. Sounds more fancy andcomplicated than what really is, actually it is a menu bar of a group of tabs that contains tool boxes and pull-downtool boxes called galleries.

• Tabbed tool bars. It is basically the same as ribbon but they are not intended to replace the menu bar nor toolbarsas the four color logo company claims.

Page 25: Manual_Basico_de_Gambas español

Gambas/Elementos de la GUI 23

Obviamente, tu puedes crear tus propios controles basados en otros ya existentes.Existen algunas consideraciones legales que tal vez quieras investigar antes de utilizar usar elcontrol Ribbon en tus aplicaciones.

Gambas/Diseño de la GUI

Gambas/EventosHasta ahora, has visto lo fácil que es crear aplicaciones con interfase gráfica usando el IDE de Gambas. Has creadoformularios que contienen botones sobres los que se el usuario puede hacer click, cajas de dialogo para teclearinformación, cajas para desplegar imagenes, y algunas otros componentes con los que el usuario puede interactuar.Sin embargo, este es solo el primer paso para crear aplicaciones en Gambas. Además de esto, debes proveer algunafuncionalidad a tus programas para realizar acciones en respuesta a como el usuario interactúa con tu aplicación ycomo el sistema operativo interactúa con tu programa. Esta tarea se consigue usando eventos. En seccionesanteriores, aprendiste acerca de los objetos y sus miembros: propiedades y métodos. En esta sección, aprenderásacerca de los eventos de los objetos y programación dirigida por eventos. El uso de objetos te permitirá haceraplicaciones útiles y responsivas.

Programación dirigida por eventosGambas permite el modelo de programación dirigida por eventos, de hecho los mas modernos lenguajes deprogramación lo permiten. Esto significa que no hay un orden predeterminado en que los eventos ocurrirán, yfrecuentemente, es el usuario quien tiene completo control sobre que parte del código se ejecutara mediante activarinteractivamente eventos específicos, como hacer click sobre un boton o cerrar una ventana. Un evento, junto con elcodigo que contienen, es llamado "procedimiento del evento".

En la jerga de QT, los eventos son llamados slots

En secciones anteriores, aprendiste que un método es una función de un objeto. Los eventos son tiposespeciales de métodos; los cuales son la manera como los objetos para señalar cambios de estado quepueden ser útiles a clientes de tales objetos. Los eventos son metodos que pueden ser llamados cuando

los usuarios interactúan con algo en el formulario GUI o por el sistema operativo mismo, en vez de ser llamadosdesde el codigo que tu escribes.

Page 26: Manual_Basico_de_Gambas español

Gambas/Manejo de Errores 24

Gambas/Manejo de Errores• DEBUG Imprime un mensaje de depuración.• FINALLY Ejecuta un bloque de código en una función, incluso si se produjo un error.• CATCH Atrapa un error en una función.• Error La clase estática Error.• TRY Trata de ejecutar una instrucción sin levantar un error.• ERROR Regresa TRUE si un error ha ocurrido, se usa justo después de TRY para saber si la instruccion ejecutada

fallo.

TRY – ERROR – CATCH – FINALLY trabajando juntos'Prints a file to the screen

SUB PrintFile(FileName AS STRING)

DIM hFile AS File

DIM sLig AS STRING

OPEN FileName FOR READ AS #hFile

WHILE NOT EOF(hFile)

LINE INPUT #hFile, sLig

PRINT sLig

WEND

FINALLY 'Always executed, even if a error is raised

CLOSE #hFile

CATCH 'Executed only if there is an error

PRINT "Cannot print file "; FileName

END

Enfoque proactivo a los errores (anticiparse a los errores)Siempre es una buena idea, anticiparse a los errores

Page 27: Manual_Basico_de_Gambas español

Gambas/Administración de procesos 25

Gambas/Administración de procesos

Gambas/Invocar Funciones Externas

Declarar la función externa• Nombrarla• Uso de Alias

Gambas/Manipular documentos XMLSegun la W3C: "XML es un simple y muy flexible formato de texto derivado de SGML (ISO 8879). Originalmentediseñado para cumplir los retos de gran escala de publicación electrónica. XML también juega un rol de crecienteimportancia en el intercambio de una gran variedad de datos en internet y otros lugares" Y no estan exagerando.Por ejemplo, el formato XHTML usado en internet es una aplicación de XML, y puedes encontrar aplicaciones deXML en casi cualquier intercambio de datos. En estos días, XML es una parte esencial del repertorio de unprogramador completo. Gambas provee casi todo lo que necesitas para trabajar con XML.

Es importante aclarar que XHTML es un documento tipo XML pero no son lo mismo. XHTMLesta limitado a paginas de internet como su formato estándar. Sin embargo, XML es un formatode propósito general y puede ser usado para trabajar con cualquier tipo de datos

Basic structure of an XML documentAll XML documents begin with

<?xml version=”1.0” encoding=”UTF-16”?>

indicating that the rest of the document contains XML data, specifies which version is being used and Unicodecharacters in it. In version 1.0 you can omit the XML declaration, but version 1.1 is mandatory. The XMLdeclaration is followed by an element 'root' that can contain any number of sub-elements between their start and endtag. Elements can contain attributes, and attribute names can only appear only once in an element. Elements must beproperly nested, should not overlap, and therefore must be closed in the opposite order as they were open. Commentsbegin with a <! - And End up with ->. With this in mind, take a look at the following'well-formed XML document.

<?xml version=”1.1” encoding=”UTF-16” ?>< !-- The line above is the XML declaration -- >

< !-- This line and the preceding are comments -- >

<root>

<element_name attribute_name = "attribute_value">

Element content

</element_name>

</root>

As you can see, the document is separated into different lines and there is some indentation to indicate the variouslevels of nesting, however this is not necessary, any document can go in a single line of text. This formatted this way

Page 28: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 26

to help you understand the document. You will find very useful this way to format XML documents when you needto read or edit an XML document into a plain text editor.

Writing XMLYou’ll write a program that must create the following XML document based on one of the classes you were workingon back in the Objects lesson.

<?xml version=”1.0” encoding=”UTF-16” ?><characters serie=”Heroes”> <heroe id=”1” name=”Claire Bennet”> <name>Claire Bennet</name>

<played_by>Hayden Panettiere</played_by>

<ability>

Rapid cellular regeneration

</ability>

</heroe>

<heroe id=”2” name=”Hiro Nakamura”> <name>Hiro Nakamura</name>

<played_by>Masi Oka</played_by>

<ability>

Space-time manipulation: teleportation & time travel

</ability>

</heroe>

<villain id=”1” name=” Gabriel Sylar”> <name>Gabriel Sylar</name>

<played_by>Zachary Quinto</played_by>

<ability>

Understand how things work and multiple other abilities acquired

</ability>

</villain>

</characters>

Start a new command-line application named WriteXML, just make sure to check the XML/XSLT programmingoption on the New Project – Project Type window. By doing this, you let Gambas know the gb.xml and gb.xml.xsltneed to be included as components of the project. Or if you forgot to select the XML/XSLT option you can include itby selecting the gb.xml component on Project\Properties…\Components. Then you’ll create on the MMain functiona XmlWriter object that will be opened to write and saved on your home directory as Heroes.xml and will begenerated with the helpful indentation we discussed earlier.

Dim writer as XmlWriter

writer = NEW XmlWriter

writer.Open(User.Home & “/Heroes.xml”, TRUE)writer.Comment(“Heroes Characters”) ‘Following code goes herewriter.EndDocument()

The file opened with Open is not actually written to the user home folder until the EndDocument method is called.This method, also add any end-tag missing in order to insure compliance with the XML guidelines. The root elementis character, and to indicate Gambas this you’ll write the following code inside the Open and EndDocument lines:

Page 29: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 27

writer.StartElement(“characters”) writer.Attribute(“serie”, “Heroes”) ‘Elements code will replace this comment linewriter.EndElement ‘characters

The Oracle used to say “everything that has a beginning has an end” and here for XML is absolutely true. That iswhy you wrote the EndElement method right after its corresponding StartElement. It is a good practice to do thisevery time you write an open statement that needs to be closed lately, especially to avoid debug headaches. Insidethe StartElement and EndElement methods, you’ll write the first heroe element.

writer.StartElement(“heroe”) writer.Attribute(“id”, “1”) writer.Attribute(“name”, “Claire Bennet”) writer.StartElement(“name”) writer.Text(“Claire Bennet”) writer.EndElement ‘name writer.StartElement(“played_by”) writer.Text(“Hayden Panettiere”) writer.EndElement ‘played_by writer.StartElement(“ability”) writer.Text(“Rapid cellular regeneration”) writer.EndElement ‘abilitywriter.EndElement ‘heroe 1

Right after you’ll write the code for the second heroe element with some shortcuts that you’ll love.

writer.StartElement(“heroe”, [“id”, “2”, “name”, “Hiro Nakamura”]) writer.Element(“name”, “Hiro Nakamura”) writer.Element(“played_by”, “Masi Oka”) writer.Element(“ability”, “Space-time manipulation: teleportation & time travel”)writer.EndElement ‘heroe 2

Run the application and open the Heroes.xml file with a plain text editor or with the web browser to see the resultingXML document.

Leer XMLThe easiest way to read a XML document is using the XmlReader class that allow to navigate thru the document bymoving forward a pull parser over each node; and allow know the name, type and value of each node. The way itworks is inside a loop and repeatedly call the Read() method to retrieve the parsing events; then the parser descentrecursively to reflect the structure of the XML document being parsed. Now, you’ll create an application to read theXML file you just created and with the info contained on it populate a Tree View control. You’ll start a newgraphical application project called ReadXML and create the following controls with their settings. Don’t forget toinclude the gb.xml component. Widget Property Setting TreeView1Button1 Text “Populate Tree” When the user clicks on the Populate Tree button, the content on the Heroes.xml filewill fill TreeView1. In order to accomplish this, you’ll add some following code to the Click() event of Button1.First, you need to create a new instance of a XmlReader object, then you’ll try to open the .xml file, if the file can’tbe opened a error message will be displayed.

DIM reader AS XmlReader

reader = NEW XmlReader

Page 30: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 28

TRY reader.Open(User.home & "/Heroes.xml")

IF ERROR THEN

Message.Error("Error when trying to open the Heroes.XML file!")

RETURN

ENDIF

Please consider that you can proactively check if the file exists prior to attempt to open it by using the Exist function.Then you need to declare the loop where the pull parser will work. For each loop iteration you’ll call the methodRead() that locate the parser on the next node on the XML file. During this process an error can occur, because ofthis you need to handle any potential error. Also, before to perform any other task we need to verify if the parserreached the end of file has reached in order to exit the loop; and just before exit the procedure you need to close theXML document.

DO WHILE TRUE

TRY reader.Read()

IF reader.Eof THEN BREAK

‘The rest of the code goes here

LOOP

reader.Close()

You can anticipate potential errors if you perform some validation on the .xml file just to be sure that the file you areattempting to open actually contains the type of data you expect. If you remember, we discuss some paragraphs agothat the pull parser descent recursively through the XML structure. In order to do this, the application needs to makesome decisions based on the name of the Element. If the element “characters” contains an attribute called “series”you’ll add the first item to the Tree view.

SELECT CASE reader.Node.Name

CASE "characters"

FOR EACH reader.Node.Attributes

IF reader.Node.Name = "series" THEN

TRY TreeView1.Add(reader.Node.Value, "Characters of the TV Series: " & reader.Node.Value, NULL, NULL)

PRINT "Characters of the TV Series: " & reader.Node.Value

ENDIF

NEXT

‘Here goes the next block of code

END SELECT

In order to fill properly the Tree view widget, you’re going to need to declare some variables that are going to helpyou to keep track of the attributes id and name of each element heroe.

DIM iNode AS String

DIM iName AS String

If an element “heroe” or “villain” is found you need to insert the parent item on TreeView1; store the values of theparent item to use them later to insert the sub-elements to the Tree view and move to the next node.

CASE "heroe", "villain"

FOR EACH reader.Node.Attributes

IF reader.Node.Name = "id" THEN iNode = reader.Node.Value

IF reader.Node.Name = "name" THEN iName = reader.Node.Value

Page 31: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 29

NEXT

IF iNode <> "" AND iName <> "" THEN

TRY TreeView1.Add(iNode, iNode & " - " & iName)

PRINT iNode & " - " & iName

ENDIF

TRY reader.Read()

IF ERROR THEN RETURN

Then the parser must continue looping inside the next nested elements, in this case the elements name, played_byand ability, and add them under the parent item on TreeView1

DO WHILE TRUE

IF reader.Node.Type = XmlReaderNodeType.Element THEN

SELECT CASE reader.Node.Name

CASE "name"

TRY reader.Read()

TRY TreeView1.Add(iNode & "-n", "Name: " & reader.Node.Value, NULL, iNode)

PRINT " Name: " & reader.Node.Value

CASE "played_by"

TRY reader.Read()

TRY TreeView1.Add(iNode & "-p", "Played by: " & reader.Node.Value, NULL, iNode)

PRINT " Played by: " & reader.Node.Value

CASE "ability"

TRY reader.Read()

TRY TreeView1.Add(iNode & "-a", "Ability: " & reader.Node.Value, NULL, iNode)

PRINT " Ability: " & reader.Node.Value

END SELECT

After this, the parser must be moved to the next node, and if the end of the element has been reached move to thenext node.

TRY reader.Read()

IF ERROR THEN BREAK

ELSE

IF reader.Node.Type = XmlReaderNodeType.EndElement THEN BREAK

ENDIF

TRY reader.Read()

IF ERROR THEN BREAK

LOOP

ReadXML must look like this.

Page 32: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 30

If the previous example still kind of confusing probably you must try to understand first how the Read() parsermoves over the XML structure. Add a new button, and include the following code and compare the output on theconsole against the content of the XML file.

DIM reader AS XmlReader

reader = NEW XmlReader

TRY reader.Open(User.home & "/Heroes.xml")

IF ERROR THEN

Message.Error("Error when trying to open the Heroes.XML file!")

RETURN

ENDIF

DO WHILE TRUE

TRY reader.Read()

IF reader.Eof THEN BREAK

PRINT “Node: Type=” & reader.Node.Type & “, Name=” & reader.Node.Name & “, Value=” & reader.Node.Value

LOOP

reader.Close()

Usar XSLTXSLT is a language for transforming XML documents into other XML documents. For instance, you can convertany XML into a HTML document or more complex task as create a PDF file. The XSLT template contains all therequired instructions to transform a given XML document into other XML format. You’ll create the following XSLTtemplate to transform Heroes.XML into HTML format. Using a plain text editor write the following XSLT file andsave it on the users home folder as xml2xhtml.XSLT.

Page 33: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 31

<xsl:stylesheet version="2.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

xmlns="http://www.w3.org/1999/xhtml">

<xsl:template match="/">

<html>

<head>

<title>Example of XSL Transformation</title>

<style type="text/css">

table {padding: 2pt; widht:100%;}

th {font-weight: bold; background-color: #cccc99; color: #000000}

tr.odd {background-color: #ffffff; text-align: center}

tr.even {background-color: #f5f5dc; text-align: center}

</style>

</head>

<body>

< h1 >Characters of the series: Heroes< /h1 >

< table >

< tr >

< th >Name< /th >

< th >Played by< /th >

< th >Ability< /th >

< /tr >

<x s l:for-each select="characters/*" >

<xsl:choose>

<xsl:when test="position() mod 2 = 0">

< tr class="even" >

< td ><xsl:value-of select="name" />< /td >

< td ><xsl:value-of select="played_by" />< /td >

< td ><xsl:value-of select="ability" />< /td >

< /tr >

</xsl:when>

<xsl:otherwise>

< tr class="odd" >

< td ><xsl:value-of select="name" />< /td >

< td ><xsl:value-of select="played_by" />< /td >

< td ><xsl:value-of select="ability" />< /td >

< /tr >

</xsl:otherwise>

</xsl:choose>

</xsl:for-each>

< /table >

</body>

</html>

</xsl:template>

</xsl:stylesheet>

Create a new console application with support for XML & XSLT. For Main() function write the following code:

Page 34: Manual_Basico_de_Gambas español

Gambas/Manipular documentos XML 32

DIM docXML AS NEW XmlDocument

DIM docXSLT AS NEW XmlDocument

DIM docXHTML AS NEW XmlDocument

docXML.Open(User.Home & "/Heroes.xml")

docXSLT.Open(User.Home & "/xml2xhtml.xslt")

docXHTML = Xslt.Transform(docXML, docXSLT)

docXHTML.Write(User.Home & "/Heroes.html")

Obviously, you can add any fancy error-handling code you want. Or proactively check if both files (Heroes.xml &xml2xhtml.xslt) exist, or if is enough space on disk to save the resultant XHTML file. Here we’ll focus to understandhow the XSLT template works, because as you just see the code in Gambas is pretty straight forward. Theapplication open the two files Heroes.xml & xml2xhtml.xslt, then calls the Transform() method that perform theconversion to XHTML and finally save the file to the specified location. I’m going to skip all HTML related and theXSL headers. The key element of the XSLT language you used is the for-each loop that will navigate thru all theelements arranged under the root tag characters. Inside the loop, the values of the elements name, played_by &ability are accessed using value-of. There is other item of the XSLT language used in this example: thechoose-when-otherwise. This was used in order to apply some styling to the HTML report created from the XMLdocument. If you need to learn more about XML, why don’t you try [http:/ / www. w3. org/ TR/ xslt20/ [1]]

Referencias[1] http:/ / www. w3. org/ TR/ xslt20/

Gambas/Trabajar con Bases de Datos

Page 35: Manual_Basico_de_Gambas español

Gambas/Scripting con Gambas 33

Gambas/Scripting con GambasGambas recientemente obtuvo soporte para convertirse en un lenguaje para scripting. Los scripts es una forma deprograma que es interpretado en vez de compilado. Los scripts son de hecho archivos de texto plano que soninterpretados una linea a la vez. El scripting te permite desarrollo rapido y comunicar facilmente con programas,incluso si estos no han sido escritos en Gambas.Porque usar scripts El uso de scripts te permite combinar secuencias largas y repetitivas de comandos en un único ysimple comando. También puedes generalizar secuencias de operaciones sobre un grupo de datos, en unprocedimiento que pueda ser aplicado posteriormente a un grupo de datos similar. Incluso, puedes crear nuevoscomandos usando una combinación de comandos, utilerías y programas en maneras que ni sus autores originales sehubieran imaginado. Scripting es muy comun en Linux, si tu eres nuevo en Linux, piensa en los scripts como primosde los archivos de procesamiento por lotes (batch) de MSDOS o Windows.Desde la version 2.9, Gambas también te ofrece otro tipo de scripts, los tipo CGI. Que te permiten crear paginas webcon funcionalidad tipo ASP.

Combinando esta característica con otras herramientas (como MySQL, JavaScript, CSS, etc) sepueden crear paginas altamente interactivas.

Gsb2 - En la consola de Linux• Hola Mundo con Scripting en Gambas

Esta característica es provista por la utilería gbs2, que es un pequeño ejecutable de Gambas que permite vaciarcualquier código de Gambas en un archivo de texto. Antes que nada debes asegurarte que el scripter gbs2 estainstalado en alguna parte de tu sistema. Teclea en la linea de comandos o consola de tu distribución de Linux:

user@PC:~$ which gbs2

/usr/bin/gbs2

user@PC:~$

Despues abre el Editor de Codigo de Gamabs y tu editor de texto favorito. Crea un archivo llamado holamundo.gbsen el directior home. Inserta las siguientes lineas a tu archivo:

En Linux, como tal vez ya sepas, no es necesario agregar una extensión (de 3 o 4 caracteres) alnombre del archivo. Sin embargo, para identificar mas rápidamente tus scripts de Gambas deesta sección te recomiendo agregarle el .gbs

#!/usr/bin/env gbs2

DIM text AS String = "Hola Mundo con Scripting en Gambas"

PRINT text

Cada script de Gambas inicia con la linea

#!/usr/bin/env gbs2

Ahora ejecuta el script en la consola de Linux tecleando el nombre del script.

Page 36: Manual_Basico_de_Gambas español

Gambas/Scripting con Gambas 34

user@PC:~$ holamundo.gbs

Hola Mundo con Scripting en Gambas

user@PC:~$

Si el comando no se ejecuta y en cambio recibes un mensaje de error, intenta ejecutarlo asi gbs2holamundo.gbs

• Ejecutar comandos y aplicaciones

Una de las tareas mas comunes de los scripts es ejecutar otras aplicaciones y comandos del sistema. Elsiguiente script muestra el contenido del directorio actual pero ignorando los owners y los archivos de respaldo.Llama a este archivo ls.gbs.

#!/usr/bin/env gbs2

DIM command AS NEW String[]

command.Add("ls")

command.Add("-B")

command.Add("-g")

PRINT "------ USING EXEC ------"

EXEC command

PRINT "------ USING SHELL ------"

SHELL "ls -B -g"

De hecho, si teclearas directamente en la consola el comando ls -g -B obtendrías el mismo resultado que ejecutandotu script. Ejecuta tu script para que lo constates.Como de seguro ya notaste, puedes declarar todo tipo de variables, incluso arrays; pero no esta limitado a esto,también puedes hacer uso de procedimientos, funciones y casi todos los recursos disponibles en el lenguaje Gambas.• Leer entradas por el usuario

Cuando un script esta siendo ejecutado, frecuentemente es necesario que reciba cierta retroalimentación del usuariopara iniciar alguna tarea o para tomar alguna decision o cualquier otra cosa que deba hacer. Escribe el siguientecódigo en un archivo llamado preguntanombre.gbs.

#!/usr/bin/env gbs2

DIM userInput AS String

PRINT "Por favor, introduce tu nombre:"

INPUT userInput

PRINT "Hey " & userInput &"! Recibí tu respuesta. Yupi!"

Ejecuta el script y veras que pregunta por tu nombre y después que presiones [Enter] aparece un mensaje usando lacadena de caracteres que tecleaste.

user@PC:~$ preguntanombre.gbs

Por favor, introduce tu nombre:

Sergio

Hey Sergio! Recibí tu respuesta. Yupi!

user@PC:~$

• Pasar argumentos al script

Algunas otras veces, desearas recibir la información del usuario desde un inicio como argumentos del script. Esto loconsigues haciendo uso del array Args[] de la clase Application. Escribe el siguiente código en un archivo llamadoargumentos.gbs.

Page 37: Manual_Basico_de_Gambas español

Gambas/Scripting con Gambas 35

#!/usr/bin/env gbs2

PUBLIC SUB Main()

DIM i AS Integer

DIM arg AS String

'Using a FOR-NEXT loop

FOR i = 0 TO Application.Args.Count

PRINT Application.Args[i]

NEXT

'Using a FOR-EACH loop

FOR EACH arg IN Application.Args

Print arg

NEXT

'Using a FOR-NEXT loop

PRINT “\nThis loop starts from 1 not from 0” FOR i = 0 TO Application.Args.Count

PRINT Application.Args[i]

NEXT

END

Hasta el momento, los scripts que habias escrito empezabas sin ninguna declaración del método Main(), pero ahora,para poder acceder a la clase Application necesitas declarar un metodo de inicio. De hecho, es una buena practicasiempre hacer uso del metodo Main() incluso en scripts pequenos. Ejecuta el script.

user@PC:~$ arguments.gbs Estos son argumentos “Este es un solo argumento”

/tmp/gambas.1.../script-cache/5......

Estos

son

argumentos

Este es un solo argumento

/tmp/gambas.1...script-cache/5......

Estos

son

argumentos

Este es un solo argumento

This loop starts from 1 not from 0

Estos

son

argumentos

Este es un solo argumento

user@PC:~$

La primer linea de los argumentos, es decir el elemento 0 del array, no es un argumento pasado por el usuario, sinouna referencia al cache del script. Toma en cuenta esto cuando estés escribiendo tus propios scripts.• Usando componentes de Gambas

Page 38: Manual_Basico_de_Gambas español

Gambas/Scripting con Gambas 36

Para darle mas poder a tus scripts, puedes hacer uso de los componentes incluidos en Gambas. En este caso usaremosel componente gb.xml. En un script llamado escribexml.gbs agrega los siguiente:

#!/usr/bin/env gbs2

USE "gb.xml"

PUBLIC SUB Main()

DIM writer AS XmlWriter

writer = NEW XmlWriter

writer.Open(User.Home & "/Heroes.xml", TRUE)

writer.Comment("Heroes Characters")

writer.StartElement("characters")

writer.Attribute("series", "Heroes")

writer.StartElement("heroe")

writer.Attribute("id", "1")

writer.Attribute("name", "Claire Bennet")

writer.StartElement("name")

writer.Text("Claire Bennet")

writer.EndElement 'name

writer.StartElement("played_by")

writer.Text("Hayden Panettiere")

writer.EndElement 'played_by

writer.StartElement("ability")

writer.Text("Rapid cellular regeneration")

writer.EndElement 'ability

writer.EndElement 'heroe

writer.StartElement("heroe", ["id", "2", "name", "Hiro Nakamura"])

writer.Element("name", "Hiro Nakamura")

writer.Element("played_by", "Masi Oka")

writer.Element("ability", "Space-time manipulation: teleportation & time travel")

writer.EndElement 'heroe

writer.StartElement("villain", ["id", "3", "name", "Gabriel Sylar"])

writer.Element("name", "Gabriel Sylar")

writer.Element("played_by", "Zachary Quinto")

writer.Element("ability", "Understand how things work and multiple other abilities acquired")

writer.EndElement 'villain

writer.EndElement 'character

PRINT writer.EndDocument()

END

Ejecutalo y debiera crearte un archivo XML llamado Heroes.xml con el siguiente contenido:

Page 39: Manual_Basico_de_Gambas español

Gambas/Scripting con Gambas 37

<?xml version="1.0"?>

<characters series="Heroes">

<heroe id="1" name="Claire Bennet">

<name>Claire Bennet</name>

<played_by>Hayden Panettiere</played_by>

<ability>Rapid cellular regeneration</ability>

</heroe>

<heroe id="2" name="Hiro Nakamura">

<name>Hiro Nakamura</name>

<played_by>Masi Oka</played_by>

<ability>Space-time manipulation: teleportation & time travel</ability>

</heroe>

<villain id="3" name="Gabriel Sylar">

<name>Gabriel Sylar</name>

<played_by>Zachary Quinto</played_by>

<ability>Understand how things work and multiple other abilities acquired</ability>

</villain>

</characters>

Gsw - En CGI WebLa funcionalidad es provista por gbw2, que en realidad es un link simbolico a gbs2. Cuando gbs2 detecta que esejecutado desde gbw2, sabe que tienen que procesar una pagina de servidor y no un script. Después, gbs2 transformala pagina de servidor aun script normal y luego lo ejecuta.

#!/usr/bin/env gbw2

<%

DIM sEnv AS String

%>

<html>

< h2 >CGI script environmental variables< /h2 >

< table border="1" cellspacing="0" cellpadding="2" >

< tr >

< th align="left">Name< /th >

< th align="left">Value< /th >

< /tr >

<% FOR EACH sEnv IN Application.Env %>

< tr valign="top" >

< td ><%= sEnv %>< /td >

< td ><%= Application.Env[sEnv] %> < /td >

< /tr >

<% NEXT %>

< /table >

</html>

Ejemplo tomado de [http:/ / gambasdoc. org/ help/ doc/ serverpage [1]]

Page 40: Manual_Basico_de_Gambas español

Gambas/Scripting con Gambas 38

Referencias[1] http:/ / gambasdoc. org/ help/ doc/ serverpage

Gambas/Networking con Gambas

Gambas/Traducir tus proyectos

Gambas/Referencia RápidaNota: Falta traducir algunas partes al español

Data Types• Boolean True or false• Byte 0 to 255• Short -32.768 to +32.767• Integer -2.147.483.648 to +2.147.483.647• Long -9.223.372.036.854.775.808 to +9.223.372.036.854.775.807• Single Like the float datatype in C.• Float Like the double datatype in C.• Date Date and time, each stored in an integer.• String A variable length string of characters.• Variant Any datatype.• Object Anonymous reference to any object.• Pointer A memory address.

Comments 'All comments start with an apostrophe

Variable Declaration[STATIC] {PUBLIC|PRIVATE} Identifier [Static array declaration] AS Datatype [=Expression]

STATIC PUBLIC GridX AS Integer

STATIC PRIVATE bGrid AS Boolean

PUBLIC Name AS String

PRIVATE Control AS Object

PRIVATE Languages AS String[] = [ "fr", "it", "es", "de", "ja" ]

PRIVATE DefaultLanguage AS String = Languages[1]

'All DIM declarations must be in the FUNCTION or SUB before the first executable command.

DIM fTimeDiff2 AS Float

DIM iTest AS Integer

DIM iK[9] AS Integer 'ik[0] to ik[8]

Page 41: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 39

DIM shX[3,3] AS Short

DIM date1 AS Date

[STATIC] {PUBLIC|PRIVATE} Identifier AS NEW Native Datatype [Array dimensions...]

PUBLIC CONST WORD_MAX AS Integer = 12

PRIVATE Words AS NEW String[WORD_MAX * 2]

PUBLIC Matrix AS NEW Float[3, 3]

Class Declaration[STATIC] {PUBLIC|PRIVATE} Identifier AS NEW Class (Arguments...)

STATIC PRIVATE Tasks AS NEW List

PRIVATE MyCollection AS NEW Collection(gb.Text)

Constant Declaration{PUBLIC|PRIVATE} CONST Identifier AS Datatype = Constant value

'Constant datatype can be: Boolean, Integer, Long, Float or String.

PUBLIC CONST MAX_FILE AS Integer = 30

PRIVATE CONST DEBUG AS Boolean = TRUE

PRIVATE CONST MAGIC_HEADER AS String = "# Gambas form file"

AssignmentDestination = Expression

iVal = 1972

Name = "Gambas"

hObject.Property = iVal

cCollection[sKey] = Name

Loop Control StructuresFOR Variable = Expression TO Expression [STEP Expression] ... NEXT 'Counter loop.

FOR iCount = 1 TO 20 STEP 3

PRINT iCount & " ";

NEXT

FOR EACH Variable IN Expression ... NEXT

'Enumeration loop.

FOR EACH Element IN Dict

PRINT Element;

NEXT

DO [WHILE Condition] ... [BREAK|CONTINUE] ... LOOP [UNTIL Condition]

'Infinite loop.

DO WHILE a <= 5

PRINT "Hello World"; a

INC a

Page 42: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 40

LOOP

' The same effect with UNTIL

DO

PRINT "Hello World"; a

INC a

LOOP UNTIL a = 6

REPEAT ... UNTIL Condition

'Loop with an exit test at the end.

REPEAT

PRINT Timer 'The repeat loop is always executed at least once, even if the UNTIL value is initially false.

UNTIL Timer > 10

WHILE Condition ... WEND

'Loop with an exit test at the beginning

WHILE a \<= 10

PRINT "Hello World"; a

INC a

WEND

Test Control Structures & FunctionsValue = Choose (Choice, Result1, Result2 [, ... ])

X = 3

PRINT Choose(X, "one", "two", "three", "four") 'three

PRINT IsNull(Choose(X * 2, "one", "two", "three", "four")) 'True

Value = IIf (bTest AS Boolean , vTrue , vFalse) Value = If (bTest AS Boolean , vTrue , vFalse)

PRINT If((X MOD 2) = 0, "even", "odd")

PRINT "You have " & X & " message" & If(X <> 1, "s", "") & " waiting."

IF Expression [{AND IF|OR IF} Expression ...] [THEN] ... [ELSE IF Expression [{AND IF|OR IF} Expression ...][THEN] ...] [ELSE ...] ENDIF

FOR k = 1 TO 10

IF k < 5 OR IF k > 5 THEN

PRINT k;;

ELSE

PRINT "5 has been reached!"

END IF

NEXT

SELECT [CASE] Expression [CASE Expression [TO Expression2] [, ... ] ...] [CASE Expression [TO Expression2] [,... ] ...] [{CASE ELSE|DEFAULT} ...] END SELECT

SELECT CASE w

CASE 1

a = a + 1

CASE 2

Page 43: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 41

b = b + 1

CASE 3

c = c + 1

CASE 4

d = d + 1

CASE 5

e = e + 1

CASE 6

f = f + 1

CASE ELSE

PRINT "This is impossible!"

END SELECT

OperatorsArithmetic Operators

A = Number + Number 'Adds two numbers

A =- Number 'Computes the opposite sign of a number. Zero is the

opposite of itself

A = Number – Number 'Subtracts two numbersA = Number * Number 'Multiplies two numbers

A = Number / Number 'Divides two numbers. A Division By Zero (#26)

error will occur if the value of the number to the right of the slash

is zero

A = Number ^ Power 'Raises Number to the power Power.

A = Number \ Number

A = Number DIV Number 'Computes the quotient of the two Integer

numbers, truncating the result. A Division By Zero (#26) error will

occur if the value of the number to the right of the backslash is zero

A = Number MOD Number 'Computes the remainder of the quotient of the

two numbers. A Division By Zero (#26) error will occur if the value of

the number to the right of the operator MOD is zero

Comparison Operators

Number = Number 'Returns TRUE if two numbers are equal

Number <> Number 'Returns TRUE if two numbers are different

Number1 < Number2 'Returns TRUE if Number1 is strictly lower than Number2

Number1 > Number2 'Returns TRUE if Number1 is strictly greater than Number2

Number1 <= Number2 'Returns TRUE if Number1 is lower or equal than Number2

Number1 >= Number2 'Returns TRUE if Number1 is greater or equal than Number2

'If the result of a Comparison is assigned to an integer variable, then the result is either -1 (True) or 0 (False)

Assignment Operators

Variable = Expression 'Direct assignment

Variable += Expression 'Assignment with addition. This is a synonymous for Variable = Variable + Expression

Variable -= Expression 'Assignment with substraction. This is a synonymous for Variable = Variable - Expression

Variable *= Expression 'Assignment with multiplication. This is a synonymous for Variable = Variable * Expression

Page 44: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 42

Variable /= Expression 'Assignment with division. This is a synonymous for Variable = Variable / Expression

Variable \= Expression 'Assignment with integer division.This is a synonymous for Variable = Variable \ Expression

Variable &= Expression 'Assignment with string concatenation. This is a synonymous for Variable = Variable & Expression

Variable &/= Expression 'Assignment with path concatenation. This is a synonymous for Variable = Variable &/ Expression

Method DeclarationProcedures

[STATIC] {PUBLICSUB} Identifier ( BYREF] Parameter AS Datatype [, ... [,] [OPTIONAL [BYREF] OptionalParameter AS Datatype [, ... [,] [...] ) ... END

PUBLIC SUB Button1_Click()

PRINT Calc(0);; Calc(0.5);; Calc(1)

END

Functions

[STATIC] {PUBLICPROCEDURE|SUB} Identifier ( BYREF] Parameter AS Datatype [, ... [,] [OPTIONAL[BYREF] Optional Parameter AS Datatype [, ... [,] [...] ) AS Datatype ... RETURN Value 'In Gambas the RETURNvalue is passed as a parameter to the RETURN statement. In VB the RETURN value is assigned to the FUNCTIONname: Solve1 = TRUE END

FUNCTION Calc(fX AS Float) AS Float

RETURN Sin(fX) * Exp(- fX)

END

Error Management• DEBUG Prints a debugging message.• FINALLY Executes a block of code in a function, even if there was an error.• CATCH Catches an error in a function.• Error The Error static class.• TRY Tries to execute a statement, without raising an error.• ERROR Returns if an error happened, or prints an error message. Returns TRUE if an error has happened. Use it

just after a TRY instruction to know if the executed instructions failed.

'Prints a file to the screen

SUB PrintFile(FileName AS STRING)

DIM hFile AS File

DIM sLig AS STRING

OPEN FileName FOR READ AS #hFile

WHILE NOT EOF(hFile)

LINE INPUT #hFile, sLig

PRINT sLig

WEND

FINALLY 'Always executed, even if a error is raised

CLOSE #hFile

CATCH 'Executed only if there is an error

PRINT "Cannot print file "; FileName

END

Page 45: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 43

FunctionsString Functions

• Asc Returns the ASCII code of a character in a string.• Chr$ Returns a character from its ASCII code.• Comp Compares two strings.• InStr Searches a string into another string.• LCase$ Converts a string to lowercase.• Left$ Returns the first characters of a string.• Len Returns the length of a string.• LTrim$ Strips white spaces from the left of a string.• Mid$ Returns a part of a string.• Replace$ Replaces in a string a substring by another one.• Right$ Returns the last characters of a string.• RInStr Searches a string into another string from its right.• RTrim$ Strips white spaces from the right of a string.• Scan Splits a string against a regular expression pattern.• Space$ Returns a string containing only space.• Split Splits a string into substrings.• String$ Returns the same string concatenated many times.• Subst$ Substitutes strings in a pattern.• Trim$ Strips white spaces from a string.• UCase$ Converts a string to uppercase.Stream & Input/Output functions

• CLOSE Closes a stream• Eof Returns if the end of file is reached.• ERROR Prints expressions to the error standard output.• ERROR TO Redirects the standard error output.• FLUSH Flushes the output of a buffered stream.• INPUT Reads strings from a text stream and converts them into values.• INPUT FROM Redirects the standard input.• LINE INPUT Reads lines from a text stream.• LOCK Locks an opened stream.• Lof Returns the length of a stream.• OPEN Opens a file for reading or writing and creates a stream for it.• OUTPUT TO Redirects the standard output.• PIPE Opens a named pipe for reading or writing and creates a stream for it.• PRINT Prints expressions to a stream.• READ Reads binary data from a stream.• SEEK Change the position of the stream file pointer.• Seek Gets the position of the stream file pointer.• UNLOCK Unlocks an opened stream.• WRITE Write binary data to a stream.File & Directory Functions

• Access Tests the access authorization of a file.• COPY Copy a file.• DFree Returns the free space on a device.

Page 46: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 44

• Dir Browses a directory.• Exist Checks if a specific file or directory exists.• IsDir Returns if a path points at a directory.• KILL Removes a file.• LINK Creates a symbolic link.• MKDIR Creates a directory.• MOVE Renames or moves a file or a directory.• RDir Browses a directory recursively.• RMDIR Removes an empty directory.• Stat Get information about a file.• Temp$ Makes temporary file names.Arithmetical Functions

• Abs Returns the absolute value of a number.• DEC Decrements a variable.• Fix Returns the integer part of a number.• Frac Returns the fractional part of a number.• INC Increments a variable.• Int Returns the mathematical integer part of a number.• Max Returns the maximum number.• Min Returns the minimum number.• Round Rounds a number.• Sgn Returns the sign of a number.Logarithms & Exponentials Functions

• Cbr Cubic root• Exp Exponential, e^x• Exp2 2^x• Exp10 10^x• Expm Exp(x) - 1• Log Neperian logarithm, base e logarithm• Log2 Base 2 logarithm• Log10 Decimal logarithm• Logp Log(1+x)• Sqr Square rootTrigonometric Functions

• ACos Computes the arc cosine of an angle.• ACosh Computes the hyperbolic arc cosine of an angle.• Ang Computes the angle polar coordinate from two rectangular coordinates.• ASin Computes the arc sine of an angle.• ASinh Computes the hybperbolic arc sine of an angle.• ATan Computes the arc tangent of an angle.• ATan2 Computes the arc tangent of two numbers.• ATanh Computes the hyperbolic arc tangent of an angle.• Cos Computes the cosine of an angle.• Cosh Computes the hyperbolic cosine of an angle.• Deg Converts radians to degrees.• Hyp Calculate the hypotenuse of a triangle.

Page 47: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 45

• Mag Computes the distance polar coordinate from two rectangular coordinates.• Pi Returns π or a multiple of π.• Sin Computes the sine of an angle.• Sinh Computes the hyperbolic sine of an angle.• Tan Computes the tangent of an angle.• Tanh Computes the hyperbolic tangent of an angle.• Rad Converts degrees to radians.Random Numbers Functions

• RANDOMIZE Initializes the pseudo-random number generator.• Rnd Returns a pseudo-random number.Date & Time Functions

• Date Returns a date without its time component.• DateAdd Adds a period to a given date.• DateDiff Returns the period between two dates.• Day Returns the day of a Date value.• Hour Returns the hours of a Date value.• Minute Returns the minutes of a Date value.• Month Returns the month of a Date value.• Now Returns the current date and time.• Second Returns the seconds of a Date value.• Time Returns the time part of a Date value.• Timer Returns the number of elapsed seconds since the program started.• Week Returns the week number of a Date value.• WeekDay Returns the week day of a Date value.• Year Returns the year of a Date value.Datatype Functions

• IsBoolean Returns if an expression is a Boolean value.• IsByte Returns if an expression is a Byte value.• IsDate Returns if an expression is a Date value.• IsFloat Returns if an expression is a Float value.• IsInteger Returns if an expression is an Integer value.• IsLong Returns if an expression is a Long value.• IsNull Returns if an expression is NULL.• IsNumber Returns if an expression is a number.• IsObject Returns if an expression is an Object value.• IsShort Returns if an expression is a Short value.• IsSingle Returns if an expression is a Single value.• IsString Returns if an expression is a String value.• TypeOf Returns the type of the value of an expression.Character Test Functions

• IsAscii Tests if a string contains only ASCII characters.• IsBlank Tests if a string contains only blank characters.• IsDigit Tests if a string contains only digits.• IsHexa Tests if a string contains only hexadecimal digits.• IsLCase Tests if a string contains only lowercase letters.• IsLetter Tests if a string contains only letters.

Page 48: Manual_Basico_de_Gambas español

Gambas/Referencia Rápida 46

• IsPunct Tests if a string contains only printable non-alphanumeric characters.• IsSpace Tests if a string contains only space characters.• IsUCase Tests if a string contains only uppercase letters.Localization and Translation Functions

• Format$ Format a number or a date.• Str$ Converts a number or a date into a string.• Subst$ Substitutes strings in a pattern.• Tr$ Translate a string.• Val Converts a string into a number or a date.Formatting functions

• Bin$ Format a number in binary.• Format$ Format a number or a date.• Hex$ Format a number in hexadecimal.Para mas información visita http:/ / gambas. sourceforge. net/ [1]

Referencias[1] http:/ / gambas. sourceforge. net/

Page 49: Manual_Basico_de_Gambas español

Fuentes y contribuyentes del artículo 47

Fuentes y contribuyentes del artículoGambas  Fuente: http://es.wikibooks.org/w/index.php?oldid=160292  Contribuyentes: Iskraelectrica, ManuelGR, Saudi linux, Shernandez, 8 ediciones anónimas

Gambas/Conceptos básicos de programación  Fuente: http://es.wikibooks.org/w/index.php?oldid=156447  Contribuyentes: Jsoto61, Saudi linux, Shernandez, 1 ediciones anónimas

Gambas/Diseño de Aplicaciones con Gambas  Fuente: http://es.wikibooks.org/w/index.php?oldid=138350  Contribuyentes: Jsoto61, Shernandez, 2 ediciones anónimas

Gambas/Estructuras de control de ciclos o bucles  Fuente: http://es.wikibooks.org/w/index.php?oldid=118225  Contribuyentes: Shernandez, 2 ediciones anónimas

Gambas/Estructuras de control y funciones de evaluación de expresiones  Fuente: http://es.wikibooks.org/w/index.php?oldid=162024  Contribuyentes: Shernandez, 6 ediciones anónimas

Gambas/Funciones Internas  Fuente: http://es.wikibooks.org/w/index.php?oldid=118582  Contribuyentes: Shernandez

Gambas/Funciones personalizadas  Fuente: http://es.wikibooks.org/w/index.php?oldid=118228  Contribuyentes: Shernandez, 2 ediciones anónimas

Gambas/Programación Orientada a Objetos  Fuente: http://es.wikibooks.org/w/index.php?oldid=159883  Contribuyentes: Der Künstler, Jsoto61, Shernandez, 2 ediciones anónimas

Gambas/Elementos de la GUI  Fuente: http://es.wikibooks.org/w/index.php?oldid=118586  Contribuyentes: Shernandez

Gambas/Diseño de la GUI  Fuente: http://es.wikibooks.org/w/index.php?oldid=161676  Contribuyentes: Mecamático, Shernandez, 1 ediciones anónimas

Gambas/Eventos  Fuente: http://es.wikibooks.org/w/index.php?oldid=118738  Contribuyentes: Shernandez

Gambas/Manejo de Errores  Fuente: http://es.wikibooks.org/w/index.php?oldid=118759  Contribuyentes: Shernandez

Gambas/Administración de procesos  Fuente: http://es.wikibooks.org/w/index.php?oldid=117818  Contribuyentes: Shernandez

Gambas/Invocar Funciones Externas  Fuente: http://es.wikibooks.org/w/index.php?oldid=117819  Contribuyentes: Shernandez

Gambas/Manipular documentos XML  Fuente: http://es.wikibooks.org/w/index.php?oldid=155909  Contribuyentes: Saudi linux, Shernandez, 2 ediciones anónimas

Gambas/Trabajar con Bases de Datos  Fuente: http://es.wikibooks.org/w/index.php?oldid=161032  Contribuyentes: Mecamático, Shernandez, Taichi, 3 ediciones anónimas

Gambas/Scripting con Gambas  Fuente: http://es.wikibooks.org/w/index.php?oldid=118001  Contribuyentes: Shernandez, 1 ediciones anónimas

Gambas/Networking con Gambas  Fuente: http://es.wikibooks.org/w/index.php?oldid=118757  Contribuyentes: Shernandez

Gambas/Traducir tus proyectos  Fuente: http://es.wikibooks.org/w/index.php?oldid=117848  Contribuyentes: Morza, Shernandez

Gambas/Referencia Rápida  Fuente: http://es.wikibooks.org/w/index.php?oldid=117825  Contribuyentes: Shernandez, 2 ediciones anónimas

Page 50: Manual_Basico_de_Gambas español

Fuentes de imagen, Licencias y contribuyentes 48

Fuentes de imagen, Licencias y contribuyentesImagen:Heckert GNU white.svg  Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:Heckert_GNU_white.svg  Licencia: Free Art License  Contribuyentes: Aurelio A. Heckert<[email protected]>Image:Info.svg  Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:Info.svg  Licencia: Public Domain  Contribuyentes: Bayo, Eduloqui, Helix84, PseudomoiArchivo:ReadXML.png  Fuente: http://es.wikibooks.org/w/index.php?title=Archivo:ReadXML.png  Licencia: desconocido  Contribuyentes: Shernandez

Page 51: Manual_Basico_de_Gambas español

Licencia 49

LicenciaCreative Commons Attribution-Share Alike 3.0 Unportedhttp:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/