4/11/09

INTRODUCCION A GAMBAS

Hablar de Gambas, que difería mucho con respecto a Visual Basic, ahora aclaremos algunas cosas y terminemos de entender este concepto.

La principal diferencia con respecto a Visual Basic 6.0 es el soporte para orientación a objetos. En Gambas, no existen los arrays de controles -muy populares en Visual Basic- pero dispone de un elemento similar llamado group, que utilizado conjuntamente con arrays de objetos ofrecen resultados análogos.

Gambas añade algunas propiedades nuevas en algunos de sus controles, como la alineación vertical/horizontal en etiquetas, o algunas propiedades gráficas en el elemento Button (Equivalente a CommandButton de Visual Basic).

El acceso a bases de datos es sumamente sencillo y potente. Gambas incluye, al igual que Visual Basic, su propio empaquetador para la distribución de aplicaciones, que permite crear incluso paquetes deb. Los componentes suministrados en Gambas 2.0 son realmente potentes, desde una librería para el manejo de documentos pdf, hasta componentes para imágenes, sockets e informes (equivalentes a Crystal reports u otras herramientas gratuitas alternativas).

Gambas es una excelente y potente alternativa a la programación visual ofrecida en Visual Basic para entornos Linux. Su talón de aquiles actualmente es su escasa documentación.





ACONTINUACION UNA LISTA DE EJERCICIOS REALIZADOS EN CLASE CON LINUX


PROGRAMA CEDULA





PUBLIC SUB Main()
DIM num_cedula AS String
PRINT "INGRESE NUMERO DE CEDULA:"
INPUT num_cedula

IF cedula(num_cedula) THEN
PRINT "NUMERO DE CEDULA VALIDO"
ELSE
PRINT "NUMERO DE CEDULA INVALIDO !!!"
ENDIF

END

PUBLIC FUNCTION cedula(valor AS String) AS Boolean
DIM dv, i, a, res, m, aux, aux1, acu, d10, d3 AS Integer
DIM resul AS Boolean
d3 = Mid(valor, 3, 1)
IF d3 < 6 THEN
FOR i = 1 TO 9
a = Mid(valor, i, 1)
m = i MOD 2
IF m = 1 THEN
aux = a * 2
ELSE
aux = a * 1
END IF
IF aux > 9 THEN
aux1 = aux - 9
ELSE
aux1 = aux
END IF
acu = acu + aux1
NEXT
res = acu MOD 10
IF res = 0 THEN
dv = 0
ELSE
dv = 10 - res
END IF
d10 = Mid(valor, 10, 1)
IF dv <> d10 OR valor = 0 OR valor = 2222222222 OR valor = 4444444444 OR valor = 5555555555 THEN
resul = FALSE

ELSE
resul = TRUE
END IF
ELSE
resul = FALSE
END IF
RETURN resul
END FUNCTION



PROGRAMA OBJETOS



Gambas module file
'PROGRAMACION ORIENTADA A OBJETOS EN GAMBAS 2.8
PUBLIC SUB main()
'instancia objetos
DIM mono AS servivo
DIM persona AS Hombre
DIM no AS String



mono = NEW servivo
mono.nacido(CDate("2/2/1992"))
mono.PonerPatas(2)
PRINT "La edad del mono es ....", mono.edad()
PRINT "Las patas del mono son .....", mono.dicePatas()




persona = NEW Hombre
PRINT "Ingrese nombre.."
INPUT no
persona.nacido(CDate("2/18/1969"))
persona.PonerNombre(no)
persona.PonerApellido("Picapiedra")
PRINT "La edad de la persona es ", persona.edad()
PRINT "El nombre completo es...", persona.NombreCompleto()
END


PROGRAMA MAYOR





' Gambas module file

PUBLIC SUB Main()
DIM a, b, c, d, e AS Integer

'a = 10
'b = 20
'e = 50
PRINT "Ingrese primer valor", a
INPUT a
PRINT "Ingrese segundo valor", b
INPUT b
PRINT "Ingrese tercer valor", e
INPUT e

IF a > b AND a > e THEN
PRINT " EL NUMERO MAYOR ES", a

ELSE
IF b > a AND b > e THEN
PRINT "el mayor es", b

ELSE
PRINT "el mayor es ", e

ENDIF
END IF
IF b < a AND b < e THEN
PRINT "el intermedio es", b
ELSE
IF e < a AND e < b THEN
PRINT "el intermdio es", e
ELSE
PRINT " el intermedio es", a
ENDIF
ENDIF

END


PROGRAMA MATRICULAS




