# control con visual basic



## k@l@m@r (Abr 3, 2006)

Hola a todos!

La verdad recién estoy empezando con esto de programación en Visual Basic y quisiera saber si alguien sabe bien como hacer que un boton de comandos responda solamente al presionar una sola tecla.

Me explico: Si por ejemplo, si hiciera una aplicacion que me permita encender una lampara, y quisiera que la lampara se encienda solo al presionar la tecla "L"  y al volver a presionar la misma tecla, se apague la lampara.

Se que existe el comando KEYPRESS, KEY UP, y KEY DOWN pero no se bien como utilizar la sintaxis para lo que deseo.

Tambien agradeceria que alguien me ayudara a hacer lo mismo pero con las teclas de direccion del teclado, tengo entendido  que ellas no poseen caracteres reconocidos como ascii o si?

de antemano muchas gracias y cualquier ayudita es bien recibida


----------



## jmax6 (Abr 3, 2006)

tendrias q crear un ciclo cuando presiones el boton le des un valor, cuando vuelvas a darle estara en es valor y vuelves a cambiarle el valor de nuevo. ej

general
n= 0 ;0=apagado, 1= encendido

(keypress)

if n=0 then
; enciende lampara
n=1
if n= 1 then
;apagar lampara

end if 

es un ejemplo para captar la idea.

en esta pagina estan los scancodes del teclado por si te sirve de algo.

http://atc.ugr.es/docencia/udigital/ap05.html

esto es solo una ayuda espero q te sirva de apoyo.


----------



## jmax6 (Abr 3, 2006)

Puedes entrar tambien aqui tal vez encuentres algo q te pueda ayudar

http://www.elguille.información/vb/default.aspx


----------



## k@l@m@r (Abr 4, 2006)

muchas gracias jmax6!!!! tratare de intentarlo con tu información!!!


----------



## retrofit (Ago 10, 2011)

jmax6 dijo:


> tendrias q crear un ciclo cuando presiones el boton le des un valor, cuando vuelvas a darle estara en es valor y vuelves a cambiarle el valor de nuevo. ej
> 
> general
> n= 0 ;0=apagado, 1= encendido
> ...



Buenas noches.

Para cambiar el estado de una variable tipo "Byte" una forma muy elegante es hacerlo con

 una función EXOR 1

Mira este código...

_Dim Numero(26) As Byte  ' Reservamos 26 posiciones de la "A" a la "Z"
Public tecla As Integer
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
tecla = KeyCode

If tecla > 64 And tecla < 91 Then 'De la "A" a la "Z"
     tecla = tecla - 64 'Restamos 64 para ponernos en el rango de 1 a 26
     Procesar   ' Vamos a la Sub Rutina "Procesar"
End If
End Sub

Public Sub Procesar()
  Cls ' Borramos pantalla
  Numero(tecla) = Numero(tecla) Xor 1  'Invertimos el valor que hay en cada posición
    For i = 1 To 26
           Print " " & Numero(i) & "  ";   ' Lo visualizamos   
    Next i
End Sub_

Solo tienes que abrir un formulario, no hace falta que pongas nigún control.
Procura que el formulario tenga suficiente anchura para visualizar la cadena completa
En la pantalla de codigo borra....


_Private Sub Form_Load()

End Sub_

Copia el código anterior y pégalo en la pantalla de código

Ejecútalo.


Pulsa cualquier tecla de la A a la Z
Verás que en el formulario aparece una ristra de ceros menos la posición correspondiente a la tecla pulsada que estará a 1.
Si pulsas la misma tecla, esa posición cambiará de valor.
Como verás el proceso es muy simple, solo tienes que procesar la variable Numero(x) dónde la x es el subindice de la variable Numero que tiene 25 posiciones.
Espero que te sea de utilidad.

Saludos.


----------

