miércoles, 25 de diciembre de 2013

Cargar/Guardar datos de un ListBox








' Gambas class file

Public Sub BtnAgregar_Click()
  Dim ListaIndex As Integer
  ListBox1.Add(TextBox1.Text, ListaIndex)
End

Public Sub btnGuardarLista_Click()
  Dim JugadoresSon As String
  JugadoresSon = ListBox1.List.Join("\n")
  File.Save(User.Home & "/ListaPostapase", JugadoresSon)
  btnCargarLista.Enabled = True
End

Public Sub BtnBorrarTodo_Click()
  ListBox1.Clear
End

Public Sub btnCargarLista_Click()
  ListBox1.List = Split(File.Load(User.Home & "/ListaPostapase"), "\n")
End

domingo, 1 de diciembre de 2013

ColorChooser



' Gambas class file

Public Sub Form_Open()

End

Public Sub btnpintar_Click()

If RadioButtonFondo.Value = True Then
  btnmuestra.Background = ColorChooser1.SelectedColor
Else
  btnmuestra.Foreground = ColorChooser1.SelectedColor

  Endif
End

Public Sub btnsalir_Click()

  Me.Close

End



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








ForgeGambas

Nuevo repositorio de aplicaciones en Gambas de la Comunidad.

Este sistema permite llevar un repositorio svn, un wiki para realizar páginas relativas al proyecto, un foro, un bug tracker para llevar el control de peticiones, sean bugs, mejoras o soporte, estadísticas, gráficos gantt, etc. y la visualización web del repositorio con las revisiones y diferencias entre ellas. Visita la página y solicita el alta si tienes un proyecto interesante que compartir.

jueves, 27 de junio de 2013

Dibujo1(Línea)



bueno primeras pruebas de dibujo en Gambas3 y lo comparto con ustedes


' Gambas class file

Public Sub _new()

End

Public Sub Form_Open()
Me.Center
Draw.Begin(DrawingArea1) ' si en esta línea salta el error
'cannot paint outside Of draw Event handler
'tienen que poner en las propiedades de DrawingArea1 lo siguiente:
'Cached=true
Draw.Line(10, 100, 90, 80)
Draw.End
End
---------------------------------------------------------------------------------------------------------------------




' Gambas class file

'Declaramos la variable que determinara el ancho de la línea
'y para empezar le damos el valor 5, el tipo de dato
' que tendra la variable es numérico por tanto la declaramos de tipo integer
Public anchodelinea As Integer = 5

Public Sub Form_Open()
'centramos el formulario
Me.Center
'limpiamos el DrawingArea para poder redibujar
' y ver adecuadamente los nuevos resultados
DrawingArea1.Clear
'comenzamos a dibujar en el DrawingArea
Draw.Begin(DrawingArea1) ' si en esta línea salta este error
'cannot paint outside Of draw Event handler
'tienen que poner en las propiedades de DrawingArea1 lo siguiente:
'Cached=true
Draw.LineWidth = anchodelinea
Draw.Line(10, 100, 90, 80)
Draw.End ' finaliza el trazado
End

Public Sub BtnDibujar_Click()
'le asignamos el valor a la variable anchodelinea
'antes ingresado en el textbox
  anchodelinea = TxtAnchoLinea.Text
  'se vuelve a cargar el formulario para asi poder ver los resultados
  Form_Open()

End

domingo, 9 de junio de 2013

AdivinarNúmero v0.0.1


Mas vale tarde que nunca.... este es un clásico programa donde el programa elije un número y el usuario intenta descubrirlo con 10 posibilidades, el programa nos da la única pista que consiste en decir si el número que tenemos que descubrir es menor o mayor. Le agregue mas dificultad por medio de niveles,en el nivel 1 el programa elige entre 1 y 50,en el nivel dos de 1 a 200, nivel 3 de 1 a 500, nivel 4 de 1 a 700 y el nivel mas difícil de 1 a mil.
Tiene una lista de usuarios que acertaron y los ordena de mayor a menor(bueno ese detalle todavía no lo resuelvo, espero que a ustedes se les ocurra una brillante idea y la compartan) donde los puntos se dan asi: 1000 porque juega en el nivel 5, 700 porque juega en el nivel 4 y asi sucesivamente, agregando a esas cifras el número de intentos que no se uso. Ejemplo: postapase  juega en el nivel 5 y acierta en el primer intento son 10 puntos mas (1010), otro usuario juega en el nivel 3 y acierta en el 5 intento, los punto son 505 y así con lo demás. Bueno algo es algo :)


