Allanando el camino a los iniciados en Gambas, porque programar en Gambas es un placer!!
Mostrando las entradas con la etiqueta if-endif-else. Mostrar todas las entradas
Mostrando las entradas con la etiqueta if-endif-else. Mostrar todas las entradas
viernes, 1 de mayo de 2020
Eliminar archivos duplicados
Este código lo hice al ver que una carpeta tenía muchas imágenes repetidas, es decir totalmente idénticas, de ahí surge el problema y la pregunta. ¿Como eliminar las imagenes (.png) iguales?. Pues bien se me ocurrió usar el comando de Linux de consola "sha256sum" el cual te da un hash único, en teoría es imposible que salgan dos hashes iguales si los archivos son diferentes, solamente salen iguales si son idénticos. Este método es usado para comprobar la integridad de un archivo que ha sido descargado. Un ejemplo lo tenemos en el mismo Gambas, en la granja después de elegido un proyecto y descargado Gambas comprueba el hash, si es distinto te tirar error si es igual te dice que el archivo se descargo correctamente.
El código fuente se encuentra en la granja. Saludos
https://gambas.one/gambasfarm/?id=803&action=search
Etiquetas:
Clase,
Ejemplo,
For Each...Next,
if-endif-else,
MessageView,
Shell
sábado, 30 de abril de 2016
While... Wend (Bucle-Repetición)
' gambas module file
' by postapase
' Da comienzo a un bucle delimitado por las instrucciones While ...WEND.
' El bucle se repite mientras la Expresión sea cierta.
' Si la expresión es falsa al inicio, el bucle nunca se ejecuta.
Public Sub Main()
Dim EntroEnBucle As Boolean ' el valor predeterminado de una variable de tipo boolean es false
Dim x As Integer
x = 1
While x <= 7 'si x es menor o igual a 7 entonces lea la siguiente linea sino lea a partir de la siguiente linea de Wend
Print "x ahora es: "; x
If EntroEnBucle = False Then EntroEnBucle = True
Inc x
Wend 'lea a partir del while
If EntroEnBucle = True
Print "Se entro en el bucle porque la condicion de entrada fue True/verdadera"
Else
Print "No se entro en el bucle porque la condicion de entrada fue false/falsa"
Endif
End
' by postapase
' Da comienzo a un bucle delimitado por las instrucciones While ...WEND.
' El bucle se repite mientras la Expresión sea cierta.
' Si la expresión es falsa al inicio, el bucle nunca se ejecuta.
Public Sub Main()
Dim EntroEnBucle As Boolean ' el valor predeterminado de una variable de tipo boolean es false
Dim x As Integer
x = 1
While x <= 7 'si x es menor o igual a 7 entonces lea la siguiente linea sino lea a partir de la siguiente linea de Wend
Print "x ahora es: "; x
If EntroEnBucle = False Then EntroEnBucle = True
Inc x
Wend 'lea a partir del while
If EntroEnBucle = True
Print "Se entro en el bucle porque la condicion de entrada fue True/verdadera"
Else
Print "No se entro en el bucle porque la condicion de entrada fue false/falsa"
Endif
End
Etiquetas:
Bucles,
if-endif-else,
inc,
While...Wend
viernes, 17 de abril de 2015
función de IDE gambas
De aquí en mas iré publicando mis análisis del código de la IDE gambas.
Sera algo asi como analisis del codigo de un experto por un novato jaja.
(tengan precaución con mis comentarios no me hago responsable de mis horrores)
' gambas class file
'by postapase
'conjunto de caracteres que no se pueden usar para un nombre de archivo
Private Const FILE_FORBIDDEN_CAR As String = "?*/~" 'declaracion de constante de tipo string
Public Sub Form_Open()
Me.Center 'centra el formulario
End
Public Function CheckFileName(sName As String, Optional sDir As String) As String
'esta función es parte de la ide de gambas 3.7 se encuentra en el modulo Project
'leer el post: http://novatocodegambas.blogspot.com/2014/05/juguemos-ser-benoit-minisini.html
'función compuesta por dos argumentos uno obligatorio que es sName y el otro opcional es decir no es obligatorio
'colocar el argumento. Esta función retorna un valor de tipo string
'partes de la función:
'Declaracion: Public Function CheckFileName
'Argumentos: (sName As String, Optional sDir As String)
'Dato que retorna o devuelve la función: As String
Dim iInd As Integer
If Not sName Then Goto VOID_NAME 'chequea si el nombre es nulo o vacio.
'salta de aqui a la Etiqueta VOID_NAME:
If String.Left$(sName) = "." Then 'chequea si el primer caracter del nombre empieza por punto
iInd = 1
Goto BAD_START 'salta de aqui a la Etiqueta BAD_START: si el if devuelve true
Endif
For iInd = 1 To String.Len(sName) 'recorre el nombre del archivo viendo si tiene un caracter ilegal
If InStr(FILE_FORBIDDEN_CAR, String.Mid$(sName, iInd, 1)) Then Goto BAD_CHAR
'salta de aqui a la Etiqueta BAD_CHAR: si el if devuelve true
Next
If Len(sDir) Then
'verifica si el archivo ya existe
If Exist(sDir &/ sName) Then Goto ALREADY_EXIST 'salta de aqui a la Etiqueta ALREADY_EXIST: si el if devuelve true
Endif
Return
'Nombre vacio"
VOID_NAME:
Return ("Please type a name.") '"Por favor, escriba un nombre."
BAD_CHAR:
Return ("This name contains a forbidden character:") & " [ " & String.Mid$(sName, iInd, 1) & " ]"
'"Este nombre contiene un carácter prohibido"
BAD_START:
Return ("The name cannot begins with a dot.") '"El nombre no puede empezar por un punto."
ALREADY_EXIST:
Return ("This name is already used. Choose another one.") '"Este nombre ya está en uso. Elija otra."
End
Public Sub Button1_Click()
' este codigo lo agregue yo para ver funcionando la funcion
Print File.Name(FileChooser1.SelectedPath)
Print FileChooser1.Dir
Print FileChooser1.SelectedPath
Message.Info(CheckFileName(File.Name(FileChooser1.SelectedPath), FileChooser1.Dir))
'muestra el mensaje con el string que retorno la funcion CheckFileName
'si sale un mensaje sin texto es que el nombre esta correcto.
End
'by postapase
'conjunto de caracteres que no se pueden usar para un nombre de archivo
Private Const FILE_FORBIDDEN_CAR As String = "?*/~" 'declaracion de constante de tipo string
Public Sub Form_Open()
Me.Center 'centra el formulario
End
Public Function CheckFileName(sName As String, Optional sDir As String) As String
'esta función es parte de la ide de gambas 3.7 se encuentra en el modulo Project
'leer el post: http://novatocodegambas.blogspot.com/2014/05/juguemos-ser-benoit-minisini.html
'función compuesta por dos argumentos uno obligatorio que es sName y el otro opcional es decir no es obligatorio
'colocar el argumento. Esta función retorna un valor de tipo string
'partes de la función:
'Declaracion: Public Function CheckFileName
'Argumentos: (sName As String, Optional sDir As String)
'Dato que retorna o devuelve la función: As String
Dim iInd As Integer
If Not sName Then Goto VOID_NAME 'chequea si el nombre es nulo o vacio.
'salta de aqui a la Etiqueta VOID_NAME:
If String.Left$(sName) = "." Then 'chequea si el primer caracter del nombre empieza por punto
iInd = 1
Goto BAD_START 'salta de aqui a la Etiqueta BAD_START: si el if devuelve true
Endif
For iInd = 1 To String.Len(sName) 'recorre el nombre del archivo viendo si tiene un caracter ilegal
If InStr(FILE_FORBIDDEN_CAR, String.Mid$(sName, iInd, 1)) Then Goto BAD_CHAR
'salta de aqui a la Etiqueta BAD_CHAR: si el if devuelve true
Next
If Len(sDir) Then
'verifica si el archivo ya existe
If Exist(sDir &/ sName) Then Goto ALREADY_EXIST 'salta de aqui a la Etiqueta ALREADY_EXIST: si el if devuelve true
Endif
Return
'Nombre vacio"
VOID_NAME:
Return ("Please type a name.") '"Por favor, escriba un nombre."
BAD_CHAR:
Return ("This name contains a forbidden character:") & " [ " & String.Mid$(sName, iInd, 1) & " ]"
'"Este nombre contiene un carácter prohibido"
BAD_START:
Return ("The name cannot begins with a dot.") '"El nombre no puede empezar por un punto."
ALREADY_EXIST:
Return ("This name is already used. Choose another one.") '"Este nombre ya está en uso. Elija otra."
End
Public Sub Button1_Click()
' este codigo lo agregue yo para ver funcionando la funcion
Print File.Name(FileChooser1.SelectedPath)
Print FileChooser1.Dir
Print FileChooser1.SelectedPath
Message.Info(CheckFileName(File.Name(FileChooser1.SelectedPath), FileChooser1.Dir))
'muestra el mensaje con el string que retorno la funcion CheckFileName
'si sale un mensaje sin texto es que el nombre esta correcto.
End
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
' 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
Etiquetas:
Close,
Continue,
Dialog,
File.Save,
if-endif-else,
InStr,
Line Input,
Open,
Read,
While...Wend
miércoles, 16 de abril de 2014
Recordar elecciones de checkbox
' Gambas class file
' antes que nada el componente gb.Settings( gestión de archivo de configuración debe estar activado)
' Proyecto, propiedades, componentes y buscas gb.Settings y activarlo
' estas variables de tipo boolean serán las que guardaremos en el archivo de configuración,
' si ellas están en true los botones se verán, si en false los botones no se verán, pues al estar
' en true los checkbox en su propiedad value estarán en true y ejecutaran su código interno.
' (/home/aqui ira tu nombre de usuario/.config/gambas3/checkbox.conf
' veras algo asi:
' [Visualizar]
' VerBoton1 = True
' VerBoton2 = True
Public VerBoton1 As Boolean
Public VerBoton2 As Boolean
Public Sub CheckboxVerBoton1_Click()
' al hacer clic en el checkbox, el checkbox analizara si su propiedad value es true o false
' sera true cuando el cuadrado tenga la v del ok y sera falso cuando este en blanco.
If CheckboxVerBoton1.Value = True Then
btn1.Visible = True
VerBoton1 = True
Else
btn1.Visible = False
VerBoton1 = False
Endif
' con estas lineas guardamos en la variable de tipo Boolean VerBoton1 si es igual a True o False
Settings["Visualizar/VerBoton1"] = VerBoton1
Settings.Save ' guarda en el archivo de configuracion ahora mismo, sino se pone esta linea
' se guardara cuando el programa se cierre
End
Public Sub CheckboxVerBoton2_Click()
If CheckboxVerBoton2.Value = True Then
btn2.Visible = True
VerBoton2 = True
Else
btn2.Visible = False
VerBoton2 = False
Endif
Settings["Visualizar/VerBoton2"] = VerBoton2
Settings.Save
End
Public Sub Form_Open()
' con estas dos lineas leemos el archivo Settings para saber
' que valores tienen las variables VerBoton1 y VerBoton2
VerBoton2 = Settings["Visualizar/VerBoton2"]
VerBoton1 = Settings["Visualizar/VerBoton1"]
If VerBoton1 = True Then
CheckboxVerBoton1.Value = True
Else
CheckboxVerBoton1.Value = False
Endif
If VerBoton2 = True Then
CheckboxVerBoton2.Value = True
Else
CheckboxVerBoton2.Value = False
Endif
End
https://www.dropbox.com/s/pwa787c6gxdgtvi/checkbox-0.0.1.tar.gz
lunes, 18 de noviembre de 2013
Tanteador de Tenis de mesa
Buenas gente tanto tiempo, estoy medio desconectado de la programación y por eso me cuesta mucho retomar y programar se me olvidan cosas recién aprendidas, les consulto algo, soy jugador de ping pong y se me ocurrió crear un anotador de tantos digital para visualizar en pantalla completa, pero me encontré que no es simple como pensaba pues esta lleno de variables, y la verdad necesito mucha ayuda o mejor dicho me gustaría que alguien se sumara con este proyecto ojala sean todos a ver si sacamos este proyecto adelante ya que seria muy beneficioso para el deporte.
Recién comense el proyecto y esta plagado de errores y código basura pero soy novato y estoy aprendiendo voy a subir lo que he hecho, si alguien le interesa y le hace mejoras me gustaría que las subieran también. gracias
Tres cosas importantes faltan, una es terminar el proyecto que funcione bien
dos: que se ponga en pantalla completa
tres: que se pueda ir para atrás y para adelante en los tantos manteniendo todo como estaba antes por si el que anota se equivoca.
Nota: este post es estrategico: Como Crear Grupos De Trabajo Para Hacer Proyectos De Programación...
http://www.gambas-es.org/viewtopic.php?f=7&t=2799
Código fuente: Dropbox: Tanteador-0.0.3
(el boton mas del jugador 2 esta funcionando, algunas mejoras visuales en el codigo fuente)
Dropbox: Tanteador-0.0.4.tar.gz
Dropbox: Tanteador-0.0.7.tar.gz
Dropbox: Tanteador-0.0.8.tar.gz
(ahora el boton saque indica adecuadamente quien saca en cada nuevo set)problema 2 resuelto.
Dropbox: Tanteador-0.0.9.tar.gz
problema 1 resuelto ( bueno por primera vez el programa toma color y esta funcionando, aun hay pequeños detalles que corregir pero FUNCIONAAAAAA!!!!)
DEJO UN PAQUETE DE INSTALACION DEB AQUI: gambas3-tanteador_0.0.1-0ubuntu1_all.deb (ubuntu, mint)
sourceforge: tanteador 0.1.3
Tanteador-0.1.7.tar.gz
gambas3-tanteador_0.0.1-0ubuntu3_all.deb
Última versión
Suscribirse a:
Comentarios (Atom)