' Gambas class file
PUBLIC nom AS String
PUBLIC apell AS String
PUBLIC curso AS String
PUBLIC secc AS String
PUBLIC fechan AS String
PUBLIC parcial1 AS Float
PUBLIC parcial2 AS Float
PUBLIC parcial3 AS Float


PUBLIC FUNCTION imprimirpromedio() AS Float
RETURN ((parcial1 + parcial2 + parcial3) / 3)
END

PUBLIC FUNCTION imprimirfechamatricula() AS Date
RETURN Now()
END


PUBLIC FUNCTION imprimirnombre() AS String
RETURN nom & " " & apell
END


PROGRAMA FUNCIONES




PUBLIC SUB Main()
DIM f, i, l AS Integer
DIM nombre, res AS String
f = 1
FOR i = 2 TO 5
f = f * i
NEXT
PRINT "El factorial de 5 ", f

PRINT "Ingrese un nombre"
INPUT nombre
l = Len(nombre)
FOR i = 1 TO l
res = Mid(nombre, i, 1)
PRINT res
NEXT



END

PROGRAMA CALCULADORA



PUBLIC ban AS Integer
PUBLIC aux1 AS Integer
PUBLIC aux2 AS Integer
PUBLIC valor AS Float
PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()

END

PUBLIC SUB Button5_Click()

visor.Text = visor.Text & "1"

END

PUBLIC SUB Button6_Click()

visor.Text = visor.Text & "2"

END

PUBLIC SUB Button7_Click()

visor.Text = visor.Text & "3"

END

PUBLIC SUB Button8_Click()

visor.Text = visor.Text & "4"

END

PUBLIC SUB Button10_Click()

visor.Text = visor.Text & "5"

END

PUBLIC SUB Button1_Click()

visor.Text = visor.Text & "6"

END

PUBLIC SUB Button2_Click()

visor.Text = visor.Text & "7"

END

PUBLIC SUB Button3_Click()

visor.Text = visor.Text & "8"

END

PUBLIC SUB Button4_Click()

visor.Text = visor.Text & "9"

END

PUBLIC SUB Button9_Click()

visor.Text = visor.Text & "0"

END

PUBLIC SUB Button11_Click()

visor.Text = visor.Text & "."

END

PUBLIC SUB sumar_Click()

ban = 1
IF visor.Text <> 0 THEN
aux1 = visor.Text
ELSE
aux1 = 0
ENDIF
visor.Clear

END

PUBLIC SUB resta_Click()
ban = 2
IF visor.Text <> 0 THEN
aux1 = visor.Text
ELSE
aux1 = 0
ENDIF
visor.Clear


END

PUBLIC SUB multiplicacion_Click()

ban = 3
IF visor.Text <> 0 THEN
aux1 = visor.Text
ELSE
aux1 = 0
ENDIF
visor.Clear

END

PUBLIC SUB division_Click()

ban = 4
IF visor.Text <> 0 THEN
aux1 = visor.Text
ELSE
aux1 = 0
ENDIF
visor.Clear

END

PUBLIC SUB off_Click()
ME.Close


END

PUBLIC SUB limpiar_Click()

visor.Clear

END

PUBLIC SUB igual_Click()

IF visor.Text <> 0 THEN
aux2 = visor.Text
ELSE
aux2 = 0
ENDIF
visor.Text = operaciones(ban, aux1, aux2)

END
PUBLIC FUNCTION operaciones(opera AS Integer, v1 AS Integer, v2 AS Integer) AS Integer
DIM respuesta AS Integer
SELECT CASE opera
CASE 1
respuesta = v1 + v2
CASE 2
respuesta = v1 - v2
CASE 3
respuesta = v1 * v2
CASE 4

IF v2 = 0 THEN
Message("DIVISON PARA CERO IMPOSIBLE")
ELSE
respuesta = v1 / v2
END IF
END SELECT
RETURN respuesta


END



PUBLIC SUB Button17_Click()

visor.Text = Cos(visor.Text)


END

PUBLIC SUB Button16_Click()

visor.Text = Sin(visor.Text)

END

PUBLIC SUB Button21_Click()



END

PUBLIC SUB Button24_Click()

DIM n, i, x1, x2 AS Integer
DIM cadena, cadena2 AS String
n = visor.Text
WHILE n > 0
x1 = (Int(n / 2))
x2 = n MOD 2
cadena = cadena & Str(x2)
n = x1
WEND
FOR i = Len(cadena) TO 1 STEP -1
cadena2 = cadena2 & Mid(cadena, i, 1)
NEXT
visor.Text = cadena2
Message("El resultado es ...", "Aceptar")


END


PROGRAMA TIA


PUBLIC SUB Button25_Click()

