User Tools

Site Tools


k14:k14.1:k14.1.3:start

14.1.3 Keyboard and events

Keyboard events are events that refer to events of visible control elements (components) associated with the keyboard.

14.1.3.1 Overview of keyboard events

  • Control.KeyPress (gb.qt4)
    The event (event) is triggered when a button is pressed while the control has the focus.
  • Control.KeyRelease (gb.qt4)
    The event (event) is triggered when a button is released while the control has the focus.

You will get information about the pressed key if you use the Class Key key described in chapter 14.1.1.1.

14.1.3.2 Project

The following project tries to evaluate the information about a pressed key and to react appropriately to it in the program. In the text field, only characters from a highly restricted character range [&, 0-9, a-f, A-F] are used. (→ Chapter 8.3.3.3 LIKE operator), whereby the &-character may only be entered as the first character (optional). The correct syntax of the entered color value is checked with a regular expression. If the color value is syntactically correct, the corresponding color is displayed briefly, otherwise an error message is displayed.

Farbwert1

Figure 14.1.3.2.1: Entering a color value

Farbwert2

Figure 14.1.3.2.2: Display of the color to the color value

The completely specified source code must also be considered under this aspect. In a productive project, coding would be more effective because some restrictions are doubly secured.

' Gambas class file
 
Private sSubject As String
Private sPattern As String
 
Public Sub Form_Open()  
  FMain.Text = "KeyPress - KeyRelease"
  FMain.Center
  FMain.Resizable = False
  txbFarbwert.Clear
  txbFarbwert.MaxLength = 6
  PictureBox1.Stretch = True
  PictureBox1.Picture = Picture["Symbols/color.png"]
End ' Form_Open()
 
Public Sub txbFarbwert_KeyPress()
 
  If Key.Control And Key.Code = Key.F1 Then btnHelp_Click() ' Hilfefunktion mit CTRL+F1
 
  If (Key.Code = Key.Return Or Key.Code = Key.Enter) And txbFarbwert.Text Then
     Message.Info("Die eingegebenen Zeichen sind:\n\n" & Upper(txbFarbwert.Text))
     If Left(txbFarbwert.Text, 1) = "&" Then 
        txbFarbwert.MaxLength = 7 
     Else
        txbFarbwert.MaxLength = 6
     Endif ' Left(txbFarbwert.Text, 1) = "&" ?
  Endif ' Key.Code = Key.Return Or Key.Code = Key.Enter ?
 
  If Key.Code = Key.BackSpace And Len(txbFarbwert.Text) > 0 Then 
     txbFarbwert.Text = Left(txbFarbwert.Text, Len(txbFarbwert.Text) - 1)
  Endif ' Key.Code = Key.BackSpace And Len(txbFarbwert.Text) > 0 ?
 
' Zulässige Zeichen für einen Farbwert in hexadezimaler Darstellung
  If Key.Text Not Like "[&0-9a-fA-F]" Then
     Stop Event
  Endif ' Key.Text Not Like "[&0-9a-fA-F]"
 
End ' txbFarbwert_KeyPress()
 
Public Sub txbFarbwert_KeyRelease()
  If Len(txbFarbwert.Text) = 0 Then txbFarbwert.MaxLength = 6
  If Left(txbFarbwert.Text, 1) = "&" Then txbFarbwert.MaxLength = 7
End ' txbFarbwert_KeyRelease()
 
Public Sub btnCheckColorValue_Click()
  Dim pPanel As Panel
 
  pPanel = New Panel(FMain)
  pPanel.H = 88
  pPanel.W = pPanel.H
  pPanel.x = 208
  pPanel.y = 16
  pPanel.Border = Border.Raised
 
  sSubject = txbFarbwert.Text
  sPattern = "^(&)?[a-fA-F0-9]{6}$"
 
  If Not txbFarbwert.Text Then
     Message.Warning("Geben Sie einen Farbwert (hex) ein!")
     txbFarbwert.SetFocus
     Return
  Endif ' txbFarbwert.Text = "" ?
 
  If Match(sSubject, sPattern) = True Then
     PictureBox1.Hide
     pPanel.Show
     If Len(txbFarbwert.Text) = 6 Then
        pPanel.Background = ZModul.ZahlToDezimal(Upper(txbFarbwert.Text), 16)
     Else
        pPanel.Background = ZModul.ZahlToDezimal(Right(Upper(txbFarbwert.Text), 6), 16)
     Endif ' Len(txbFarbwert.Text) = 6 ?
     Wait 2 ' Farbe wird für 2 Sekunden angezeigt
     txbFarbwert.Clear
     txbFarbwert.SetFocus
     PictureBox1.Show
  Else
     Message.Info("Der HTML-Farbwert ist nicht korrekt.")
     txbFarbwert.SetFocus
  Endif ' Match(sSubject, sPattern) = True ?  
  pPanel.Delete
 
