Abrir un Archivo en Gambas

Nuevamente yo por aquí tratando de escribir algo, estuve explorando como abrir archivos en Gambas usando un cuadro de dialogo, en este caso archivos de texto, en el programita que es muy sencillito, tenemos dos botones uno llamado abrir localmente y otro abrir externamente. Cuando le damos click al boton “localmente” entonces el contenido del archivo de texto se pegará al area de texto y si le damos al botón “externamente” entonces se usará el programa por defecto para abrir el archivo, en mi caso es el gedit.

Aquí está el método que hace todo esto que digo:

Public Sub abrir(local As Boolean)

  Dim cadena As String
  Dialog.Title = "Escoger archivo"
  Dialog.Filter = ["*.txt", "Todos los archivos de texto"]
  If Dialog.OpenFile() Then
     Return ' Proceso cancelado por el usuario
  Else
     If local Then
        'Almacenamos en la variable cadena el contenido del archivo de texto
        cadena = File.Load(Dialog.Path)
        txtArchivo.Text = cadena
     Else
        'Abrimos el archivo con el programa predeterminado
        Desktop.Open(Dialog.Path)
     Endif
  Endif

End

Como verán no es la gran cosa pero puede servir de ayuda y me sirve para no perder el ritmo y mantener actualizado el blog.

Descarga el código.

Saludos combativos.

Sisrest

Buenas noches mis estimados, nuevamente les voy a dejar un programita que hice para practicar con las conexiones a bases de datos, en este caso MYSQL, espero que sea de utilidad, lo pueden descargar desde aquí.

Tiene un fichero que dice instrucciones, espero poder hacer un manual y detallar las funcionalidades del programa pero será para mas adelante.

Saludos combativos.

Analizador Lexico

Nuevamente retomando el blog y tratando de darle continuidad aunque creo que va a estar difícil por falta de tiempo, en esta oportunidad voy a dejarles un analizador léxico que hice cuando estaba en la universidad, lo encontré revisando unos archivos viejos y pensé en postearlo por si podía servirle a alguien mas.Está comprimido y viene con un archivo llamado script que es el documento a analizar.

Descarga Analizador

Espero que sea de utilidad y disculpen la poca documentación, luego trataré de profundizar.

Saludos combativos.

Trabajando con Calendarios en Gambas

Debido a que necesitaba contar con un calendario para una aplicacion que estaba desarrollando me lanze a la busqueda a ver que me ofrecia Gambas y me encontre con el control DateChooser.

Su ventana de propiedades es como sigue:

La aplicacion completa es mas o menos asi.

Tengo un boton, una caja de texto y el control DateChooser en el modo de diseño pongo el control DateChooser invisible de tal manera que al lanzar la aplicacion nos aparezca de este modo.

Y cuando le damos click al boton la aplicacion nos muestra lo siguiente:

El código que hace esto es el siguiente:

'El metodo Raise envia el control al frente del contenedor
Calendario.Raise()
'El metodo Show nos muestra el control
Calendario.Show()

Si seleccionamos una fecha del control este lo mostrara en la caja de texto, trabajamos esto en el evento change del DateChooser.

PUBLIC SUB Calendario_Change()

    txtFecha.Text = Calendario.Day & "/" & Calendario.Month & "/" & Calendario.Year
    Calendario.Hide()

END


Bueno yo particularmente no estoy muy conforme con la solucion que he encontrado asi que si alguien me puede ayudar a corregir y mejorar esto se lo agradeceria muchisimo.
Saludos combativos.

Haciendo y Restaurando Backups de Mysql con Gambas

Bueno despues de muchas lunas vuelvo a escribir sobre Gambas lamento haber tenido abandonado el tema durante mucho tiempo y dedicarme a postear otras cosas pero espero retomar con fuerza y ayudar a quienes tengan alguna duda con este lenguaje de paso que tambien aprendemos juntos listo entonces hecha la aclaracion manos a la obra.
El asunto es bastante sencillo resulta que necesitamos hacer backups de nuestra base de datos y poder restaurarlos posteriormente en caso de que suceda algun problema asi que creamos una interfaz grafica como esta.

Bueno la interfaz es bastante intuitiva(eso espero XD) asi que vamos a ver una porcion de codigo, cuando le damos click al boton respaldar.

Dialog.Title = "Guardar archivo"
Dialog.Path = "."
'Filtro para tomar solamente extensiones sql
Dialog.Filter = ["*.sql", "Ficheros sql"]
'Variables.CFG_BD_PASS es una variable donde almaceno el password de la base de datos, desde un modulo Variables
pass = " --password=" & Variables.CFG_BD_PASS & " "
IF NOT Dialog.SaveFile() THEN
	ruta = Dialog.Path
ENDIF
	'redireccion es la ruta donde se va a guardar el backup le agregamos el simbolo > como operador de redireccionamiento redireccion = " > " & ruta
	'Usamos SHELL para correr el proceso en este caso mysqldump que es el que realmente hace todo el trabajo para mayor informacion sobre este comando remitirse  a la documentacion de Mysql
	proceso = SHELL "mysqldump -u " & Variables.CFG_BD_USUARIO & pass & Variables.CFG_BD_NAME & redireccion FOR READ

Con lo que obtendriamos la siguiente ventana.


Con lo que inmediatamente guardamos nuestro backup con el nombre que le querramos asignar.
Si queremos restaurarlo el procedimiento es analogo salvo el comando de mysql que es el que se usa para restaurar

Dialog.Title = "Elija una ubicacion"
Dialog.Path = "."
Dialog.Filter = ["*.sql", "Ficheros sql"]
pass = " --password=" & Variables.CFG_BD_PASS & " "
IF NOT Dialog.OpenFile() THEN
	ruta = Dialog.Path
ENDIF
	redireccion = " < " & ruta
	proceso = SHELL "mysql -u " & Variables.CFG_BD_USUARIO & pass & Variables.CFG_BD_NAME & redireccion FOR READ


Y listo eso es todo asi de simple como se habran dado cuenta quien realmente hace el trabajo es mysql lo unico que he hecho con gambas es la interfaz grafica, haciendo uso de la orden SHELL para ejecutar los comandos.
Saludos y hasta la proxima.

Trabajando con Fechas en Gambas

PUBLIC FUNCTION formatDateBD(fec AS Date) AS String
   DIM dat AS String
   dat = Year(fec) / Month(fec) / Day(fec)
   RETURN dat
END

Las fechas en gambas pueden ser trabajadas con Date.
El cual se estructura de la siguiente forma:

Date = Date ( Year , Month , Day [ , Hours , Minutes , Seconds ] ) AS Date

Si quisieramos trabajar con una fecha obtenida de una base de datos y colocarla en un objeto calendar y en una caja de texto podriamos hacerlo de la siguiente forma:

Dim fec as Date
fec = resGuias[fecha]
GuiaRemision.Calendario.Year = Year(fec)
GuiaRemision.Calendario.Month = Month(fec)
GuiaRemision.Calendario.Day = Day(fec)
txtFecha.Text = Calendario.Day / Calendario.Month / Calendario.Year

Si queremos guardar una fecha obtenida en nuestro programa en la base de datos podemos usar la siguiente funcion.

PUBLIC FUNCTION formatDateBD(fec AS Date) AS String
	DIM dat AS String
	dat = Year(fec) / Month(fec) / Day(fec)
	RETURN dat
END

Y finalmente esto es lo que guardo en la base de datos donde el dato es de tipo Fecha segun el gestor de datos de Gambas.

Segun lo que estoy viendo esta no es la manera mas optima de trabajar pero funciona, asi que si alguien conoce alguna mejor, por favor espero me pueda ayudar.

Saludos

El operador IF en gambas

Bueno pues resulta que estaba queriendo utilizar el condicional IF en mi querido gambas y como estoy acostumbrado a la sintaxis de lenguajes como java y c# quería utilizar el operador a la manera tradicional de esos lenguajes:

IF condicion1 AND condicion2 THEN
'Codigo a ejecutar al ser verdadera la condicion
END IF

Y me daba un error al evaluar la condicion2 la cual dependia directamente de la condicion1, despues de tanto romperme la cabeza para averiguar el origen del error, se me ocurrio consultar la documentacion de gambas sobre el operador IF y resulta que la sintaxis correcta es la siguiente.

IF condicion1 AND IF condicion2 THEN
'Codigo a ejecutar al ser verdadera la condicion
END IF

En caso de que querramos usar el OR tenemos el siguiente

IF condicion1 OR IF condicion2 THEN
'Codigo a ejecutar al ser verdadera la condicion
END IF

Recordemos que la condicion se evalua de izquierda a derecha, y tambien que no se puede mezclar las palabras clave AND IF y OR IF en una misma linea.

Aqui termino este pequeño post el cual nacio de un error minimo pero que a veces puede pasar desapercibido, la moraleja es que siempre debemos revisar la documentacion del lenguaje, por mucho que sepamos usar otros lenguajes.

Saludos.
“Hasta la victoria siempre” 

TableView con Imagenes

En esta oportunidad voy a agregar un formulario mas al proyecto anterior donde mostrare una tabla con imagenes:

Al momento de ejecutar la aplicacion tendremos algo como esto:

El codigo para lograr esto es el siguiente:

PRIVATE checked AS Picture
PRIVATE unchecked AS Picture

PUBLIC SUB Form_Open()

	DIM j AS Integer
	DIM k AS Integer
	TableView1.Columns.Count = 3
	TableView1.Columns[0].Text = "Mes"
	TableView1.Columns[0].Width = 100
	TableView1.Columns[1].Text = "Compra"
	TableView1.Columns[1].Width = 70
	TableView1.Columns[2].Text = "Venta"
	TableView1.Columns[2].Width = 70
	TableView1.Rows.Count = 12
	'Cargamos las imagenes en los objetos Picture
	checked = picture["tick.png"]
	unchecked = picture["notick.png"]
	'Establecemos en la columna 0 los meses del año
	TableView1[0, 0].text = "Enero"
	TableView1[1, 0].text = "Febrero"
	TableView1[2, 0].text = "Marzo"
	TableView1[3, 0].text = "Abril"
	TableView1[4, 0].text = "Mayo"
	TableView1[5, 0].text = "Junio"
	TableView1[6, 0].text = "Julio"
	TableView1[7, 0].text = "Agosto"
	TableView1[8, 0].text = "Setiembre"
	TableView1[9, 0].text = "Octubre"
	TableView1[10, 0].text = "Noviembre"
	TableView1[11, 0].text = "Diciembre"
	'Con un for recorremos la tabla y marcamos los casilleros con la imagen unchecked
	FOR j = 0 TO 11
		FOR k = 1 TO 2
			TableView1[j, k].Picture = unchecked
			TableView1[j, k].Alignment = Align.Center
		NEXT
	NEXT

END

La idea es que podamos seleccionar con un check al dar click los cuadros de Compra y Venta para los meses mostrados, en realidad lo que cargamos en el cuadro son las imagenes de “tick.png” y “notick.png”. Ponemos el codigo necesario en el evento click del TableView.

PUBLIC SUB TableView1_Click()

'Hacemos esto porque en la columna 0 tenemos los meses
IF TableView1.Column > 0 THEN
	IF TableView1[TableView1.Row, TableView1.Column].Picture = unchecked THEN
		TableView1[TableView1.Row, TableView1.Column].Picture = checked
	ELSE
		TableView1[TableView1.Row, TableView1.Column].Picture = unchecked
	END IF
END IF

END

Al hacer uso de la nueva funcion que hemos incorporado tenemos lo siguiente:

Espero que esto pueda ser de utilidad. Hasta la proxima.

“Hasta la victoria siempre”

El Control Workspace en Gambas

Este control implementa un espacio de trabajo con pestañas donde se pueden tener ventanas embebidas dentro de la ventana principal.
Para utilizarlo tenemos que añadir al proyecto el componente gb.form.mdi, por lo que nos vamos al menu Proyecto->Propiedades luego en la ventana que se abre seleccionamos la pestaña componentes y finalmente en la lista que se muestra seleccionamos gb.form.mdi

Luego aparecera en la Caja de Herramientas, en la pestaña Special el control Workspace.

Para trabajar con este control creamos un formulario principal llamado Principal, con un menu llamado Secundario con dos opciones Abrir y Salir. Al formulario le agregamos el control Workspace.

Tambien creamos otro formulario llamado Secundario que contiene un TextArea

Finalmente para abrir el formulario secundario desde el formulario principal y añadirlo en el workspace hacemos lo siguiente en el evento Click del menu Abrir

PUBLIC SUB menAbrir_Click()
	DIM sform AS Secundario
	sform = NEW Secundario
	Workspace1.Add(sform)
	Workspace1.ActiveWindow = sform
END

Con lo que tendriamos como resultado lo siguiente:

Un ultimo dato que me parece conveniente aportar es que al formulario principal debemos asignarle la propiedad:

Para que el Workspace se ajuste al tamaño de la pantalla al momento de redimensionar.

Bueno esto es todo por este post, saludos combativos 🙂