Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
640to644
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
640to644
640to644
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Tastendruck abfangen

Tastendruck abfangen
25.07.2005 16:02:55
Christian11
Moinsen,
wie kann ich in einer Tabelle einen Tastendruck abfangen?
Ich möchte einen kleinen UPN-Rechner programmieren und brauche daher erstmal eine Möglichkeit die Tasten "+", "-", "*" und "/" abzufangen.
Geht das überhaupt ohne eigenes Formular?
MfG
Christian

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tastendruck abfangen
25.07.2005 17:10:45
Nepumuk
Hi,
indem du in einem Timer den Tastaturpuffer ausliest. Kennst du dich mit API aus?
Was ist eigentlich ein UPN - Rechner? (umgekehrte polnische Notation ?)
In einem Userform wäre das natürlich viel einfacher. :-)
Gruß
Nepumuk
Excel & VBA – Beispiele
AW: Tastendruck abfangen
26.07.2005 07:34:34
Christian11
Hallo Nepumuk,
ja ein wenig kenne ich mich mit API aus...
Ein UPN Rechner ist in der Tat in Rechner mit der Eingabelogik "umgekehrte polnische Notation".
Normalerweise gibst du eine Berechnung in den Taschenrechner ein, wie Du sie als Formel aufschreibst (5+3)/(7-2)=
Das sind 12 Tastenanschläge.
Bei UPN gibst Du ein "5" "Enter" "3" "+" "7" "Enter" "2" "-" "/"
Das sind 9 Tastenanschläge.
UPN Eingabelogik ist also effizienter bei der Eingabe. Um aber das für viele uzunächst ngewohnte Verhalten von UPN darzustellen, wollte ich mal eben einen kleinen Emulator in Excel schreiben. Aber mal eben ist das anscheinend nicht gemacht...
MfG
Christian
Anzeige
AW: Tastendruck abfangen
26.07.2005 08:15:33
Nepumuk
Hi,
dann kommst du ja klar damit:
Option Explicit

Private Declare Function GetKeyboardState Lib "user32.dll" ( _
    ByRef kbArray As KeyboardBytes) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hwnd As Long, _
    ByVal nIDEvent As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Type KeyboardBytes
    kbByte(0 To 255) As Byte
End Type

Private Const VK_DIVIDE = &H6F
Private Const VK_MULTIPLY = &H6A
Private Const VK_ADD = &H6B
Private Const VK_SUBTRACT = &H6D
Private Const VK_DECIMAL = &H6E

Private lnghWnd As Long

Public Sub prcStart()
    lnghWnd = FindWindow("XLMAIN", Application.Caption)
    SetTimer lnghWnd, 0, 100, AddressOf prcTimer
End Sub

Public Sub prcStop()
    KillTimer lnghWnd, 0
End Sub

Public Sub prcTimer(ByVal hwnd As Long, ByVal nIDEvent As Long, _
        ByVal uElapse As Long, ByVal lpTimerFunc As Long)

    Call prcGetKeys
End Sub

Private Sub prcGetKeys()
    Dim udtkbArray As KeyboardBytes
    GetKeyboardState udtkbArray
    If udtkbArray.kbByte(VK_DIVIDE) > 1 Then
        Debug.Print "Dividieren"
    ElseIf udtkbArray.kbByte(VK_MULTIPLY) > 1 Then
        Debug.Print "Multiplizieren"
    ElseIf udtkbArray.kbByte(VK_ADD) > 1 Then
        Debug.Print "Addieren"
    ElseIf udtkbArray.kbByte(VK_SUBTRACT) > 1 Then
        Debug.Print "Subtrahieren"
    ElseIf udtkbArray.kbByte(VK_DECIMAL) > 1 Then
        Debug.Print "Komma"
    End If
End Sub

Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige