meta data for this page
  •  

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

tastaturabfrage [2012/06/17 17:09] (aktuell)
Zeile 1: Zeile 1:
 +====== Tastaturabfrage ======
 +\\ 
 +==== FF_CheckKey() ====
 + Gibt den Code der Taste zurück, die im Zeitpunkt des Funktionsaufrufs gedrückt ist.\\ ​ Zeigt __keine Wirkung__, wenn ein Dialog mit //​FF_ShowDialog//​ angezeigt wird, kann aber verwendet werden, wenn ein Dialog mit //​FF_OpenDialog//​ aufgerufen wurde.\\ \\  Die Tastencodes sind grundsätzlich die ASCII-Wert der Tasten. Welche Taste welchen Code zurück gibt, kann auch mit diesem Script erprobt werden:​\\ ​ VBScript\\ ​
 +  '** Start Dialog FF_CheckKey **
 +  FF_AddDialog "​FF_CheckKey",​194,​30
 +  FF_AddControl "​FF_CheckKey","​Ermittelt den Rückgabewert von FF_CheckKey,​ wenn eine Taste gedrückt wird.","​STATIC",​2,​1,​192,​11
 +  FF_AddControl "​FF_CheckKey","​Abbruch mit <​ESC>","​STATIC",​2,​18,​76,​11
 +  '** End Dialog FF_CheckKey **
  
 +  Dim x, y
 +  FF_openDialog "​FF_CheckKey"​
 +  y = -1
 +
 +  Call Main
 +  FF_CloseDialog "​FF_CheckKey"​
 +
 +  Sub Main
 +      do
 +          x = FF_CheckKey()
 +          if x = 27 then                   '​ Abbruch mit ESC
 +              Msgbox "​Tastencode: ​  "​ & x & vbNewLine & vbNewLine & "​Script wird beendet."​
 +              Exit Sub
 +          End If
 +          if x <> y and x <> 0 then
 +              MsgBox "​Tastencode: ​  "​ & x
 +              y = x
 +          End If
 +      Loop
 +  End Sub
 +   
 +\\ 
 +==== FF_GetAsyncKeyState() ====
 + ​Ermittelt,​ ob die angegebene Taste derzeit gedrückt wurde.\\ ​
 +  If FF_GetAsyncKeyState(32) = True Then Msgbox "Die Leertaste wurde gedrückt."​
 +\\ 
 +==== einige Tastencodes ====
 +
 +| //​**Taste**//​\\ | //​**Tasten-Code**//​\\ | //​**Bemerkung**//​\\ |
 +| linke Maustaste\\ | 1\\ | nur FF_GetAsyncKeyState\\ |
 +| rechte Maustaste\\ | 2\\ | nur FF_GetAsyncKeyState\\ |
 +| mittlere Maustaste\\ | 4\\ | nur FF_GetAsyncKeyState\\ |
 +| Backspace\\ | 8\\ | \\ |
 +| Enter\\ | 13\\ | \\ |
 +| Shift\\ | 16\\ | \\ |
 +| Strg\\ | 17\\ | \\ |
 +| Shift Lock\\ | 20\\ | \\ |
 +| ESC\\ | 27\\ | \\ |
 +| Leertaste\\ | 32\\ | \\ |
 +| Pfeil links\\ | 37\\ | \\ |
 +| Pfeil hoch\\ | 38\\ | \\ |
 +| Pfeil rechts\\ | 39\\ | \\ |
 +| Pfeil runter\\ | 40\\ | \\ |
 +| Einfg\\ | 45\\ | \\ |
 +| Entf\\ | 46\\ | \\ |
 +| 0 … 9\\ | 48 … 57\\ | \\ |
 +| A … Z\\ | 65 … 90\\ | \\ |
 +| Windows-Taste\\ | 91\\ | \\ |
 +| F1\\ | 112\\ | FF_CheckKey ruft zugleich die FF-Hilfe auf\\  FF_GetAsyncKeyState ruft zugleich die Windows-Hilfe auf\\ |
 +| F2 … F12\\ | 113 … 123\\ | \\ |
 +| -\\ | 189\\ | \\ |
 +| .\\ | 190\\ | \\ |
 +| ,\\ | 191\\ | \\ |
 +\\ 
 +===== Beispiele zur praktischen Anwendung =====
 + Im Folgenden werden zwei Beispiele für die Verwendung der Tastaturabfrage aufgeführt:​\\ ​
 +
 +  * Unterbrechen einer Bearbeitungsschleife durch Tastenbetätigung
 +  * Sonderstart eines Skripts bei festgehaltener Taste
 +Zuerst muss man sich für eine Taste entscheiden,​ die keine andere Reaktion hervorruft. Dies sollte man testen, bevor man sich für eine Taste entscheidet. Gut geeignet sind beispielsweise die Backspace-Taste und die Shift-Taste.\\ \\ 
 +==== Unterbrechen einer Bearbeitungsschleife durch Betätigung der Backspace-Taste ====
 + Wird in einem Skript eine Bearbeitungsschleife für viele Bilder durchlaufen,​ ist es sinnvoll, dem Anwender eine Möglichkeit zu bieten, diese Schleife zu unterbrechen und dann abzufragen, ob die Schleife fortgesetzt werden oder das Skript abgebrochen werden soll.\\ ​
 +  Bildanzahl = ubound(BildArray)
 +
 +  for n = 0 to Bildanzahl -1
 +
 +         '​vorzeitiger Abbruch?
 +         x = FF_CheckKey()
 +         if x = 8 then              '8 = Backspace
 +                Antwort = msgbox("​Von " & Bildanzahl +1 & " Bildern wurden bisher " & n & _
 +               "​ Bilder bearbeitet."​ & vbNewLine & vbNewLine & _
 +               "​Soll die weitere Bearbeitung abgebrochen werden?",​vbYesNo or vbQuestion,"​Abfrage"​)
 +
 +               if Antwort = vbYes then exit for  '​Schleife vorzeitig verlassen
 +         end if
 +
 +         '​Bildbearbeitung
 +         ​FF_LoadImage BildArray(n)
 +         '​Bearbeitung - wie auch immer
 +         ​FF_SaveImage BildArray(n),​ 0
 +  next
 +   
 +Besteht die Bearbeitung aus vielen Schritten, ist es sinnvoll, zwischen den einzelnen Schritten immer wieder eine Tastaturabfrage einzufügen.\\ ​
 +  x = FF_CheckKey()
 +==== Sonderstart eines Skripts bei festgehaltener Shift-Taste ====
 + Es gibt Skripte, bei denen eine Bedienoberfläche stört. Nur im Sonderfall wird eine Bedienoberfläche benötigt, beispielsweise um Voreinstellungen vorzunehmen oder eine Kurzbeschreibung anzuzeigen. Um nicht ein zweites Skript dazu aufrufen zu müssen, kann man sozusagen einen Sonderstart erzeugen, der bei Start des Skripts mit festgehaltener Taste wirksam wird.\\ ​ Hier wird gezeigt, wie man beim Sonderstart z.B. eine PDF-Datei aufrufen kann.\\ ​
 +  Set WshShell = CreateObject("​WScript.Shell"​)
 +
 +  if FF_CheckKey(16) then    '​Shift-Taste
 +      Anzeige = """"​ & FF_GetScriptPath & "​\AutorOrdner\Kurzbeschreibung.pdf"​ & """"​
 +      WshShell.Run Anzeige,​1,​false
 +      'evtl. Skript beenden (?)
 +  end if
 +   
 +Die Abfrage muss im Skript vor der Bearbeitung stehen. Nach Ausführung des Sonderstarts muss man festlegen, ob anschließend das Skript ausgeführt oder abgebrochen werden soll.\\ \\  Statt FF_CheckKey kann auch FF_GetAsyncKeyState eingesetzt werden.\\ ​ Die Abfrage muss im Skript vor der Bearbeitung stehen. Nach Ausführung des Sonderstarts muss man festlegen, ob anschließend das Skript ausgeführt oder abgebrochen werden soll.