domingo, 23 de noviembre de 2014

Escritura directa en un archivo

Buenas, puede suceder que necesitemos un archivo donde guardemos datos para el funcionamiento de nuestro programa sin la intervención del usuario. Aquí les dejo un ejemplo super simple como me gusta a mi para que sea mas fácil comprender.

' gambas class file

' by postapase
' Escritura directa en un archivo

Public Sub Form_Open()
Dim Ruta As String = User.Home & "/prueba.txt" 'Variable de tipo cadena,
' que contiene la ruta donde se guardara/creara el archivo con los datos

Dim Archivo As File 'declaracion de variable de tipo archivo

Me.Center 'Centra el formulario

Archivo = Open Ruta For Create 'Abre archivo, sino existe lo crea

Print #Archivo, "Hola, hoy es el día " & Format(Date, gb.LongDate) 'escribe 1ª linea
Print #Archivo 'deja la linea en blanco, escribe 2ª linea
Print #Archivo, "El archivo se guardo en:" ' escribe 3ª linea
Print #Archivo, Ruta 'escribe 4ª linea

Close #Archivo 'cierra el archivo

End

' Ahora busquen el archivo en User.Home &"/prueba.txt" para ver los resultados



sábado, 22 de noviembre de 2014

Guardar/Cargar configuraciones en un txt




El Tanteador de tenis de mesa tiene una ventana donde se puede configurar los distintos colores del la interfaz clásica, y también se puede guardar y cargar configuraciones, pero... no esta bien programado ni es cómodo para el usuario.
Por ese motivo me puse a buscar un método mas conveniente para crear archivos de configuraciones de colores que se les puede poner el nombre de la persona que eligió esos colores con lo cual es fácil de identificar cuales son los colores que cada persona eligió, con una extencion a nuestro gusto en este caso yo le asigne la extencion .ConfigColor pero puede ser cualquiera a su elección

 Así se ve el archivo de configuración de colores con dos valores: Letra y Fondo,
pero puede tener cientos de valores según la necesidad de nuestro programa.





' gambas class file

' by postapase
Public JuegoColores As String
Public Fondo As String
Public Letra As String

Public Sub Form_Open()
Me.Center
Me.Caption = "Configuracion de colores"
End

Public Sub btnGuardar_Click()
Dim sPath As String

If Dialog.SaveFile() Then Return
sPath = Dialog.Path
File.Save(sPath & ".ConfigColor", JuegoColores)

End

Public Sub ColorButton1_Change()
Actualizar
End

Public Sub ColorButton2_Change()
Actualizar
End

Public Sub Actualizar()
Letra = "Letra=" & ColorButton1.Value
Fondo = "Fondo=" & ColorButton2.Value
LabPostapase.Foreground = ColorButton1.Value
LabPostapase.Background = ColorButton2.Value
JuegoColores = Letra & gb.NewLine
JuegoColores &= Fondo
End

Public Sub btnCargar_Click()
Dim sPath As String
Dim dato As String
Dim ArchivoX As File
Dim LineaX As String
Dim DatoX As String[]

Dialog.Filter = ["*.ConfigColor", ("Configuración de colores")]

If Dialog.OpenFile() Then Return
sPath = Dialog.Path

ArchivoX = Open sPath For Read

While Not Eof(ArchivoX)

Line Input #ArchivoX, LineaX

If InStr(LineaX, "Letra") <> 0 Then
DatoX = Split(LineaX, "=")
ColorButton1.Value = Val(Trim(DatoX[1]))
Continue
Endif

If InStr(LineaX, "Fondo") <> 0 Then
DatoX = Split(LineaX, "=")
ColorButton2.Value = Val(Trim(DatoX[1]))
Continue
Endif

Wend

Close ArchivoX
Actualizar()

End

Public Sub btnPredeterminados_Click()
ColorButton1.Value = &H000000
ColorButton2.Value = &HFFFFFF
Actualizar()
End



Código fuente:  ConfigColor-0.0.1.tar.gz

lunes, 17 de noviembre de 2014

Mi primer componente llamado animales

