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
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
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
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
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
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
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
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
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.
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.
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
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
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
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.
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.
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.
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.
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
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:
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.
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
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
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.
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.
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.
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
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
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:
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
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
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.
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.
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:
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
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.
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.
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
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:
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]]
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]
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
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
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
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
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.
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.
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.
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/
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
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
Licencia 49
LicenciaCreative Commons Attribution-Share Alike 3.0 Unportedhttp:/ / creativecommons. org/ licenses/ by-sa/ 3. 0/
Top Related