Fmain:

' Gambas class file

Public espandir As Boolean = False
Public offniveles As Boolean = True
Public Nmagico As Float
Public Ningresado As Integer
Public intentos As Integer

Public puntaje As Integer
Public nomJugador As String
Public Const N1 As Integer = 50
Public Const N2 As Integer = 200
Public Const N3 As Integer = 500
Public Const N4 As Integer = 700
Public Const N5 As Integer = 1000
Public nivelelegido As Integer


Public Sub Form_Open()
  ' exxpandir(False)
  Me.Center
  Me.Width = 210
  ValueBox1.Enabled = False
  nivelelegido = N1
  nivel1.Checked = True
  intentos = 10
  Labintentos.Visible = False
  offniveles = False
  End

Public Function nivelesNO(offniveles As Boolean) As Boolean
  If offniveles = True Then
   nivel1.Enabled = False
   nivel2.Enabled = False
   nivel3.Enabled = False
   nivel4.Enabled = False
   nivel5.Enabled = False
  Else
   nivel1.Enabled = True
   nivel2.Enabled = True
   nivel3.Enabled = True
   nivel4.Enabled = True
   nivel5.Enabled = True
  Endif
    Return
End

Public Sub btnborrar_Click()
 ValueBox1.Value = 0
  ValueBox1.SetFocus
End


Public Sub btnVer_Click()

  Dim agrandar, achicar As Integer
  If espandir = True Then
    For achicar = 595 To 210 Step -1
      FMain.Width = achicar
      Wait 0.00049
    Next
  espandir = False
  btnVer.Text = "V\nE\nR\n" "\nR\nE\nC\nO\nR\nE\nS"
  Else
    For agrandar = 210 To 595 Step 1
      FMain.Width = agrandar
      Wait 0.00049
    Next
    espandir = True
    btnVer.Text = "O\nC\nU\nL\nT\nA\nR"
  Endif
End

Public Sub btnSalir_Click()
  Me.Close
End

Public Sub btnComenzar_Click()
Dim achicar As Integer
Labinfo.Text = ""
Labintentos.Text = ""


If espandir = True Then
    For achicar = 595 To 210 Step -1
      FMain.Width = achicar
      Wait 0.00049
    Next
  espandir = False
  btnVer.Text = "V\nE\nR\n" "\nR\nE\nC\nO\nR\nE\nS"
  usuario.Show
  Else
   btnVer.Enabled = False
 Labintentos.Caption = ""
Labinfo.Caption = ""
usuario.Show
intentos = 10

  Randomize
  Nmagico = Int(Rnd(1, nivelelegido))
 ValueBox1.SetFocus
   Print Nmagico
   Print nivelelegido
    Endif


End

Public Sub btnIngresar_Click()
Dim level As Integer
If ValueBox1.Text = 0 Then
  Message.Info("El numero mínimo es 1")
  ValueBox1.Value = 1
  Else
  

If ValueBox1.Text = Null Then
  Message.Info("ingrese un número para continuar")
  ValueBox1.Text = ""
  ValueBox1.SetFocus
  Return
  Else
Labintentos.Caption = nomJugador & "\nTe quedan " & intentos & "\n restantes para adivinar\n el número Magico"
Ningresado = ValueBox1.Text

If Ningresado = " " Then
  Message.Info("Ingrese un numero")
  Else
    If intentos = 1 Then
       Labinfo.Caption = "Has perdido"
       Labintentos.Caption = nomJugador & "\n suerte para\n el próximo juego"
      ValueBox1.Text = 0
     
       btnborrar.Enabled = False
       btnIngresar.Enabled = False
      ValueBox1.Enabled = False
      btnComenzar.Enabled = True
      nivelesNO(False)
    
   Else
     If Ningresado > nivelelegido Then
       Select Case nivelelegido
         Case 50
         level = 1
         Case 200
         level = 2
         Case 500
         level = 3
         Case 700
         level = 4
         Case 1000
         level = 5
        End Select
       Message.Info("Esta jugando en nivel: " & level & "\n" & "eliga un número menor o igual a " & nivelelegido)
       ValueBox1.Text = ""
       ValueBox1.SetFocus
      Else

        If Ningresado >= 1001 Then
           Message.Info("Elija un número entre 1 y 1000")
        Else
        
          Select Case Ningresado
             Case Nmagico
               Labintentos.Caption = "FELICITACIONES \n HAS ACERTADO!!!"
             Labinfo.Caption = "GANASTE!!!"
             puntaje = nivelelegido + intentos
            ListBox1.Add(puntaje & " <= " & nomJugador & " => " & Date)
            ListBox1.Sorted = True
            btnVer.Enabled = True
             offniveles = False
             nivelesNO(offniveles)
             ValueBox1.Value = 0
            ValueBox1.Enabled = False
             btnIngresar.Enabled = False
             btnComenzar.Enabled = True
             btnborrar.Enabled = False
            
             Case Else
           If Ningresado > Nmagico Then
             Labinfo.Caption = "numero menor"
            Dec intentos
            Labintentos.Caption = nomJugador & "\nTe quedan " & intentos & "\n restantes para adivinar\n el número Magico"
          Else
            Labinfo.Caption = "numero mayor"
             Dec intentos
            Labintentos.Caption = nomJugador & "\nTe quedan " & intentos & "\n restantes para adivinar\n el número Magico"
            Labintentos.Refresh
           
         Endif
        End Select
        Endif
     Endif
  Endif
Endif
Endif
Endif
Print intentos
End


Public Sub Form_KeyRelease()
  If ValueBox1.Text <> Null Then
    btnIngresar.Enabled = True
    Else
      Return
  Endif
End

Public Sub nivel3_Click()
  nivelelegido = N3
  btnNivel.Text = "N3"
  nivel3.Checked = True
  nivel2.Checked = False
  nivel1.Checked = False
  nivel4.Checked = False
  nivel5.Checked = False
End

Public Sub nivel1_Click()
  nivelelegido = N1
  btnNivel.Text = "N1"
  nivel1.Checked = True
  nivel2.Checked = False
  nivel3.Checked = False
  nivel4.Checked = False
  nivel5.Checked = False
End

Public Sub nivel2_Click()
  nivelelegido = N2
  btnNivel.Text = "N2"
  nivel2.Checked = True
  nivel1.Checked = False
  nivel3.Checked = False
  nivel4.Checked = False
  nivel5.Checked = False
End

Public Sub nivel4_Click()
  nivelelegido = N4
  btnNivel.Text = "N4"
  nivel4.Checked = True
  nivel2.Checked = False
  nivel3.Checked = False
  nivel1.Checked = False
  nivel5.Checked = False
End

Public Sub nivel5_Click()
   nivelelegido = N5
   btnNivel.Text = "N5"
   nivel5.Checked = True
   nivel2.Checked = False
   nivel3.Checked = False
   nivel4.Checked = False
   nivel1.Checked = False
End

Public Sub salir_Click()

  Me.Close

End

Public Sub acercade_Click()

  info.Show

End



usuario:
' Gambas class file


Public Sub btnAceptar_Click()
If Txtnombre.Text = Null Then
  Message.Info("Ingrese su nombre para continuar")
  Return
  Else
   FMain.intentos = 10    ' agregue esta línea pues mostraba los intentos que restaban al jugador anterior  :oops:
    FMain.btnborrar.Enabled = True
    FMain.Enabled = True
    FMain.nomJugador = UCase$(Txtnombre.Text)
   
    FMain.Labintentos.Visible = True
    FMain.Labintentos.Caption = FMain.nomJugador & "\nTe quedan " & FMain.intentos & "\n restantes para adivinar\n el número Magico"
    FMain.btnComenzar.Enabled = False
    FMain.offniveles = True
    FMain.nivelesNO(FMain.offniveles)
