16. TimerTimer erlauben es, einen Actionhandler in bestimmten Zeitabständen automatisch aufzurufen. Man kann sich das so vorstellen, als ob jemand einen Button in regelmäßigen Abständen drückt. Damit kann man beispielsweise eine blinkende Schrift realisieren, eine Spielfigur über das Spielfeld bewegen oder eine Uhr weiterzählen.Die Routine TimerStart aktiviert einen Timer. Sie erwartet den Namen des Actionhandlers, der aufgerufen werden soll, sowie einen oder zwei numerische Werte. Der erste Wert gibt an, wie lange es dauern soll, bis der Timer das erste Mal auslöst. Die Zeitangabe erfolgt in "tics", das sind 1/60s. Der zweite Wert gibt das Zeitintervall an, in dem der Timer danach periodisch auslösen soll (ebenfalls in tics). Wird der zweite Wert nicht angegeben oder ist er Null, so löst der Timer nur genau einmal aus (Single-Shot Timer). Das maximale Zeitintervall beträgt jeweils 65535 tics, das entspricht etwa 18 Minuten. Um einen Timer zu stoppen verwenden Sie TimerStop. Single-Shot Timer brauchen nicht gestoppt zu werden. Es ist ein guter Stil alle Timer am Programmende, vorzugsweise im OnExit-Handler, zu stoppen. Sollten Sie das vergessen stoppt das System die aktiven Timer. Wenn ein Timer auslöst erzeugt er ein BASIC-Event, das wie allen anderen Events (Aktivieren eines Button, Klick in eine Liste usw.) behandelt wird. Das bedeutet:
Verwechseln Sie Timerevents nicht mit den Befehlen Delay und Pause! Delay und Pause unterbrechen die Abarbeitung eines Handlers für eine bestimmte Zeit während Timer einen eigenen Handler aufrufen.
TimerStartTimerStart aktiviert einen Timer. Das kann eine einmaliger Timer (Single-Shot-Timer) oder ein periodischer Timer sein.
TimerStopTimerStop hält einen Timer an. Es erwartet das Handle, das von TimerStart zurückgegeben wurde. Es ist explizit erlaubt:
Syntax: TimerStop <th> <th>: Handle, das von TimerStart geliefert wurde TimerActionActionhandler, die von einem Timer aufgerufen werden, müssen als TimerAction deklariert sein.
Der Parameter "sender" enthält das Application-Objekt des Programms, der Parameter "actionData" ist unbenutzt und enthält den Wert Null. Beispiele. Den folgenden Code finden Sie komplette im R-BASIC Beispiel "Datum und Zeit\TimerDemo". Beispiel 1: Blinkende Schrift Eine globale Variable z bestimmt, ob die Schrift gezeigt wird oder nicht. Das TimerHandle th ist ebenfalls global, damit wir dem Timer wieder anhalten können.
|
DIM z DIM th as HANDLE |
|
|
th = TimerStart (TimerBlink, 0, 30) |
|
|
TimerStop th |
|
|
TIMERACTION TimerBlink
IF z THEN
Print at 3, 5; " "
z = 0
ELSE
print at 3, 5;"R-BASIC Timer Demo"
z = 1
End IF
END ACTION
|
|
Viele Programme zeigen am Start eine Infobox an, die dann von allein wieder verschwindet. Dafür eignet sich ein Single-Shot-Timer. Im OnStartup-Handler öffnen wir die Dilaogbox und starten den Timer. Das Timerhandle th2 wird bei Single-Shot-Timern nicht weiter gebraucht. |
SYSTEMACTION DemoStartupHandler DemoStartupDialog.Open th2 = TimerStart ( StartupTimerHandler, 180) ' 3 sek. END ACTION |
|
|
TIMERACTION StartupTimerHandler DemoStartupDialog.Close END ACTION |
|
|
Dialog DemoStartupDialog Caption$ = "Willkommen!" Children = TimerStartupText attrs = DA_HIDDEN_UNTIL_OPENED 'modal = APP_MODAL End OBJECT |
Tipps & Tricks
^ |