Gambas: Timer
Zurück zum Gambas-Inhaltsverzeichnis.
Das einfachste Timerprogramm
[Bearbeiten]Ein Timer (Taktgeber) ist ein unsichtbares Steuerelement, das einen zeitlichen Ablauf programmierbar macht.
Wenn der Timer mit der Enabled-Eigenschaft an geschaltet ist, dann startet die Methode periodisch immer wieder mit der vorgegeben Zeitverzögerung (= Delay).
Platzieren Sie auf der Form einen Timer durch einen Klick auf das entsprechenden Feld der Werkzeugkiste.
Der Timer muss angeschaltet sein, wenn er laufen soll.
Deswegen schalten Sie seinen Eigenschaft Enabled im Eigenschaftsfenster (F4) auf TRUE.
Dann klicken Sie auf den Timer und geben Sie folgenden Code ein:
PUBLIC SUB Timer1_Timer() PRINT 1 END
Programmablauf:
Je nach dem wie groß man den Wert für das Delay einstellt, um so schneller oder langsamer erfolgt die Printausgabe. Diese wird immerwieder wiederholt.
Variation: Die Ausgabe wird mit einem Button gestoppt.
PUBLIC SUB Timer1_Timer() PRINT 1 END PUBLIC SUB Button1_Click() Timer1.Enabled = FALSE END
Delay zur Laufzeit ändern
[Bearbeiten]Am Anfang steht der Timer immer auf einem Delay von 1000 Millisekunden und ist Disabled (Enabled = FALSE). Er muss also erst angeschaltet werden.
Diese Voreinstellungen kann man bei den Eigenschaften ändern oder auch programmieren.
Starten Sie ein neues Projekt Timer1. Holen Sie sich eine neue Form mit der Rechten Maustaste auf Form im Projekt. Nennen Sie die Form wie Sie wollen. Deklarieren Sie die Form als Startform.
Man kann die Zeitverzögerung im Timer in Millisekunden festlegen. Wenn der Timer mit der Enabled-Eigenschaft angeschaltet ist, dann startet die Methode Timer1_Timer() periodisch mit der vorgegeben Zeitverzögerung.
Platzieren Sie auf der Form einen Timer und 2 Befehlsbuttons durch Klick auf die entsprechenden Felder der Werkzeugkiste.
Das Ganze schaut dann so aus: Verschieben Sie ihre Form so, dass Sie das Direktfenster sehen!
Der Programmcode dazu:
' Gambas class file PUBLIC n AS Integer PUBLIC SUB Form_Open() Timer1.Enabled = TRUE END PUBLIC SUB Timer1_Timer() PRINT Timer1.Delay Timer1.Delay = 1000 + n END PUBLIC SUB Button1_Click() n = n + 200 END PUBLIC SUB Button2_Click() n = n - 200 END
Programmablauf: Der Delay-Wert kann jetzt schneller oder langsamer geschaltet werden
Variation:
Wenn Sie ihrem Formular noch eine TextArea hinzufügen, dann erfolgt die Anzeige in der TextArea, wenn Sie folgende Codevariation nutzen.
' Gambas class file PUBLIC n AS Integer PUBLIC SUB Form_Open() Timer1.Enabled = TRUE END PUBLIC SUB Timer1_Timer() TextArea1.Text = Timer1.Delay & "\n" & TextArea1.Text Timer1.Delay = 1000 + n END PUBLIC SUB Button1_Click() n = n + 200 END PUBLIC SUB Button2_Click() n = n - 200 END
Das Delay mit Zufallszahlen verändern
[Bearbeiten]Im folgenden kleinen Programm werden Zufallszahlen zwischen 1 und 25 erzeugt. Diese Zahlen werden im Direktfenster ausgegeben und gleichzeitig wird das Delay des Timers je nach Größe der Zahl verändert. Um das Programm in Gang zu bringen brauchen Sie eine Form und darauf ein Timer-Steuerelement. Dieses holen Sie sich mit F6 aus der Toolbox.
PUBLIC SUB Form_Open() Timer1.Enabled = TRUE END PUBLIC SUB Timer1_Timer() x AS Integer Randomize x = Int(Rnd(1,25)) PRINT x Timer1.Delay = x * 50 END
Ziemlich nutzlos dieses Programm, aber man kann sich mit dem Timer vertraut machen und ein bisschen mit Zufallszahlen herumspielen.
Countdown
[Bearbeiten]Dieses Programm stammt von Jonás Alvarez. Siehe: linuxfocus.org
Es wurde ins Deutsche übertragen, verbessert und kommentiert:
Sie brauchen einen Timer, eine TextBox, einen ToggleButton, ein Labelfeld und 2 Commandbuttons, um es in Gang zu bekommen.
Der Code:
CONST fStandart AS Float=20.0 fSekunden AS Float 'fSekunden wird schon außerhalb aller Unterprogramme definiert, 'so kann es in allen UPs benutzt werden. 'fSekunden ist die aktuelle Zeit in Sekunden bis zum Start 'fStandart ist die Zeit des Countdownbeginns. 'Sie ist als Konstante festgelegt. 'fStandart kann aber über den Reset-Commandbutton Button1_Click() 'und die Textbox verändert werden. PUBLIC SUB Form_Open() 'bereits beim Programmstart wird einiges festgelegt und angezeigt fSekunden = fStandart Anzeige ToggleButton1.Value = FALSE AnAus Textbox1.Text = fSekunden END PUBLIC SUB ToggleButton1_Click() 'das ist der wichtigste Knopf 'er startet den Countdown oder unterbricht ihn Timer1.Enabled = Togglebutton1.Value 'Ist der Togglebutton gedrückt kann auch der Timer laufen. 'Togglebutton1.Value = True >> Timer1.Enabled = True 'Ist er nicht gedrückt steht der Timer still 'Togglebutton1.Value = False >> Timer1.Enabled = False AnAus END PUBLIC SUB Button1_Click() fSekunden = Val(Textbox1.Text) Anzeige END PRIVATE SUB AnAus() IF ToggleButton1.Value THEN ToggleButton1.Text = "&Countdown läuft" ELSE ToggleButton1.Text = "&Unterbrechung" ENDIF 'wenn der Togglebutton angeklickt wurde erscheint als Text: 'Countdwon läuft. 'ist er nicht angeklickt erscheint der Text Unterbrechung END PRIVATE SUB Anzeige() DIM fMinuten AS Integer fMinuten = Int(Int(fSekunden) / 60) 'der Befehl INt schneidet die Nachkommazahlen weg 'das passiert hier gleich 2 mal 'erst werden die hundertstl Sekunden gekappt 'dann wird nach Minuten umgerechnet und auch hier alles nach dem Komma gekappt. Label1.Caption = fMinuten & ":" & Format(fSekunden - fMinuten * 60, "00.0") 'der Formatbefehl bietet viele Möglichkeiten. 'Schauen Sie ihn sich einmal mit F1 in der Hilfe an END PUBLIC SUB Timer1_Timer() IF fSekunden < 0.1 THEN Label1.Caption = "0:00,0" Togglebutton1.Value = FALSE Togglebutton1_Click 'Hier wird aus dem Programm heraus der Togglebutton abgeschaltet 'da der Countdown kurz vor der Null ist 'das Programm springt zum Unterprogramm Togglebutton1_Click ELSE fSekunden = fSekunden - 0.1 Anzeige END IF END PUBLIC SUB Button2_Click() ME.Close END
Drückt man auf den ToggleButton beginnt die Uhr rückwärts zu zählen. Drückt man noch einmal darauf, wird der Countdown unterbrochen. Mit Reset kann man über die Textbox den Beginn des Countdown verändern.
Das Programm hat 2 Prozeduren AnAus und Anzeige.
Reaktionszeit testen
[Bearbeiten]Mit diesem kleinen Programm wird die Reaktionszeit gemessen.
Für dieses Programm wird die Timer-Funktion benutzt. Diese sollte man nicht mit dem Timersteuerelement verwechseln. Außerdem wird die Anzeige Bremsen erst nach einer anfänglichen Zufallszeit ausgegeben.
Sie brauchen 3 Befehlsbuttons und eine Textbox um das Programm in Gang zu bringen. Das Programm ist noch verbesserungsbedürftig, aber es funktioniert.
Programmcode:
fStart AS Float PUBLIC SUB Button1_Click() fZufall AS Float i AS Integer Randomize() fZufall = Rnd(0.5, 3) 'PRINT fZufall WAIT fZufall TextBox1.Text = "Bremsen!!!" fStart = Timer 'Anfangszeit festlegen. 'erst ab jetzt wird die Reaktionszeit gemessen END PUBLIC SUB Button2_Click() fReaktionszeit AS Float fReaktionszeit = Timer - fStart fReaktionszeit = Int(fReaktionszeit * 1000) TextBox1.Text = fReaktionszeit 'TextBox1.Text = "Sie haben " + Str$(fReaktionszeit) + " Millisekunden gebraucht, um zu bremsen!" END PUBLIC SUB Button3_Click() ME.Close END
Der Wait-Befehl, eine Alternative zum Timer
[Bearbeiten]In einer Schleife ist es gar nicht so einfach den Timer korrekt zu programmieren. Versuchen Sie es einfach einmal mit dem WAIT Befehl als Alternative.
Die Syntax des Befehls lautet:
WAIT [ Delay ]
Der Befehl ruft die Ereignisschleife auf. Wenn für Delay ein Wert angegeben wird, dann wartet der Computer bis die angegebene Zeitverzögerung verstrichen ist. Die Zahl Delay ist eine Fließkommazahl. Wenn Sie also 100 ms warten wollen, dann geben Sie folgendes ein:
WAIT 0.1
Während der Pause werden keine Maus- oder Tastatureingaben verarbeitet. Nur Zeichnungs-, Timer- und Dateibeschreibungsereignisse werden noch ausgeführt.
Ein kleines Miniprogramm zeigt die Nutzung des Befehls. Sie brauchen einen Befehlsbutton und eine Textbox um es in Gang zu bringen. Sie müssen 5 Sekunden warten bis etwas passiert.
PUBLIC SUB Button1_Click() WAIT 5 'wartet 5 Sekunden WAIT 0.1 'wartet 100 Millisekunden TextBox1.Text = "" END
Oder was sagen Sie zu diesem Programm mit dem wandernden Befehlsknopf: Sie brauchen eine Form und einen Button um es in Gang zu bringen.
PUBLIC SUB Button1_Click() DIM x AS Integer FOR x = 1 TO 20 Button1.X = x * 10 Button1.Y = x * 10 WAIT 0.5 Button1.Text = Str(x) NEXT END