Endif
 FMain.ValueBox1.Enabled = True
 FMain.ValueBox1.SetFocus
 FMain.btnIngresar.Enabled = True
 Me.Close
End

Public Sub Form_Open()
  FMain.Enabled = False
  Me.Center
  Me.Title = "Ingrese su nombre"
End

Public Sub btnCancelar_Click()
  Me.Close
  FMain.Enabled = True
  FMain.btnVer.Enabled = False
End



info:
' Gambas class file

Public Sub Form_Open()
 Me.Center
End

Public Sub Form_Leave()
  Me.Close
End



Código fuente:    AdivinarNumero-0.0.1.tar.gz
                  
Le agregue una lista de los numeros ingresados,
guarda recores en un archivo *.lst
sigue con errores pero.... se lo dejo para que practiquen modificaciones o agregados
 AdivinarNumero-0.0.2.tar.gz

AdivinarNumero_v0.0.3.tar.gz


domingo, 2 de junio de 2013

Usando el comando shell



' Gambas class file

'declaración de constantes ya que sudo, cat y pipe
'son comandos que seguramente usaremos mas de una vez
Public Const cat1 As String = " cat"
Public Const sudo1 As String = "sudo"
Public Const pipe1 As String = "|"

Public Sub Form_Open()
  Me.center
End
'creamos esta función así nos ahorramos código,
'jeje que algún programador explique como funciona una función
Public Function comandoymodificadores(fvar1 As String, fvar2 As String, fvar3 As String, fvar4 As String, fvar5 As String, fvar6 As String, fvar7 As String, fvar8 As String)
  Dim va1, va2, va3, va4, va5, va6, va7, va8, resultado As String
  va1 = fvar1
  va2 = fvar2
  va3 = fvar3
  va4 = fvar4
  va5 = fvar5
  va6 = fvar6
  va7 = fvar7
  va8 = fvar8
  Shell va1 & va2 & va3 & va4 & va5 & va6 & va7 & va8 To resultado
  TextArea1.Text = resultado
End

Public Sub btnifconfig_Click()
  Dim ifconfig1 As String
  ifconfig1 = "ifconfig"
  comandoymodificadores(ifconfig1, Null, Null, Null, Null, Null, Null, Null)

End

Public Sub btnuname_Click()
  Dim uname1, help1 As String
  help1 = " --help"
  uname1 = "uname"
  comandoymodificadores(uname1, help1, Null, Null, Null, Null, Null, Null)
End

Public Sub btngroup_Click()
  Dim group1, help1 As String
  group1 = " /etc/group"
  comandoymodificadores(sudo1, cat1, group1, Null, Null, Null, Null, Null)
End

Public Sub btnarchivo_Click()
  Dim grep1, dir1, nano1, xfile1 As String
  TextArea1.Clear
  grep1 = "grep"
  dir1 = " /proc/meminfo"
  nano1 = "nano"
  xfile1 = "/home/vector/Escritorio/memtoral.txt"
  comandoymodificadores(grep1, cat1, dir1, pipe1, nano1, xfile1, Null, Null)
  TextArea1.Text = "Acción ejecutada"
End

Public Sub btnsalir_Click()
  Me.Close
End
'Gracias Shell, con tu código pude resolver ( Shell orden & modificador To TextArea1.Text )



lunes, 27 de mayo de 2013

Estado de memoria



'declaramos variables
Public memlibre As String
Public memusada As String
Public memtotal As String
Public largo1 As Integer
Public largo2 As Integer
Public fecha1 As String

Public Sub Form_Open()
  Dim i, e As Integer 'contadores de los for
  Dim b, z, x, w, mbmemusada, mbmemlibre, mbmemtotal As String
 'exec ejecuta el comando como en consola y deja el resultado
 'en la variable fecha1. en consola seria: date +%A\ %d\ %B\ %Y  
 'devuelve este formato: lunes 27 mayo 2013
Exec ["date", "+%A %d %B %Y"] To fecha1
'agregamos un título personalizado a nuestro formulario
  Me.Title = "Estado de Memoria" & " - " & fecha1
'centramos el formulario
  Me.Center
