Comunidad Gambas-es
Juego con el foco - Versión para impresión

+- Comunidad Gambas-es (https://gambas-es.org)
+-- Foro: Gambas (https://gambas-es.org/forum-3.html)
+--- Foro: General (https://gambas-es.org/forum-4.html)
+--- Tema: Juego con el foco (/thread-1198.html)



Juego con el foco - Shell - 27-01-2023

Buenas!.

En este ejemplo se trata de escribir la palabra "gambas" en todas las cajas de texto, evitando
los cambios de foco en los texboxes.

[Imagen: qXHIHKk.png]

Código:
' Gambas class file

'Fuentes
'https://icon-icons.com

Const NUMCAJASDETEXTO As Integer = 4
Const PALABRA As String = "gambas"
Const TIEMPO As Integer = 400 'Cada 400 milisegundos cambia el foco

Private etiqueta1 As Label
Private etiqueta2 As Label
Private cajadetexto As TextBox
Private Timer1 As Timer
Private atextboxes As New TextBox[]
Private indice As Integer

Public Sub Form_Open()

  Dim ocatexto As Object

  Randomize

  With Me
    .Arrangement = Arrange.Vertical
    .Spacing = True
    .Margin = True
    .Padding = 20
    .AutoResize = True
  End With

  etiqueta1 = New Label(Me)
  With etiqueta1
    .Font = Font["Arial, 11, Bold"]
    .Alignment = Align.Center
    .Text = PALABRA
    .H = 50
    .W = 150
  End With

  For j As Integer = 0 To NUMCAJASDETEXTO - 1
    cajadetexto = New TextBox(Me) As "Manipula"
    With cajadetexto
      .Font = Font["Arial, 18, Bold"]
      .Alignment = Align.Left
      .H = 50
      .w = 150
    End With
  Next

  etiqueta2 = New Label(Me)
  With etiqueta2
    .Font = Font["Arial, 11, Bold"]
    .Alignment = Align.Center
    .H = 50
    .W = 150
  End With

  For Each ocatexto In Me.Controls
    If ocatexto Is TextBox Then atextboxes.Add(ocatexto)
  Next

  indice = Rand(0, atextboxes.max)
  atextboxes[indice].SetFocus()

  Timer1 = New Timer As "Reloj"
  Timer1.Delay = TIEMPO
  Timer1.Start


End


Public Sub Reloj_Timer()

  indice += Rand(-1, 1)
  'Si indice es menor que cero
  If indice < 0 Then
    'Asignamos a indice el valor máximo del array de cajas de texto
    indice = atextboxes.Max
    'Si indice supera el valor máximo del array de cajas de texto
  Else If indice > atextboxes.Max
    'Asignamos el indice 0
    indice = 0
  Endif
  'Ponemos el foco en el elemento del array atexboxes con valor indice
  atextboxes[indice].SetFocus()

End

Public Sub Manipula_Change()

  Dim ocatexto As Object
  Dim cuenta As Integer

  For Each ocatexto In Me.Controls
    If ocatexto Is TextBox Then
      'Si los caracteres de la cadena Palabra con longitud de ocatexto es distinto al texto de ocatexto
      If Left(PALABRA, Len(ocatexto.text)) <> ocatexto.text Then
        etiqueta2.Text = "Prueba no superada!"
        Timer1.Stop
        DeshabilitarTextBoxes()
        Stop Event
      Endif
      'Si la cadena que tiene ocatexto es igual a PALABRA entonces cuenta uno más
      If ocatexto.Text = PALABRA Then cuenta += 1
    Endif
  Next

  'Si cuenta es igual al número de cajas de texto
  If cuenta = atextboxes.Count Then
    etiqueta2.text = "Prueba Superada!"
    Timer1.Stop
    DeshabilitarTextBoxes
    Stop Event
  Endif
  cuenta = 0

End

Public Sub DeshabilitarTextBoxes()

  Dim ocatexto As Object

  'Deshabilitamos cada una de las cajas de texto del formulario
  For Each ocatexto In Me.Controls
    If ocatexto Is TextBox Then ocatexto.Enabled = False
  Next

End

Me hubiera gustado usar .Next o .Previous en el evento Timer, pero de la forma que lo hice es más difícil ganar ya que es más aleatorio. Smile
Ah, si, no se usa el ratón. Debería haber deshabilitado el uso de ratón si es que es posible.

Saludos


RE: Juego con el foco - Shordi - 27-01-2023

Buff, demasiado rápido para mí con mis reflejos de viejuno. Ponle media hora al timer y hablamos. Rolleyes


RE: Juego con el foco - Shell - 27-01-2023

(27-01-2023, 20:52)Shordi escribió: Buff, demasiado rápido para mí con mis reflejos de viejuno. Ponle media hora al timer y hablamos

Big Grin Big Grin