Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Teclado virtual

Estas en el tema de Teclado virtual en el foro de Visual Basic clásico en Foros del Web. Hola todos, tengo una pequeña aplicación que tiene 2 textbox, cuando selecciono alguna de estos 2 textbox, el sistema me llama a otro form teclado ...
  #1 (permalink)  
Antiguo 21/11/2012, 14:25
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Teclado virtual

Hola todos, tengo una pequeña aplicación que tiene 2 textbox, cuando selecciono alguna de estos 2 textbox, el sistema me llama a otro form teclado pongo código:

Código:
Private Sub txtUser_Click()

Teclado.Show

End Sub
esto como les comente me abre el form teclado, en est tengo mi diseño de un teclado tipo qwerty con numeros un enter un bloq mayus y una barra espaciadora, les dejo el codigo:

Código:
Private Sub Command1_Click(Index As Integer)

Select Case Index
    Case 27
        SendKeys " "
    Case 28
        Unload Me
    Case 29
        Command1(0).Caption = "q"
        Command1(1).Caption = "w"
        Command1(2).Caption = "e"
        Command1(3).Caption = "r"
        Command1(4).Caption = "t"
        Command1(5).Caption = "y"
        Command1(6).Caption = "u"
        Command1(7).Caption = "i"
        Command1(8).Caption = "o"
        Command1(9).Caption = "p"
        Command1(10).Caption = "a"
        Command1(11).Caption = "s"
        Command1(12).Caption = "d"
        Command1(13).Caption = "f"
        Command1(14).Caption = "g"
        Command1(15).Caption = "h"
        Command1(16).Caption = "j"
        Command1(17).Caption = "k"
        Command1(18).Caption = "l"
        Command1(19).Caption = "ñ"
        Command1(20).Caption = "z"
        Command1(21).Caption = "x"
        Command1(22).Caption = "c"
        Command1(23).Caption = "v"
        Command1(24).Caption = "b"
        Command1(25).Caption = "n"
        Command1(26).Caption = "m"
        Command1(29).Visible = False
        Command1(40).Visible = True
    Case 40
        Command1(0).Caption = "Q"
        Command1(1).Caption = "W"
        Command1(2).Caption = "E"
        Command1(3).Caption = "R"
        Command1(4).Caption = "T"
        Command1(5).Caption = "Y"
        Command1(6).Caption = "U"
        Command1(7).Caption = "I"
        Command1(8).Caption = "O"
        Command1(9).Caption = "P"
        Command1(10).Caption = "A"
        Command1(11).Caption = "S"
        Command1(12).Caption = "D"
        Command1(13).Caption = "F"
        Command1(14).Caption = "G"
        Command1(15).Caption = "H"
        Command1(16).Caption = "J"
        Command1(17).Caption = "K"
        Command1(18).Caption = "L"
        Command1(19).Caption = "Ñ"
        Command1(20).Caption = "Z"
        Command1(21).Caption = "X"
        Command1(22).Caption = "C"
        Command1(23).Caption = "V"
        Command1(24).Caption = "B"
        Command1(25).Caption = "N"
        Command1(26).Caption = "M"
        Command1(29).Visible = True
        Command1(40).Visible = False
    Case Else
        Focus
        SendKeys Command1(Index).Caption
End Select

End Sub
Como pueden ver esto9y asignando algunas funciones a algunos de los botones como el space el espacio en blanco el de bloqueo mayusuculas para que me cambie las letras a minusculas y otro igual para que las cambie a mayusculas, en el final esta lo importante:

Case Else
Focus
SendKeys Command1(Index).Caption
End Select

Yo tenia pensado usar focus en los textbox, pero como estos estan en otro form no me responde el sistema, ademas de que la idea seria de que el focus lo haga segun el textbox desde el que llame al form teclado.

No se si me explique bien, espero me puedan dar alguna pista de como hacer esto.

Saludos y gracias.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #2 (permalink)  
Antiguo 22/11/2012, 23:48
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Teclado virtual

No hace falta que me den el codigo (eso seria estupendo), pero si que me orienten que tipo de funcion podria usar y yo me encargo de investigar mas sobre ella.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #3 (permalink)  
Antiguo 25/11/2012, 15:30
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Teclado virtual

Hola:

Algunas aclaraciones para que puedas continuar, como veo que apuestas por seguir investigando y aprender por ti mismo (me parece lo mas adecuado) te comento un par de cosas a tener en cuenta en lo que estas haciendo:

Para asignar desde un formulario el foco a un control que esta en otro, debes anteponer al mismo el nombre del formulario o sea, por ejemplo desde Form2 podrías hecr Form1.Text1.SetFocus

Por otra parte no me parece adecuado que utilices el Sendkeys si conoces el nombre del control al cual quieres enviar las pulsaciones, ya que sería mejor utilizar las propiedades del propio control para no andar jugando constantemente con el setfocus ya que esto te va a causar un cambio de foco en los formularios que no sea del todo correcto.

De todos modos, prueba tu sistema y comenta.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #4 (permalink)  
Antiguo 07/12/2012, 18:37
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Teclado virtual

Ok en base a lo comentado decide trabajarlo de otra manera modifique mi traclado para que en este tenga un textbox y un label, la idea es que ahora el focus se haga en el texbox que siempre es el mismo, con eso ya esta, y el cambo labes se completa con el dato de un trim que almacene, espero me sigan hasta aqui, les dejo el codigo:

Código:
Private Sub Command1_Click(Index As Integer)

Select Case Index
    Case 27
        SendKeys " "
    Case 28
        Unload Me
    Case 29
        Command1(0).Caption = "q"
        Command1(1).Caption = "w"
        Command1(2).Caption = "e"
        Command1(3).Caption = "r"
        Command1(4).Caption = "t"
        Command1(5).Caption = "y"
        Command1(6).Caption = "u"
        Command1(7).Caption = "i"
        Command1(8).Caption = "o"
        Command1(9).Caption = "p"
        Command1(10).Caption = "a"
        Command1(11).Caption = "s"
        Command1(12).Caption = "d"
        Command1(13).Caption = "f"
        Command1(14).Caption = "g"
        Command1(15).Caption = "h"
        Command1(16).Caption = "j"
        Command1(17).Caption = "k"
        Command1(18).Caption = "l"
        Command1(19).Caption = "ñ"
        Command1(20).Caption = "z"
        Command1(21).Caption = "x"
        Command1(22).Caption = "c"
        Command1(23).Caption = "v"
        Command1(24).Caption = "b"
        Command1(25).Caption = "n"
        Command1(26).Caption = "m"
        Command1(29).Visible = False
        Command1(40).Visible = True
    Case 40
        Command1(0).Caption = "Q"
        Command1(1).Caption = "W"
        Command1(2).Caption = "E"
        Command1(3).Caption = "R"
        Command1(4).Caption = "T"
        Command1(5).Caption = "Y"
        Command1(6).Caption = "U"
        Command1(7).Caption = "I"
        Command1(8).Caption = "O"
        Command1(9).Caption = "P"
        Command1(10).Caption = "A"
        Command1(11).Caption = "S"
        Command1(12).Caption = "D"
        Command1(13).Caption = "F"
        Command1(14).Caption = "G"
        Command1(15).Caption = "H"
        Command1(16).Caption = "J"
        Command1(17).Caption = "K"
        Command1(18).Caption = "L"
        Command1(19).Caption = "Ñ"
        Command1(20).Caption = "Z"
        Command1(21).Caption = "X"
        Command1(22).Caption = "C"
        Command1(23).Caption = "V"
        Command1(24).Caption = "B"
        Command1(25).Caption = "N"
        Command1(26).Caption = "M"
        Command1(29).Visible = True
        Command1(40).Visible = False
    Case Else
        campotec.SetFocus
        SendKeys Command1(Index).Caption