'obtenemos las 2 primeras lineas de informacion de memoria de /proc/meminfo


  Exec ["grep", "MemTotal:", "/proc/meminfo"] To memtotal
  Exec ["grep", "MemFree:", "/proc/meminfo"] To memlibre
  largo1 = Len(memtotal) 'obtenemos el largo de la primera línea del archivo /proc/meminfo
  largo2 = Len(memlibre) 'obtenemos el largo de la segunda línea del archivo /proc/meminfo
'aquí empieza el proceso de extracción de los números que es el dato que nos interesa mostrar
'tomamos el primer caracter, si es un número lo agregamos a la variable x sino seguimos
'en el ciclo hasta recorrer todo el string sacando la cifra numérica.
'La variable x va concatenando los números que vamos encontrando
'asi se muestra el dato crudo:
' MemTotal:        1805400 kB
' MemFree: 184108 kB

For i = 1 To largo1 Step +1
  z = Mid$(memtotal, i, 1)
   Select Case Asc(z)
    Case 47 To 57
      x &= z
   End Select
Next
'El mismo proceso que el for anterior, pero con la sengunda línea obtenida de /proc/meminfo
For e = 1 To largo2 Step +1
  b = Mid$(memlibre, e, 1)
   Select Case Asc(b)
    Case 47 To 57
      w &= b
    End Select
Next
  'Convirtiendo de kb a mb
  mbmemtotal = Int(x / 1024)
  mbmemlibre = Int(w / 1024)
 'Ingreso de datos de memoria total en los textbox
  txtmemtotalmb.Text = mbmemtotal & " MB"
  txtmemtotalkb.Text = x & " KB"
  'Ingreso de datos de memoria libre en los textbox
  txtlibremb.Text = mbmemlibre & " MB"
  txtLibrekb.Text = w & " KB"
  'Calculo e ingreso de datos de memoria usada en los textbox
  mbmemusada = mbmemtotal - mbmemlibre
  memusada = mbmemusada * 1024
  txtusadamb.Text = mbmemusada & " MB"
  txtusadakb.Text = memusada & " KB"

End

Public Sub btnSalir_Click()
'cerramos el programa
  Me.close
End


Reverseme

Reverseme


Aquí les dejo el código de un simple programa que a los entusiastas que recién comienzan a programar en Gambas sabrán valorar, no así los programadores que sin dudas largaran una sonrisa jaja. Se trata simplemente de poner los caracteres de un texto cualquiera en forma inversa. Ejemplo: si ponemos la palabra HOLA y presionamos en el botón “Poner al revés ahora”, el resultado sera ALOH. La idea es ir compartiendo código, enlaces, manuales y lo que sea sobre la programación en gambas.

----------------------------------------- Comienzo de código -----------------------------------------
' Gambas class file

Public palabrax As String
Public revirtiendo As String
Public largoX As Integer


Public Sub Form_Open()
  Me.Center
  Me.Title = "Reverseme"
  TextBox1.Text = "odinevneiB"
  Button1.SetFocus
End

Public Sub Button1_Click()
  Dim palabrarevertida As String
  Dim contador As Integer

  If TextBox1.Text = Null Then
    Message.Info("No a ingresado texto")
    TextBox1.SetFocus
  Else

  palabrax = TextBox1.Text
  largoX = Len(palabrax)

  For contador = largoX To 1 Step -1
    revirtiendo = Mid$(palabrax, contador, 1)
    palabrarevertida &= revirtiendo
    TextBox2.Text = palabrarevertida
  Next
  Endif
End

Public Sub Button3_Click()
  Dim pregunta As String
    pregunta = Message.Question("Esta seguro que quiere salir del programa?", "Sí, estoy seguro", "No, quiero volver")
  Select Case pregunta
    Case 1
      Me.Close
    Case 2
      Return
  End Select
End

Public Sub Button2_Click()
  TextBox1.Text = ""
  TextBox2.Text = ""
  TextBox1.SetFocus
End

Public Sub Button4_Click()
  Message.Info("Programado por postapase \n http://postapase.blogspot.com/ \n Gambas 3.4 \n http://gambas.sourceforge.net/es/main.html")
End

----------------------------------------- Final del código -----------------------------------------


Descargar código fuente: reverseme-0.0.1.tar.gz