DIM n, i, x1, x2 AS Integer
DIM cadena, cadena2 AS String
n = visor.Text
WHILE n > 0
x1 = (Int(n / 2))
x2 = n MOD 2
cadena = cadena & Str(x2)
n = x1
WEND
FOR i = Len(cadena) TO 1 STEP -1
cadena2 = cadena2 & Mid(cadena, i, 1)
NEXT
visor.Text = cadena2
Message("El resultado es ...", "Aceptar")

END

PUBLIC SUB Button18_Click()

visor.Text = Tan(visor.Text)

END

PUBLIC SUB Button12_Click()

visor.Text = visor.Text * visor.Text

END

PUBLIC SUB Button13_Click()

visor.Text = visor.Text * visor.Text * visor.Text

END


PROGRAMA DE ACCESO



PUBLIC c AS Integer
PUBLIC n AS String

PUBLIC SUB TextBox1_Change()

TextBox2.Enabled = TRUE

END

PUBLIC SUB TextBox2_KeyPress()

IF Key.Code = 65293 THEN
IF TextBox1.Text = "" THEN
Message.Info("Ingrese Clave de Usuario...")
TextBox1.SetFocus
ELSE
Button1.Enabled = TRUE
Button2.Enabled = TRUE
Button1.SetFocus
ENDIF
ENDIF

END

PUBLIC SUB Form_Open()

ME.Center
modulo.conectar
' modulo.rs = modulo.cn.Exec("select * from claves")
n = "Administrador"
END

PUBLIC SUB Button1_Click()
DIM ban AS Integer
modulo.rs = modulo.cn.Exec("select * from clave")

DO WHILE modulo.rs.Available
n = modulo.rs["usuarios"]
IF modulo.rs["usuarios"] = Trim(TextBox1.Text) AND modulo.rs["contrasena"] = Trim(TextBox2.Text) THEN
modulo.rs = modulo.cn.Exec("select * from clave where usuarios = '" & Trim(TextBox1.Text) & "'")
Message.Info("Bienvenido al sistema Sr(a). " & n, "Aceptar")
ME.Hide
menuprincipal.Show
ban = 1
ENDIF
modulo.rs.MoveNext()
LOOP
IF ban = 0 THEN
c = c + 1
IF c = 3 THEN
Message.Warning("Lo sentimos, El sistema se cerrar� por seguridad.")
ME.Close
ELSE
limpiar()
TextBox1.SetFocus
Message.Error("Usuario desconocido, intente nuevamente...", "Aceptar")
ENDIF
END IF

END
PUBLIC SUB limpiar()

Button1.Enabled = FALSE
Button2.Enabled = FALSE
TextBox1.Clear
TextBox2.Clear
TextBox2.Enabled = FALSE
TextBox1.SetFocus
END

PUBLIC SUB Button2_Click()



limpiar()



END


PROGRAMA JUEGOS




PUBLIC o AS Integer

PUBLIC SUB Button2_Click()

ME.Close
FMain.Show

END
PUBLIC SUB Button1_Click()

DIM a, b, c AS Integer
RANDOMIZE
a = (Rnd * 9) + 1
b = (Rnd * 8) + 1
c = (Rnd * 8) + 1
TextBox2.Text = a
TextBox4.Text = b
TextBox3.Text = c
IF a = b AND a = c THEN

IF b = a AND b = c THEN
IF c = a AND c = b THEN
Message("Estos son los numeros" & TextBox1.Text & TextBox2.Text & TextBox3.Text)

IF a <> 7 AND b <> 7 AND c <> 7 THEN

Message("Premio Consuelo" & TextBox1.Text & TextBox2.Text & TextBox3.Text)
ENDIF
ENDIF
ENDIF

ENDIF
END


PROGRAMA RELOJ


PUBLIC SUB Timer1_Timer()
DIM h, m, s AS Integer
s = TextBox3.Text
m = TextBox2.Text
h = TextBox1.Text
'WHILE h < 24
IF s < 59 THEN
s = s + 1
ELSE
s = 0
m = m + 1
IF m > 59 THEN
h = h + 1
m = 0
ENDIF
ENDIF
TextBox3.Text = s
TextBox2.Text = m
TextBox1.Text = h
'WEND


END

PUBLIC SUB Button1_Click()

IF Button1.Text = "Iniciar" OR Button1.Text = "Reiniciar" THEN
Timer1.Enabled = TRUE
Button1.Text = "Parar"
ELSE
Timer1.Enabled = FALSE
Button1.Text = "Reiniciar"
ENDIF

END

PUBLIC SUB Button2_Click()

ME.Close
FMain.Show

END

PUBLIC SUB TextBox1_KeyPress()



END

PUBLIC SUB Form_Open()



END