logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

VisualBasic6 - Jak przypisać akcję do klawisza, np. a?

romantv 08 Mar 2006 20:43 1343 6
REKLAMA
  • #1 2391318
    romantv
    Poziom 17  
    Posty: 328
    Pomógł: 11
    Ocena: 8
    Witaj !
    Jak za pomocą klawisza wykonać polecenie w programie VisualBasic6 .
    Nie chodzi mi o menu, tam można przypisać skruty klawiszowe.
    Chodzi mi o to jak naduszę np. "a" program wykonuje jakąś czynność.
    Gzięki!
  • REKLAMA
  • Pomocny post
    #2 2391571
    tomi140
    Poziom 14  
    Posty: 49
    Pomógł: 8
    Ocena: 14
    Witam.
    By program wykonał pewne czynnosci po wciśnięciu danego klawisza musi on wykryć jego wciśniecie. Można to zrobić za pomocą np. takiego kodu :
    Cytat:

    Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 97 Then '97 to kod klawisza a
    MsgBox ("Naciśnięto klawisz a.") 'instrukcje
    End If
    End Sub


    Pozdrawiam tomi140
  • REKLAMA
  • Pomocny post
    #3 2392674
    sivex
    Poziom 27  
    Posty: 815
    Pomógł: 113
    Ocena: 25
    Masz do wyboru:

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)


    Private Sub Form_KeyPress(KeyAscii As Integer)


    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)



    Znajduja sie one w rozwijanym pasku procedur kodu formatki.

    KeyCode mozesz okreslac za pomoca stalych:
    vbKeyA
    vbKeyS
    vbKeyEnter
    ....


    Private Sub Form_KeyUp(KeyCode As Integer, Shift As Integer)

    If KeyCode = vbKeyA Then
    '(kod do wykonania)
    End If

    End Sub


    pozdr.
  • Pomocny post
    #4 2396371
    Piotrek.pxf
    Poziom 27  
    Posty: 806
    Pomógł: 118
    Ocena: 65
    Taka medoda jest dobra, jeżeli okno programu jest aktywne, a jeśli chcesz wykryć klawisze naciśnięte w Windowsie, to użyj funkcji:

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

    Ta funkcja dobra jest do tworzenia keyloggerów lub skrótów klawiszowych działających w całym Windowsie :)
  • REKLAMA
  • #5 2399061
    romantv
    Poziom 17  
    Posty: 328
    Pomógł: 11
    Ocena: 8
    Witam i bardzo dziękuje za pomoc!!!
    Sporo zajmuje się projektowaniem ukladów elektronicznych, bardziej TV
    bo jestem technikiem tv i pracuje w TV Ale oczywiście jeśli bedę mógł pomóc to mój e-mail romantv(_at_)promax.media.pl
    Jeszcze raz bardzo dziekuje i jeśli to możliwe podaj swój e-mail.
    Pozdrawiam.

    Dodano po 3 [godziny] 31 [minuty]:

    mam jeszcze jedno pytanko :)

    Private Sub Form_KeyPress(KeyAscii As Integer)

    keycode = vbKey1
    punkt3 = punkt3 + 1
    Label1.Caption = punkt3
    If punkt3 = 5 Then
    punkt3 = -1
    end if

    keycode = vbKey2
    punkt3 = punkt3 - 1
    Label1.Caption = punkt3
    If punkt3 <= -1 Then
    punkt3 = 0
    Label1.Caption = 0

    End If
    End Sub


    Potrzebuje by więcej mogło być klawiszy ,ale coś mi nie wychodzi .
    Co robie żle ??
    Dzieki za pomoc.

    Dodano po 7 [minuty]:

    Poprawiłem program i jest tak :

    Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
    If KeyCode = vbKey1 Then
    punkt3 = punkt3 + 1
    Label1.Caption = punkt3
    ElseIf punkt3 = 5 Then
    punkt3 = -1
    End If

    If KeyCode = vbKey2 Then
    punkt3 = punkt3 + 10
    Label1.Caption = punkt3
    ElseIf punkt3 = 5 Then
    punkt3 = -1
    End If

    If KeyCode = vbKey3 Then
    punkt3 = punkt3 + 100
    Label1.Caption = punkt3
    ElseIf punkt3 = 5 Then
    punkt3 = -1
    End If
    End Sub



    Czy jest to poprawnie ??
  • REKLAMA
  • #6 2401535
    romantv
    Poziom 17  
    Posty: 328
    Pomógł: 11
    Ocena: 8
    Jednak okazuje sie ze jest jeszcze jeden problem obralem metode taka:
    Private Sub Form_KeyPress(KeyAscii As Integer)
    If KeyAscii = 49 Then
    punkt3 = punkt3 + 1
    Label1.Caption = punkt3
    End If
    If punkt3 = 6 Then
    punkt3 = -1
    End If

    If KeyAscii = 50 Then
    punkt3 = punkt3 - 1
    Label1.Caption = punkt3
    End If
    If punkt3 <= -1 Then
    punkt3 = 0
    Label1.Caption = 0
    End If

    If KeyAscii = 51 Then
    punkt4 = punkt4 + 1
    Label2.Caption = punkt4
    End If
    If punkt4 = 6 Then
    punkt4 = -1
    End If

    If KeyAscii = 52 Then
    punkt4 = punkt4 - 1
    Label2.Caption = punkt4
    End If
    If punkt4 <= -1 Then
    punkt4 = 0
    Label2.Caption = 0
    End If
    end sub

    programik dziala poprawnie tylko klawisze takie jak F1 do F12 nie dzialaja
    cod ich : 112 113 do 123
    jeszcze inne klawisze nie dzialaja takie jak Home itp.

    Gdzie problem przosze o pomoc.

Podsumowanie tematu

✨ W dyskusji omówiono metody przypisywania akcji do naciśnięcia klawisza w programie VisualBasic6, niezależnie od menu i standardowych skrótów klawiszowych. Zaproponowano wykorzystanie zdarzeń formularza takich jak Form_KeyDown, Form_KeyPress oraz Form_KeyUp do wykrywania naciśnięć klawiszy. Przykładowo, w zdarzeniu Form_KeyUp można sprawdzać wartość KeyCode i porównywać ją z stałymi vbKeyA, vbKey1 itp., aby wywołać odpowiednie akcje. Wskazano, że zdarzenie KeyDown obsługuje również klawisze funkcyjne (F1-F12) oraz klawisze specjalne (Home, End), które nie działają w Form_KeyPress. Dla wykrywania klawiszy globalnie w systemie Windows zasugerowano użycie funkcji API GetAsyncKeyState z biblioteki user32.dll. Autor zgłosił problem z obsługą wielu klawiszy i poprawnym działaniem liczników przy naciśnięciach, co rozwiązano przez odpowiednie warunki w procedurach zdarzeń. Podkreślono, że zdarzenia KeyDown i KeyUp są bardziej odpowiednie do obsługi klawiszy funkcyjnych i specjalnych niż KeyPress.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA