Wenn Sie in einem Programm nur einen Wert interaktiv einlesen wollen, dann stehen Ihnen mehrere Komponenten zur Verfügung. Eine von ihnen ist die Komponente ValueBox, deren Eigenschaften und Einsatz in diesem Kapitel beschrieben werden. Die eingegebenen Daten müssen Sie für die weitere Verwendung in Ihren Programmen – wie zum Beispiel die IP-Adressen – zum Teil selbst prüfen. Ungewöhnlich ist aber auch die Möglichkeit, eine Zeit von 7:90 einzugeben, was intern zu einer Zeitangabe von 8:30 Uhr führt. Sie können jeder Valuebox einen definierten Startwert zuweisen. Nur für die Typen Number und Currency wird die gesetzte Eigenschaft ValueBox.ReadOnly akzeptiert, aber für alle Typen kann man sie auslesen. Als Typen stehen Ihnen für die Valuebox sechs verschiedene Typen zur Verfügung:
(1) Typ Number
Es werden in der Valuebox vom Type Number nur Ziffern und als Dezimaltrennzeichen das Komma akzeptiert. Ein Punkt wird sofort in ein Komma konvertiert, wenn man die deutsche Spracheinstellung gewählt hat.
(2) Typ Date
Ein markiertes Datum wird nur mit einem Doppel-Klick in die Anzeige übernommen. Das angezeigte Datum kann nicht editiert werden.
(3) Type Time
Die Zeit kann nach einem Klick auf das Uhr-Symbol aus einer Liste (Zeitintervall 30 Minuten) mit einem Doppel-Klick übernommen werden. In der Liste kann mit den Cursor-Tasten navigiert werden. Die Zeit können Sie auch direkt im Format hh:mm - jedoch mit führender Null - eingeben und anschließend können Sie diese Zeit auch editieren.
ACHTUNG: Sie können auch eine Zeit von 27:88 Uhr eingeben, weil sowohl für die Stunden als auch die Minuten ein Intervall von 00 bis 99 zulässig ist. Bei der Ausgabe wird dann aus 7:60 Uhr aber 8:00 Uhr. Aus der Eingabe 60:99 Uhr wird 13:39 Uhr (60h:24= 2d+12h; 99min:60=1h+39min. Damit werden 13h+39min als Restzeit im 24-Stunden-Intervall angezeigt! Ungewöhnlich – hat aber System.
(4) Typ Currency
Geldbeträge – in Deutschland in Euro – werden mit Euro und Cent mit dem Dezimalzeichen getrennt eingegeben. Als Dezimaltrennzeichen ist nur das Komma zulässig. Das Währungszeichen wird nur in der Valuebox angezeigt. Intern wird nur der Zahlenwert gespeichert. Sie können nur positive Währungsbeträge eingeben.
(5) Typ DateTime
Das Datum wählen Sie aus dem Kalender und die Zeit aus der angezeigten Liste mit einer Zeitdifferenz von 30 Minuten. Beide Werte werden mit einem Doppelklick in die Anzeige übernommen. Sie können die Werte in der Valuebox korrigieren. In der Valuebox vom Typ DateTime dürfen Sie – im Gegensatz zum Typ Time – nur die folgenden Intervalle für die Stunden 00..23 und Minuten 00..59 verwenden.
(6) IP-Adress im Format IPv4
Zur Eingabe setzen Sie den Corsor an die erste Position hinter die letzte Ziffer (Standard ist Null) und geben dann die Zahlen-Tripel blockweise ein. Zu den weiteren Eingabefeldern wechseln Sie mit den beiden Cursor-Tasten (> und <). In der Valuebox werden führende Nullen unterdrückt. Die Prüfung auf Korrektheit der IP-Adresse müssen Sie selbst vornehmen, weil die Eingaben der Zahlen-Tripel im Intervall von 0 bis 999 (!) für einen Block akzeptiert werden:
Public Sub btnIPAdress_Click() Dim aMatrix As String[] Dim iCount As Integer Dim sMessage As String txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = valBoxIPAdress.Value aMatrix = Split(valBoxIPAdress.Value, ".") For iCount = 0 To aMatrix.Max sMessage = "Die IP-Adresse ist im " & (icount + 1) & ". Block fehlerhaft (" & aMatrix[iCount] & ") !" If Val(aMatrix[iCount]) < 0 Or Val(aMatrix[iCount]) > 255 Then Message.Error(sMessage) valBoxIPAdress.SetFocus Endif Next ' iCount End ' IPAdress_Click
Abbildung 16.9.1: Valuebox – 6 Typen
Der Quelltext für ein Projekt zur Demonstration des Einsatzes der 6 Typen einer Valuebox wird hier vollständig angegeben:
' Gambas class file Public Sub Form_Open() FMain.Center FMain.Resizable = False btnEnde.Cancel = True ' Programm-Ende mit ESC-Taste valBoxNumber.Type = valBoxNumber.Number ' valBoxNumber.ReadOnly = True valBoxDate.Type = valBoxDate.Date valBoxTime.Type = valBoxTime.Time valBoxCurrency.Type = valBoxCurrency.Currency ' valBoxCurrency.ReadOnly = True valBoxDateTime.Type = valBoxDateTime.DateTime valBoxIPAdress.Type = valBoxIPAdress.IPAddress valBoxIPAdress.Value = "192.168.100.11" End ' Form_Open Public Sub btnNumber_Click() txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = valBoxNumber.Value End ' Number_Click Public Sub btnDate_Click() txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = Format$(valBoxDate.Value, "dddd - dd.mm.yyyy") End ' Date_Click Public Sub btnTime_Click() txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = Format$(valBoxTime.Value, "hh:nn") & " Uhr" End ' Time_Click Public Sub btnCurrency_Click() txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = valBoxCurrency.Value & " Euro" End ' Currency_Click Public Sub btnDateTime_Click() txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = Format$(valBoxDateTime.Value, "dd.mm.yyyy - hh:nn") & " Uhr" End ' DateTime_Click Public Sub btnIPAdress_Click() Dim aMatrix As String[] Dim iCount As Integer Dim sMessage As String txbDisplay.Clear txbDisplay.Alignment = Align.BottomRight txbDisplay.Text = valBoxIPAdress.Value aMatrix = Split(valBoxIPAdress.Value, ".") For iCount = 0 To aMatrix.Max If Val(aMatrix[iCount]) < 0 Or Val(aMatrix[iCount]) > 255 Then sMessage = "IP-Adresse im " & (icount + 1) & ". Block fehlerhaft (" & aMatrix[iCount] & ") !" Message.Error(sMessage) valBoxIPAdress.SetFocus Endif Next ' iCount End ' IPAdress_Click Public Sub btnEnde_Click() FMain.Close End ' Close
Im Download-Bereich finden Sie das Projekt-Quellarchiv.
Artikel und Projekte