Buenas aquí ando re feliz pues e logrado crear mi primer componente y lo comparto con ustedes novatos igual que yo.
Hice un planteo en el foro http://www.gambas-es.org/  en este post .
Obtuve dos respuestas una muy interesante sin llegar a ser lo que pedi exactamente y la otra me mandaron a estudiar :( .
Pero... soy curioso y cuando ando con ganas y paciencia lo que busco generalmente lo encuentro pues bien hoy fue uno de esos días.

Primero que nada creamos un nuevo proyecto tildando en Programar un componente, elegimos en tipo de proyecto Aplicación gráfica GTK+, elegimos donde guardaremos el proyecto y que nombre tendra, en mi caso le puse animales.



Segundo borramos las dos clases que el gambas crea de forma predeterminadas llamadas CControl y CContainer ubicadas en la carpeta fuente.
También borramos las dos imágenes png de la carpeta Control ubicada en la carpeta proyectos. en la carpeta control agregamos una imagen a gusto y la renombramos con el nombre de la clase que crearemos en mi caso es animales

Tercero creamos una nueva clase llamada animales (en mi caso) en la carpeta fuentes.

Ahora les dejo las siguientes imagenes y ustedes sabran que hacer osea copiar el codigo en la clase y en el formulario FTest







Bien después de probado el componente en el formulario FTest y todo funciona como queremos, tenemos que crear el archivo de instalación para compartir nuestro componente con el resto del mundo algo que da mucha gratificación jaja y eso que este componente solo sirve para dar nociones de como crear un componente pues  en si no hace nada interesante.

Vamos a Proyecto-->Crear-->Paquete de instalación




y seguimos los siguientes pasos, terminado el proceso se crearan los paquetes dentro de una carpeta y vamos a instalar el paquete deb en mi caso seria postapase-animales_0.0.1-0ubuntu1_all.deb

Después de instalado creamos un nuevo proyecto, luego vamos a Proyecto-->Propiedades-->Componentes y tildamos en animales que es nuestro componente recién creado.






En esta ultima imagen podemos apreciar el componente animales en accion y funcionando perfectamente.

Espero que les sirva para sus estudios y pruebas novatos de gambas jajaja.

Saludos.

Código fuente del componente animales: Animales-0.0.1.tar.gz

domingo, 16 de noviembre de 2014

Ejemplos de sintaxis en Gambas3 (truco by postapase)

Buenas gente,

Resulta que estudiando siempre aprendemos algun comando nuevo, entendemos como funciona pero he aquí que no encontramos muchos ejemplos de sintaxis, pero... para eso teneis un buen amigo como postapase jaja.

Yo estoy en un proceso de aprendizaje por golpes :( jaja y muchas veces no se la sintaxis de un comando y los ejemplos que encuentro en internet o son escasos o poco entendibles de ahí la necesidad de ver muchos, muchos ejemplos para comprender fácilmente.

Sin mas preambulos les cuento en que consiste el truco:

1. Leer y entender bien este post: juguemos a ser Benoit Minisini

2. Abrimos el proyecto gambas3

3. Vamos a Herramientas-->Encontrar y escribimos en Buscar el comando que deseamos, en este caso yo puse a modo de ejemplo el comando Format

4.Tildamos en Sólo palabras y también en Todos los archivos y clic en el botón Navegar

y gualaaa!!! vemos cientos de ejemplos, bueno saludos y espero les sirva.

Tambien pueden comentar en el blog que les parecio el tutorial jaja.

Saludos.





Format

Aprendiendo un poco sobre el comando Format y las Constantes predefinidas.




' gambas class file

'by postapase

Public Sub Form_Open()
Me.Center 'centra el formulario
DateBox1.Value = Date 'se coloca la fecha del sistema del dia actual
'a la caja de texto del DateBox1

TextArea1.Text &= Format(DateBox1.Value, gb.LongDate) & gb.NewLine
End

Public Sub Button1_Click()
TextArea1.Clear ' borra todo el TextArea1
ComboBox1.Text = "" ' borra el cuadro de texto del ComboBox1
ComboBox1.SetFocus 'da el foco al ComboBox1 y queda el cursor parpadeando
End

Public Sub RadioButton1_Click()
'& concatena cadenas o string, equivalente a:
' TextArea1.Text = TextArea1.Text & Format(DateBox1.Value, gb.LongDate) & gb.NewLine
'gb.newline equivalente a salto de linea o "\n"
'gb.longdate equivalente a (dddd d mmmm yyy)-(domingo 16 noviembre 2014)
'format como lo dice el nombre del propio comando, da formato en este caso a la fecha
'tomando la fecha de DateBox1.value y dandole el formato elegido en este caso
'con la Constante predefinida de gb.LongDate, se puede optar por otras constantes
'como gb.MediumDate, gb.ShortDate o bien 'definirlo de forma personalizada
' por ejemplo con: "dddd, mmm yyyy" en vez de gb.LongDate
TextArea1.Text &= Format(DateBox1.Value, gb.LongDate) & gb.NewLine

End

Public Sub RadioButton2_Click()
TextArea1.Text &= Format(DateBox1.Value, gb.MediumDate) & gb.NewLine
End

Public Sub RadioButton3_Click()
TextArea1.Text &= Format(DateBox1.Value, gb.ShortDate) & gb.NewLine
End

Public Sub Button2_Click()
TextArea1.Text &= Format(DateBox1.Value, ComboBox1.Text) & gb.NewLine
ComboBox1.Add(ComboBox1.Text)
End

Public Sub Button3_Click()
ComboBox1.Clear
ComboBox1.Text = ""
ComboBox1.SetFocus
End

Código fuente: Fecha-0.0.1.tar.gz

lunes, 27 de octubre de 2014

Sgn



' gambas class file

' by postapase

Public Sub Button1_Click()
Dim num As Integer

Randomize

num = Rnd(-1000, 1000) 'Rnd elige un numero aleatorio entre -1000 y 1000
'y lo guarda en la variable de tipo integer num

If Sgn(num) = 1 Then 'Sgn analiza el dato integer o numerico dentro de num
'y devuele 1 si el número es positivo o si es negativo devuelve -1
TextArea1.Text &= "El número " & num & " es un número positivo ( " & Sgn(num) & " )" & gb.NewLine
Else
TextArea1.Text &= "El número " & num & " es un número negativo ( " & Sgn(num) & " )" & gb.NewLine
Endif

End
 

domingo, 19 de octubre de 2014

Solución a reto Solveet (MayorSinDigito)



Se tiene un número X y se indica un dígito Y. Devolver un número Z que sea menor a X y que no posea el dígito Y.
La función/método puede aceptar dos argumentos: el número X y el dígito Y. No es necesario agregar ninguna validación para Y.
Ejemplos:
mayorSinDigito(123, 2) => 119
mayorSinDigito(113, 2) => 111
mayorSinDigito(113, 1) => 99


' gambas class file

' by postapase

Public Sub Form_Open()
Dim Num As Integer

Repeat
cbxDigitos.Add(Num)
Inc Num
Until Num > 9
cbxDigitos.Index = 0

End

Public Sub btnBuscar_Click()
MayorSinDigito(txtMayor.Text, cbxDigitos.Text)
End

Public Sub MayorSinDigito(Mayor As String, Digito As Integer)
Dim a, Resta1 As Integer

Resta1 = Mayor - 1

For a = Resta1 To 1 Step -1
If InStr(CString(a), CString(Digito)) = 0 Then
LabResultado.Text = "Número mayor es:" & a & " , sin digito " & Digito
Break
Endif
Next

End

sábado, 18 de octubre de 2014

Solución a Reto Solveet (Desglose en billetes)

Usando un bucle mediante Repeat/Until y Continue. Si la cantidad data es igual o mayor que 500 le restamos 500 si el resto es mayor o igual a 500 repetimos la operación sino continuamos con el billete menor de 200 así sucesivamente con las demás cantidades, cuando el resto sea 0 detenemos el bucle .



' gambas class file

' by postapase

Public Sub btnDesglosar_Click()
Dim Euros As Long
Dim Resto As Long
Dim Billete500, Billete200, Billete100, Billete50, Billete20, Billete10, Billete5, Moneda2, Moneda1 As Long
Euros = Val(txtEuros.Text)

TextArea1.Clear

Repeat
If Euros >= 500 Then
Resto = Euros - 500
Euros = Resto
Inc Billete500
If Euros < 500 Then
If Billete500 > 1 Then
TextArea1.Text &= Billete500 & " Billetes de 500 euros" & gb.NewLine
Else
TextArea1.Text &= Billete500 & " Billete de 500 euros" & gb.NewLine
Endif
Endif
If Resto > 500 Then Continue
Endif

If Euros >= 200 Then
Resto = Euros - 200
Euros = Resto
Inc Billete200
If Euros < 200 Then
If Billete200 > 1 Then
TextArea1.Text &= Billete200 & " Billetes de 200 euros" & gb.NewLine
Else
TextArea1.Text &= Billete200 & " Billete de 200 euros" & gb.NewLine
Endif
Endif
If Resto > 200 Then Continue
Endif

If Euros >= 100 Then
Resto = Euros - 100
Euros = Resto
Inc Billete100
If Euros < 500 Then
If Billete100 > 1 Then
TextArea1.Text &= Billete100 & " Billetes de 100 euros" & gb.NewLine
Else
TextArea1.Text &= Billete100 & " Billete de 100 euros" & gb.NewLine
Endif
Endif
If Resto > 100 Then Continue
Endif

If Euros >= 50 Then
Resto = Euros - 50
Euros = Resto
Inc Billete50
If Euros < 50 Then
If Billete50 > 1 Then
TextArea1.Text &= Billete50 & " Billetes de 50 euros" & gb.NewLine
Else
TextArea1.Text &= Billete50 & " Billete de 50 euros" & gb.NewLine
Endif
Endif
If Resto > 50 Then Continue
Endif

If Euros >= 20 Then
Resto = Euros - 20
Euros = Resto
Inc Billete20
If Euros < 20 Then
If Billete20 > 1 Then
TextArea1.Text &= Billete20 & " Billetes de 20 euros" & gb.NewLine
Else
TextArea1.Text &= Billete20 & " Billete de 20 euros" & gb.NewLine
Endif
Endif
If Resto > 20 Then Continue
Endif

If Euros >= 10 Then
Resto = Euros - 10
Euros = Resto
Inc Billete10
If Euros < 10 Then
If Billete10 > 1 Then
TextArea1.Text &= Billete10 & " Billetes de 10 euros" & gb.NewLine
Else
TextArea1.Text &= Billete10 & " Billete de 10 euros" & gb.NewLine
Endif
Endif
If Resto > 10 Then Continue
Endif

If Euros >= 5 Then
Resto = Euros - 5
Euros = Resto
Inc Billete5
If Euros < 5 Then
If Billete20 > 1 Then
TextArea1.Text &= Billete5 & " Billetes de 5 euros" & gb.NewLine
Else
TextArea1.Text &= Billete5 & " Billete de 5 euros" & gb.NewLine
Endif
Endif
If Resto > 5 Then Continue
Endif

If Euros >= 2 Then
Resto = Euros - 2
Euros = Resto
Inc Moneda2
If Euros < 2 Then
If Moneda2 > 1 Then
TextArea1.Text &= Moneda2 & " Monedas de 2 euros" & gb.NewLine
Else
TextArea1.Text &= Moneda2 & " Moneda de 2 euros" & gb.NewLine
Endif
Endif
If Resto >= 2 Then Continue
Endif

If Euros >= 1 Then
Resto = Euros - 1
Euros = Resto
Inc Moneda1
If Euros < 1 Then
If Moneda1 > 1 Then
TextArea1.Text &= Moneda1 & " Monedas de 1 euros" & gb.NewLine
Else
TextArea1.Text &= Moneda1 & " Moneda de 1 euros" & gb.NewLine
Endif
Endif
If Resto > 1 Then Continue
Endif
Until Resto = 0

End

jueves, 11 de septiembre de 2014

Ejemplo de uso de Append

' lo que hace Append es escribir a partir del final del archivo
'si usaramos solo write el archivo se reescribe de cero con la informacion nueva...




' gambas class file

'by postapase
' usando Append
Private RutaX As String = User.Home &/ "Registro_eventos.txt"

Public Sub Form_Open()
Me.Center
TextArea1.Clear
End

Public Sub btnDos_Click()
TextArea1.Clear
AddLog("btnDos_Click")
End

Public Sub btnUno_Click()
TextArea1.Clear
AddLog("btnUno_Click")
TextArea1.Pos = 0
End

Public Sub AddLog(nombre As String)
Dim ArchivoX As File
Dim LineaX As String

ArchivoX = Open RutaX For Write Append ' lo que hace Append es escribir a partir del final del archivo
'si usaramos solo write el archivo se reescribe de cero con la informacion nueva, es decir si guardamos en el
'archivo la palabra "gambas" y despues guardamos otra palabra "libre" el archivo solo contendra la palabra libre
'ahora si usamos el conjunto de comando Write Append veremos gambas en la primera linea y libre en la segunda
'y asi sucesivamente con lo que guardemos en el archivo, aparentemente si el archivo no existe Append lo crea
'Append es ideal para hacer archivos de log por eso hice este ejemplo para que podamos entender
'para que sirve Append y la diferencia con el comando Write si va solo.

Write #ArchivoX, nombre & " - " & Date(Year(Now), Month(Now), Day(Now), Hour(Now), Minute(Now), Second(Now)) & gb.NewLine

Close ArchivoX

LeerArchivo()

End

Public Sub LeerArchivo()
Dim ArchivoX As File
Dim LineaX As String

ArchivoX = Open RutaX For Read

While Not Eof(ArchivoX)
Line Input #ArchivoX, LineaX
TextArea1.Text = LineaX & gb.NewLine & TextArea1.Text
Wend

Close ArchivoX

End

Public Sub btnClear_Click()

If Not Exist(RutaX) Then
Message.Info("Archivo no existe!")
Else
Try Kill RutaX
TextArea1.Clear
Endif

End

Código fuente: append-0.0.1.tar.gz

martes, 9 de septiembre de 2014

Manipulando datos de un ComboBox

Guardar datos de un ComboBox y cargar datos a un ComboBox





' gambas class file

'by postapase

Public Sub Form_Open()
Me.Center
End

Public Sub btnAgregar_Click()

ComboBox1.Add(ComboBox1.Text)
ComboBox1.Text = ""
ComboBox1.SetFocus

End

Public Sub btnGuardarLista_Click()
Dim dato, lista As String

For Each dato In ComboBox1.List
lista &= dato & ","
Next

lista = Left(lista, Len(lista) - 1)
Settings["ListaDeDatos/Datos"] = lista
Settings.Save

LeerArchivoSettings()

End

Public Sub btnCargarLista_Click()
Dim lista As String
Dim separando As String[]
Dim x As Integer

TextArea1.Clear
ComboBox1.Clear
lista = Settings["ListaDeDatos/Datos", ""]
separando = Split(lista, ",")

For x = 0 To separando.Count - 1
ComboBox1.Add(separando[x])
Next

LeerArchivoSettings()
End

Public Sub LeerArchivoSettings() 'rutina que se encargara de leer el archivo Settings y mostrarlo en el TextArea
Dim ArchivoSettings As File 'declaramos una variable de tipo archivo para poder leer los datos de un archivo
Dim LineaX As String 'variable de tipo string que contendra los dato de una linea del archivo que estemos leyendo
Dim RutaArchivoSettings As String 'variable de tipo string que contendra la ruta del archivo a leer

TextArea1.Clear 'borramos el textarea sino no visualizaremos los datos como corresponde
RutaArchivoSettings = Settings.Path 'asignamos la ruta del archivo al string

ArchivoSettings = Open RutaArchivoSettings For Read
'open abre un archivo x en la ruta especificada en este caso Settings.path ( )
'For Read indica que abre el archivo solo con intenciones de lectura

'while...wend (El bucle se repite mientras que la expresión es verdadera.)
'Eof devuelve TRUE si estamos al final de un Flujo. (en este caso un archivo)
While Not Eof(ArchivoSettings) 'si eof NO es true ejecute el bluce (comienzo del bluce)
' cuando Eof(ArchivoSettings) es true significa que llego al final del archivo y el bluce no se ejecuta mas
Line Input #ArchivoSettings, LineaX 'lee de a una linea el archivo
' y lo que hay en esa linea lo deposita en lineaX que es una variable de tipo String
TextArea1.Text &= LineaX & gb.NewLine 'va escribiendo en el textarea linea a linea pasando lo que hay en lineax,
' gb.NewLine es una constante equivalente a poner LineaX & "\n" (salto de linea)
Wend


Close ArchivoSettings  ' agregue esta linea
End

Public Sub btnGuardarLista2_Click()
Dim ArchivoX As File
Dim dato, lista As String

For Each dato In ComboBox1.List
lista &= dato & gb.NewLine
Next

ArchivoX = Open User.Home & "/lista.txt" For Write Create

Write #ArchivoX, lista

Close ArchivoX

btnCargarLista2_Click()

End

Public Sub btnCargarLista2_Click()
Dim ArchivoX As File
Dim LineaX As String
ComboBox1.Clear
TextArea2.Clear
ArchivoX = Open User.Home & "/lista.txt" For Read

While Not Eof(ArchivoX)
Line Input #ArchivoX, LineaX
TextArea2.Text &= LineaX & gb.NewLine
ComboBox1.Add(LineaX)
Wend

Close ArchivoX

End

Public Sub Button1_Click()
TextArea2.Clear
End

Public Sub Button2_Click()
TextArea1.Clear
End

Public Sub Button4_Click()

ComboBox1.Clear

End

Código fuente: GuardarCargarListaComboBox-0.0.1.tar.gz