End ' btnCheckColorValue_Click()
 
'*** ZUSÄTZE *******************************************************************************
 
Public Function Match(Subject As String, Pattern As String) As Boolean
  Dim rRegex As Regexp
 
  rRegex = New Regexp(Subject, Pattern)
 
  If rRegex.Offset = -1 Then
     Return False
  Else
     Return True
  Endif ' rRegex.Offset = -1
 
End ' Match(Subject As String, Pattern As String) As Boolean
 
Public Sub btnHelp_Click()
  Dim sMessage As String
 
  sMessage = "<hr><b>Hilfe zum Zeichenvorrat</b><hr>"
  sMessage &= "-> Zeichen &"
  sMessage &= "<br>-> Ziffern 0-9"
  sMessage &= "<br>-> Buchstaben aus dem Bereichen a-f und A-F<hr>"
  Message.Info(sMessage)
  txbFarbwert.SetFocus
 
End ' btnHelp_Click()

Hints:

  • Please note that the keyboard events (KeyPress and KeyRelease) only refer to one component - here the text field txbColorValue.
  • The small program help is called up in the project using the small blue button on the one hand and with the unusual key combination CTRL+F1 on the other hand, in order to also edit the case for a key combination.
  • The module for converting numbers (basis 2.. 32) into numbers of base 10 (decimal numbers) is located in the repository.

Download

14.1.3 Tastatur und Ereignisse

Unter Tastatur-Ereignissen sind jene Ereignisse (Events) aufzufassen, die sich auf Ereignisse sichtbarer Steuerelemente (Komponenten) im Zusammenhang mit der Tastatur beziehen.

14.1.3.1 Die Übersicht zu den Tastatur-Ereignissen

  • Control.KeyPress (gb.qt4)
    Das Ereignis (Event) wird ausgelöst, wenn eine Taste gedrückt wird, während das Steuerelement den Fokus hat.
  • Control.KeyRelease (gb.qt4)
    Das Ereignis (Event) wird ausgelöst, wenn eine Taste losgelassen wird, während das Steuerelement den Fokus hat.

Sie erhalten Informationen über die gedrückte Taste, wenn Sie die Klasse Key einsetzen, die im Kapitel 14.1.1 beschrieben wurde.

14.1.3.2 Projekt

Im folgenden Projekt wird versucht, die Informationen zu einer gedrückten Taste auszuwerten und im Programm darauf angemessen zu reagieren. Im Textfeld werden nur Zeichen aus einem stark eingeschränkten Zeichenbereich [&, 0-9, a-f, A-F] (→ Kapitel 8.3.3 Operator LIKE) akzeptiert, wobei das &-Zeichen nur als erstes Zeichen (optional) eingegeben werden darf. Die korrekte Syntax des eingegeben Farbwertes wird mit einem regulären Ausdruck geprüft. Ist der Farbwert syntaktisch korrekt, dann wird die dazu gehörende Farbe kurz angezeigt, sonst wird eine Fehlermeldung angezeigt.

Farbwert1

Abbildung 14.1.3.2.1: Eingabe eines Farbwerts

Farbwert2

Abbildung 14.1.3.2.2: Anzeige der Farbe zum Farbwert

Unter diesem Aspekt ist auch der vollständig angegebene Quelltext zu betrachten. In einem produktiven Projekt würde man effektiver kodieren, weil einige Restriktionen doppelt abgesichert sind.

' Gambas class file
 
Private sSubject As String
Private sPattern As String
 
Public Sub Form_Open()  
  FMain.Text = "KeyPress - KeyRelease"
  FMain.Center
  FMain.Resizable = False
  txbFarbwert.Clear
  txbFarbwert.MaxLength = 6
  PictureBox1.Stretch = True
  PictureBox1.Picture = Picture["Symbols/color.png"]
End ' Form_Open()
 
Public Sub txbFarbwert_KeyPress()
 
  If Key.Control And Key.Code = Key.F1 Then btnHelp_Click() ' Hilfefunktion mit CTRL+F1
 
  If (Key.Code = Key.Return Or Key.Code = Key.Enter) And txbFarbwert.Text Then
     Message.Info("Die eingegebenen Zeichen sind:\n\n" & Upper(txbFarbwert.Text))
     If Left(txbFarbwert.Text, 1) = "&" Then 
        txbFarbwert.MaxLength = 7 
     Else
        txbFarbwert.MaxLength = 6
     Endif ' Left(txbFarbwert.Text, 1) = "&" ?
  Endif ' Key.Code = Key.Return Or Key.Code = Key.Enter ?
 
  If Key.Code = Key.BackSpace And Len(txbFarbwert.Text) > 0 Then 
     txbFarbwert.Text = Left(txbFarbwert.Text, Len(txbFarbwert.Text) - 1)
  Endif ' Key.Code = Key.BackSpace And Len(txbFarbwert.Text) > 0 ?
 
' Zulässige Zeichen für einen Farbwert in hexadezimaler Darstellung
  If Key.Text Not Like "[&0-9a-fA-F]" Then
     Stop Event
  Endif ' Key.Text Not Like "[&0-9a-fA-F]"
 
End ' txbFarbwert_KeyPress()
 
Public Sub txbFarbwert_KeyRelease()
  If Len(txbFarbwert.Text) = 0 Then txbFarbwert.MaxLength = 6
  If Left(txbFarbwert.Text, 1) = "&" Then txbFarbwert.MaxLength = 7
End ' txbFarbwert_KeyRelease()
 
Public Sub btnCheckColorValue_Click()
  Dim pPanel As Panel
 
  pPanel = New Panel(FMain)
  pPanel.H = 88
  pPanel.W = pPanel.H
  pPanel.x = 208
  pPanel.y = 16
  pPanel.Border = Border.Raised
 
  sSubject = txbFarbwert.Text
  sPattern = "^(&)?[a-fA-F0-9]{6}$"
 
  If Not txbFarbwert.Text Then
     Message.Warning("Geben Sie einen Farbwert (hex) ein!")
     txbFarbwert.SetFocus
     Return
  Endif ' txbFarbwert.Text = "" ?
 
  If Match(sSubject, sPattern) = True Then
     PictureBox1.Hide
     pPanel.Show
     If Len(txbFarbwert.Text) = 6 Then
        pPanel.Background = ZModul.ZahlToDezimal(Upper(txbFarbwert.Text), 16)
     Else
        pPanel.Background = ZModul.ZahlToDezimal(Right(Upper(txbFarbwert.Text), 6), 16)
     Endif ' Len(txbFarbwert.Text) = 6 ?
     Wait 2 ' Farbe wird für 2 Sekunden angezeigt
     txbFarbwert.Clear
     txbFarbwert.SetFocus
     PictureBox1.Show
  Else
     Message.Info("Der HTML-Farbwert ist nicht korrekt.")
     txbFarbwert.SetFocus
  Endif ' Match(sSubject, sPattern) = True ?  
  pPanel.Delete
 
End ' btnCheckColorValue_Click()
 
'*** ZUSÄTZE *******************************************************************************
 
Public Function Match(Subject As String, Pattern As String) As Boolean
  Dim rRegex As Regexp
 
  rRegex = New Regexp(Subject, Pattern)
 
  If rRegex.Offset = -1 Then
     Return False
  Else
     Return True
  Endif ' rRegex.Offset = -1
 
End ' Match(Subject As String, Pattern As String) As Boolean
 
Public Sub btnHelp_Click()
  Dim sMessage As String
 
  sMessage = "<hr><b>Hilfe zum Zeichenvorrat</b><hr>"
  sMessage &= "-> Zeichen &"
  sMessage &= "<br>-> Ziffern 0-9"
  sMessage &= "<br>-> Buchstaben aus dem Bereichen a-f und A-F<hr>"
  Message.Info(sMessage)
  txbFarbwert.SetFocus
 
End ' btnHelp_Click()

Hinweise:

  • Bitte beachten Sie, dass sich die Tastaturereignisse (KeyPress und KeyRelease) nur auf eine Komponente – hier das Textfeld txbFarbwert – beziehen.
  • Der Aufruf der kleinen Programm-Hilfe erfolgt im Projekt einerseits über die kleine blaue Schaltfläche und andererseits mit der ungewöhnlichen Tasten-Kombination CTRL+F1, um auch den Fall für eine Tasten-Kombination zu bearbeiten.
  • Das Modul zur Umwandlung von Zahlen (Basis 2..32) in Zahlen der Basis 10 (Dezimalzahlen) befindet sich im Projektarchiv.

Download

The website uses a temporary session cookie. This technically necessary cookie is deleted when the browser is closed. You can find information on cookies in our privacy policy.
k14/k14.1/k14.1.3/start.txt · Last modified: 02.07.2018 (external edit)

Page Tools