Andreas Rozek Lesehinweise letzte Änderungen Gästebuch-Eintrag Mitteilungen an den Autor  English Version  zur Leitseite zum vorherigen Thema zum nächsten Thema  zur ersten Seite zur vorherigen Seite zur nächsten Seite

TkLua Clock

Das an dieser Stelle beschriebene TkLua-Programm ist eines der ersten, mit denen der Autor die (dauerhaft) korrekte Funktion seiner TkLua-Distribution für Win32-Plattformen (sowie die dadurch entstehende Rechnerbelastung) getestet hat.


Bildschirmabzug des TkLua-Beispielprogrammes Clock

Funktionsbeschreibung

Die Anzeige besteht aus einem einzigen Canvas-Element (tkcanvas) mit statischen Grafik-Elementen für das Ziffernblatt und laufend ausgetauschten Grafik-Elementen für die drei Zeiger.

Die wesentliche Arbeit wird in der Funktion updateDisplay verrichtet: jeweils zwei globale Variablen pro Zeiger (z.B. HourHand und HourHand_Angle) speichern den Canvas-Index und den aktuellen Winkel des jeweiligen Zeigers. Mit jedem Aufruf von updateDisplay (d.h. einmal pro Sekunde) wird geprüft, ob sich einer der Zeiger weiterbewegt hat - wenn ja, wird das alte Canvas-Objekt für diesen Zeiger entfernt und durch ein neues Objekt in der aktuellen Zeigerstellung ersetzt (leider lassen sich Canvas-Objekte zwar skalieren und verschieben, nicht aber drehen oder scheren). Beim ersten Aufruf von updateDisplay wird ein Winkelvergleich noch nicht durchgeführt, da noch keine Zeiger-Objekte existieren - diese werden erst jetzt erstmalig angelegt.

Dadurch daß die Zeiger-Winkel stets aus der aktuellen Uhrzeit ermittelt werden, wirken sich Änderungen der Zeiteinstellung durch den Benutzer oder durch eine automatische Umstellung zwischen Sommer- und Winterzeit spätestens eine Sekunde später auf die Zeitanzeige aus. Allerdings ist die Timer-Funktion, mit deren Hilfe updateDisplay periodisch aufgerufen wird, sehr einfach gehalten, und Laufzeiten des TkLua-Programmes selbst sowie anderer "parallel" zu updateDisplay ablaufender Programme auf demselben Rechner führen regelmäßig zu einem Überspringen einzelner Sekunden - auf nicht übermäßig ausgelasteten Rechnern stimmt die Zeitanzeige jedoch stets auf +/- 1 Sekunde mit der aktuellen Systemzeit überein.

Die Marken des Ziffernblattes sowie die einzelnen Zeiger (mit Ausnahme des Sekundenzeigers) werden durch rechteckige geschlossene Polygonzüge gebildet, deren Knoten mit etwas Vektoralgebra in die jeweils erforderliche Orientierung gebracht werden. Nur der Sekundenzeiger besteht der Einfachheit halber aus einer einfachen Linie.

Neben dem "Hauptprogramm" enthält Clock die folgenden (globalen) Funktionen (in alphabetischer Reihenfolge):

  • createTick (NodeList, Angle)
    nimmt eine Liste mit den Koordinaten einer Linie bzw. eines Polygonzuges entgegen, verschiebt diese Knoten an den Außenrand des Ziffernblattes, dreht sie in die durch Angle angegebene Richtung und erzeugt (mithilfe eines passenden Tk-Befehles) ein Canvas-Linien- oder -Polygon-Objekt;

  • newHand (NodeList, Angle)
    nimmt eine Liste mit den Koordinaten einer Linie bzw. eines Polygonzuges entgegen, dreht diese Knoten in die durch Angle angegebene Richtung und erzeugt (mithilfe eines passenden Tk-Befehles) ein Canvas-Linien- oder -Polygon-Objekt. Der Rückgabewert der Funktion ist die vom Canvas-Element gelieferte interne Kennung des neu angelegten Grafik-Objektes;

  • updateDisplay ()
    ermittelt aus der aktuellen Uhrzeit die Stellung der drei Uhrzeiger und paßt die Anzeige entsprechend an;

Das Programm selbst ist recht einfach und sollte auch ohne weitere Beschreibung verständlich sein.

Quelltext

Der Quelltext des vorgestellten Programmes kann von hier aus heruntergeladen werden:

Literaturhinweise

[1] Roberto Ierusalimschy, Luiz Henrique de Figueiredo, Waldemar Celes
Reference Manual of the Programming Language Lua 4.0
(siehe http://www.lua.org/manual)
das Referenzhandbuch enthält alle wesentlichen Informationen zur Sprache selbst, den zugehörigen Standardbibliotheken und der Schnittstelle zur Laufzeitumgebung;
[2] Waldemar Celes
tklua - Binding Tk to Lua
(siehe http://www.tecgraf.puc-rio.br/~celes/tklua/)
TkLua ermöglicht die Verwendung von Tk-Komponenten (für grafische Benutzeroberflächen) von Lua-Programmen aus. Die genannte Web-Seite beschreibt wie TkLua funktioniert und wie es in Lua-Programmen eingesetzt werden kann;
[3] Christian Vogler
TkLua (4.0a1)
(siehe http://www.cis.upenn.edu/~cvogler/lua/tklua.html)
während die unter [2] genannte TkLua-Distribution nur für Lua-Versionen < 4.0 gedacht ist, eignet sich die hier erwähnte Fassung für Lua-Versionen mit dem neuen Lua 4.0 API;
[4] Tcl/Tk 8.3.4 Manual
(siehe http://www.scriptics.com/man/tcl8.3/)
die Dokumentation zu Tcl/Tk ist für die Arbeit mit TkLua unabdingbar - unter der angegebenen Adresse kann diese Dokumentation im Internet eingesehen werden (sofern man sich die Tcl/Tk-Distribution nicht ohnehin schon auf den eigenen Rechner heruntergeladen hat);

Haftungsausschluß

Bitte beachten Sie auch den Haftungsausschluß des Autors!

http://www.Andreas-Rozek.de/Lua/Examples/Clock/index.html    (letzter Stand: 14.04.2002)