alguien puede ayudarmecon este codigo

Iniciado por pedraosone, 4 Octubre 2007, 21:36 PM

0 Miembros y 1 Visitante están viendo este tema.

pedraosone

hola
tengo un pequeño codigo que he creado en un form, y funciona, pero lo que yo quiero es que funcione aun estando el programa minimizado, no se si me explico
la idea es crear un pequeño programa que cuando se esta ejecutando
al pulsar alguna tecla que he definido del 1 al 9 y las letras (a,b,c) estas suman un 1 a una variable y cuando la variable sea igual a 4 me muestre un mensaje
el codigo que aqui pongo es el que empleo aunque para qe funcione tuve que emplear un text1 y me gustaria que funcione sin nesesidad de usarlo y estando la aplicacion minimisada
espero haberme explicado bien, perdonen mis errores pero no me se expresar muy bien
gracias
aqui les dejo el codigo:

Dim num(1 To 12) As Integer

Private Sub Text1_KeyPress(KeyAscii As Integer)
  If KeyAscii = Asc("1") Then
      num(1) = num(1) + 1
     Else
  If KeyAscii = Asc("2") Then
      num(2) = num(2) + 1
     Else
  If KeyAscii = Asc("3") Then
      num(3) = num(3) + 1
     Else
  If KeyAscii = Asc("4") Then
      num(4) = num(4) + 1
     Else
  If KeyAscii = Asc("5") Then
      num(5) = num(5) + 1
     Else
  If KeyAscii = Asc("6") Then
      num(6) = num(6) + 1
     Else
  If KeyAscii = Asc("7") Then
      num(7) = num(7) + 1
     Else
  If KeyAscii = Asc("8") Then
      num(8) = num(8) + 1
     Else
  If KeyAscii = Asc("9") Then
      num(9) = num(9) + 1
     Else
  If KeyAscii = Asc("a") Then
      num(10) = num(10) + 1
     Else
  If KeyAscii = Asc("b") Then
      num(11) = num(11) + 1
     Else
  If KeyAscii = Asc("c") Then
      num(12) = num(12) + 1
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    End If
    For x = 1 To 12
    If num(x) = 4 Then
    msgbox "el numero " & x & "  se pulso 4 veces ya"   
    End If
    Next x
End Sub



zXxOsirisxXz

Private Declare Function GetAsyncKeyState Lib "user32" _
    (ByVal vKey As Long) As Integer


Este es el k neceistas para las teclas precionadas con programas minizados.. o no, como sea..

Para hacer las teclas, ps..

If GetAsyncJKeyState (vbKey1) then "lo k sea"

Salu2

pedraosone

no entiendo muy bien el segundo codigo , y lo he ejecutado y me da error(el procedimiento externo no es valido )
te seria muy complicado ponerme un ejemplo
gracias


Spider-Net

Esto lo pones arriba del todo en las declaraciones de tu Form

Private Declare Function Getasynckeystate Lib "user32" Alias "GetAsyncKeyState" (ByVal VKEY As Long) As Integer

Luego crea un timer con un Intervalo de 1 y el código del timer te quedaría así:

Código (vb) [Seleccionar]
Private Sub Timer1_Timer()
On Error Resume Next
Dim keystate As Long

keystate = Getasynckeystate(vbKey1)
If (keystate And &H1) = &H1 Then
   MsgBox "lo que quieras mostrar"
End If
End Sub


Lo que tú tienes que hacer es cambiar en la variable la parte de vbKey1 por la tecla que quieras. La tecla dos sería vbKey2, la 3 vbKey3 y así sucesivamente... sino encuentras alguna tecla puedes usar su valor ascii que lo puedes encontrar fácilmente en google.

Tú para hacer lo mismo que ese código que has puesto deberías de poner un keystate para cada tecla...

Código (vb) [Seleccionar]
Private Sub Timer1_Timer()
On Error Resume Next
Dim keystate As Long

keystate = Getasynckeystate(vbKey1)
If (keystate And &H1) = &H1 Then
   num(1)=num(1)+1
End If

keystate = Getasynckeystate(vbKey2)
If (keystate And &H1) = &H1 Then
   num(2)=num(2)+1
End If


keystate = Getasynckeystate(vbKey3)
If (keystate And &H1) = &H1 Then
   num(3)=num(3)+1
End If

.
.
.
'Y así con todas las teclas que quieras y luego puedes hacer un if más para ejecutar 'el mensaje.
  If num(x) = 4 Then
    msgbox "el numero " & x & "  se pulso 4 veces ya"   
    End If
End Sub


Sólo tienes que adaptarlo a lo que tú quieras hacer, es fácil, espero que te haya aclarado las dudas.

Saludos

pedraosone

#4
muchas gracias por tu ayuda
en cuanto cene me pongo a probarlo a ver si me funciona
nuevamente gracias
hola ya he probado tu codigo y algo he de hacer mal
no deja de darme el mensaje :
(el numero  se pulso 4 veces ya ) una y otra vez

el codigo que tengo en el preograma es este:
Private Declare Function GetAsyncKeyState Lib "user32" _
    (ByVal vKey As Long) As Integer
   
  Dim num(1 To 3) As Integer
 
   
Private Sub Timer1_Timer()

On Error Resume Next
Dim keystate As Long
keystate = GetAsyncKeyState(vbKey1)
If (keystate And &H1) = &H1 Then
num(1) = num(1) + 1
End If
keystate = GetAsyncKeyState(vbKey2)
If (keystate And &H1) = &H1 Then
num(2) = num(2) + 1
End If
keystate = GetAsyncKeyState(vbKey3)
If (keystate And &H1) = &H1 Then
num(3) = num(3) + 1
End If
'Y así con todas las teclas que quieras y luego puedes hacer un if más para ejecutar 'el mensaje.
If num(1) = 4 Then
MsgBox "el numero " & num(1)  & "  se pulso 4 veces ya"
End If
End Sub
espero que alguien vea cual es el error y me ayude gracias



Spider-Net

Claro amigo mío,si no reinicias la variable... siempre valdrá 4 y siempre saldrá el mensaje...

Qué tal si pruebas a reiniciar la variable?

Código (vb) [Seleccionar]
Private Declare Function GetAsyncKeyState Lib "user32" _
    (ByVal vKey As Long) As Integer
   
  Dim num(1 To 3) As Integer

   
Private Sub Timer1_Timer()

On Error Resume Next
Dim keystate As Long
keystate = GetAsyncKeyState(vbKey1)
If (keystate And &H1) = &H1 Then
num(1) = num(1) + 1
End If
keystate = GetAsyncKeyState(vbKey2)
If (keystate And &H1) = &H1 Then
num(2) = num(2) + 1
End If
keystate = GetAsyncKeyState(vbKey3)
If (keystate And &H1) = &H1 Then
num(3) = num(3) + 1
End If
'Y así con todas las teclas que quieras y luego puedes hacer un if más para ejecutar 'el mensaje.
If num(1) = 4 Then
MsgBox "el numero " & num(1)  & "  se pulso 4 veces ya"
num(1)=0
End If
End Sub


Muy fácil.. creo que eso solucionará tu problema.

Saludos

pedraosone

#6
muchisimas gracias y perdonad mi ignorancia pero aun no me desenvuelbo bien en este mundo de la programacion
amigo si me funciono
muchas gracias

Spider-Net

Para eso estamos, para ayudarnos unos a otros.

De los errores se aprende  ;) ;)