End Select

End Sub
y

Código:
Private Sub Form_Load()

tituloteclado.Caption = titulotec

End Sub
Y en el formulario anterior tengo lo siguiente:

Código:
Private Sub txtPass_Click()

titulotec = Trim("Ingrese la Contraseña")
Teclado.Show

End Sub

Private Sub txtUser_Click()

titulotec = Trim("Ingrese el Usuario")
Teclado.Show

End Sub
De esta manera me cambia la leyenda del label en base a que textbos seleccione, ahora lo que quiero hacer es mandar el dato que complete en el textbox del teclado al textbox de mi primer form.

Yo estaba pensando en hacer algo asi como el trim pero a la inversa, pero no he podido encontrar nada, espero me puedan ayudar con esto con algun tip para esto.

Saludos y gracias.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #5 (permalink)  
Antiguo 10/12/2012, 14:50
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Exclamación Respuesta: Teclado virtual

Bueno les comento que se ocurrio lo siguiente:

en el codigo del primer textbox agrege lo siguiente:

Código:
Private Sub txtUser_Click()

nombreForm = Trim("login")
datoBox = Trim("txtUser")
titulotec = Trim("Ingrese el Usuario")
Teclado.Show

End Sub
de esta manera tengo el nombre del form y del textbox almacenados, entonces en el teclado tengo un boton que es enter que se supone cierra el mismo y manda el datos al box, con el siguiente codigo:

Código:
Public Sub enter_Click(Index As Integer)

nombreForm.datoBox.Text = campotec.Text
Unload Me
    
End Sub
el detalle esta en que al seleccionar el boton me da un error que dice:

Compile error: Invalid qualifier

yo pense que esto era porque el boton lo tenia como private sub, pero ya lo cambie a public y me sigue dando el mismo error.

Por favor aydenme con este error, o busque en internet pero no hay mucho y segun yo creo si lo soluciono ya deberia funcionar lo que quiero resolver.


Saludos.
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #6 (permalink)  
Antiguo 31/12/2012, 03:59
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Teclado virtual

De momento creo que estas quitando los espacios a un texto fijo, en lugar de al texto de tu textbox:

nombreForm = Trim("login")
datoBox = Trim("txtUser")
titulotec = Trim("Ingrese el Usuario")
Teclado.Show

seria:

Imagino que estas 3 son variables globales:
nombreForm = "login" ' esta sera para saber quien llama al teclado.
datoBox = Trim(txtUser) ' esto supongo que quieres cargarlo desde un textbox llamado txtuser de este mismo form.
titulotec = "Ingrese el Usuario" ' y esto sera el titulo del teclado, que supongo que se cargara al hacerse visible

Teclado.Show

Por otro lado tienes 2 fallos:

Public Sub enter_Click(Index As Integer)

nombreForm.datoBox.Text = campotec.Text
Unload Me

End Sub

este boton es parte de una matriz de botones, y si no le dices que index es el que debe pulsar "enter", todos los botones de la matriz pulsaran "enter"
Si solo tienes un boton en la matriz no hay problema.

El otro fallo (y por el que te da error) es que no puedes llamar a un formulario usando una variable de texto:
nombreForm.datoBox.Text = campotec.Text

Lo mas facil es que hagas un select case:

Select case nombreform
case "login"
form1.datobox.text=campotec.text
case "form2"
form2.datobox.text.......
case "form3"....

end select
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #7 (permalink)  
Antiguo 02/01/2013, 12:57
Avatar de gasuton  
Fecha de Ingreso: octubre-2010
Ubicación: Abandonware
Mensajes: 132
Antigüedad: 13 años, 6 meses
Puntos: 2
Respuesta: Teclado virtual

PKJ es muy interesante tu respuesta, pero si entiendo bien tendría que tener una case para cada form que exista en el sistema.

Y ya he logrado resolver esto con mucho menos código, gracias a la ayuda de otro gran programador de la siguiente manera:

Código:
Public Sub enter_Click(Index As Integer)

Dim frm As Form
Dim ctl As Control
For Each frm In Forms
    If frm.Name = nombreForm Then
        For Each ctl In frm.Controls
            If ctl.Name = datoBox Then
                ctl.Text = campotec.Text
            End If
        Next ctl
    End If
Next frm

Unload Me
    
End Sub
Saludos
__________________
Ley numero 1: Si tu sistema falla seguro es una problema con la inteface entre el teclado y la silla.
Ley numero 2: El programador jamas tiene la culpa.
Ley numero 3: no me acuerdo
  #8 (permalink)  
Antiguo 02/01/2013, 15:10
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 8 meses
Puntos: 29
Respuesta: Teclado virtual

En efecto. Ese es el mejor método. Yo estoy algo oxidado ultimamente y opté por la solución mas sencilla.
Suponía que no tendrías demasiados forms en tu proyecto y para 7 u 8 forms me parecía una buena solución.
El caso era que usaras la variable nombreForm para manipular el form de un modo indirecto y es lo que has hecho.
Mi otra opción era crear una variable nombreForm de tipo Form, y en lugar de asignarle el nombre la asociaras al form en uso y la podrías utilizar como lo estabas haciendo, pero eso me obligaba a hacer alguna prueba antes de escribir el mensaje y me dió pereza.

Suerte y feliz año.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
  #9 (permalink)  
Antiguo 03/01/2013, 10:07
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Teclado virtual

Hola, para mi esto es una manera de complicarse la vida. Cada maestrillo tiene su librillo pero imagina lo siguiente:

Un formulario llamado Teclado, donde tenemos el teclado dibujado. Cada una de las teclas es un Command de una Matriz en este sencillo ejemplo le he llamado a los botones Tecla y sería algo similar a esto:

[A] [B] [C] [<][Salir]
[1] [2] [3] [Aceptar]

El número de los indices en este caso no tiene importancia.

Este es el código dentro del formulario:

Código vb:
Ver original
  1. Option Explicit
  2. Dim CampoTexto As TextBox
  3.  
  4. Public Sub MiTeclado(Texto As TextBox, Titulo As String)
  5.   Set CampoTexto = Texto
  6.   Me.Caption = Titulo
  7.   Me.Show vbModal
  8. End Sub
  9.  
  10. Private Sub tecla_Click(Index As Integer)
  11.   Select Case tecla(Index).Caption
  12.     Case "Salir"
  13.       CampoTexto.Text = ""
  14.       Unload Me
  15.     Case "Aceptar"
  16.       Unload Me
  17.     Case "<"
  18.       If CampoTexto.Text <> "" Then CampoTexto.Text = Left$(CampoTexto.Text, Len(CampoTexto.Text) - 1)
  19.     Case Else
  20.       CampoTexto.Text = CampoTexto.Text & tecla(Index).Caption
  21.   End Select
  22. End Sub


Supongamos ahora que queremos completar en el FormularioX un campo de Texto llamado Text1 y que la pregunta sea "Nombre"

Teclado.MiTeclado Text1, "Nombre"

Mas sencillo imposible, Ahora depende del gusto de cada uno la forma que le de al Teclado, y la versatilidad del mismo.

Puedes utilizar el index para saber que teclas se pueden convertir a Mayusculas y cuales no, por ejemplo:

Index 0 = a
Index 1 = b
Index 2 = c
Index 3 = d

con un simple bucle conviertes todas las teclas a mayúsculas o minúsculas

For Indice = 0 To 3
Tecla(Indice).Caption = Ucase(Tecla(Indice).Caption) 'Mayúsculas
Next

For Indice = 0 To 3
Tecla(Indice).Caption = Lcase(Tecla(Indice).Caption) 'Minúsculas
Next

En fin, la imaginacion al poder.

Saludos y feliz año a todos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...

Etiquetas: teclado, txt, virtual, formulario
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:33.