Unter Tastatur-Ereignissen sind jene Ereignisse (Events) aufzufassen, die sich auf Ereignisse sichtbarer Steuerelemente (Komponenten) im Zusammenhang mit der Tastatur beziehen.
Sie erhalten Informationen über die gedrückte Taste, wenn Sie die Klasse Key einsetzen, die im Kapitel 14.1.1 beschrieben wurde.
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.
Abbildung 14.1.3.2.1: Eingabe eines Farbwerts
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: