Digitaluhr v4

  • Diese vierte Version meiner Digitaluhr ist ziemlich speziell auf meine Anforderungen ausgerichtet, deswegen weiß ich gar nicht, ob ihr damit etwas anfangen könnt.

    Das geht schon mit der Größe des Fensters los (400 x 743 Pixel plus Rahmen). Das mag manchem zu groß für eine Uhr sein, aber mein Programm ist ja auch nicht nur eine Uhr.

    Vielleicht sollte ich erstmal aufzählen, was mein Programm alles anzeigt.


    Liste der Anzeigen:

    - Uhrzeit

    - Datum

    - Wochentag (ausgeschrieben)

    - Wochennummer

    - Die deutschen Feiertage (alle, auch wenn sie nicht das eigene Bundesland betreffen)

    - Zwei Alarmzeiten (Anzeige umschaltbar)

    - Vier Abfalltonnen (Altpapier, Gelber Sack, Restmüll, O-Tonne)

    - Sommerzeit (Beginn und Ende)

    - Sonnenaufgang und -untergang (Zeiten)

    - Countdown bis zum nächsten Urlaub (in Tagen, Stunden und Minuten)

    - Jahreszeitgrafik

    - den Beginn der 4 Jahreszeiten (Datum und Uhrzeit)

    - Monatskalender (aktueller Monat) mit Markierung von Geburts-, Hochzeits- und Jahrestagen


    Abfalltonnen:

    Das mit den Abfalltonnen habe ich aufgenommen, weil ich mir immer nicht merken kann, welche Tonnen am nächsten Freitag abgeholt werden. Aber gerade das ist vermutlich regional sehr verschieden. Hier bei uns ist das so, dass Altpapier und Gelber Sack jede Woche (Freitags) abgeholt werden, Restmüll alle 14 Tage und die O-Tonne alle 4 Wochen. Ich habe die Termine aber konfigurierbar gemacht (Konfigurationsfenster). Da kann man einstellen, wann die Tonne das letzte Mal abgeholt wurde und dann ob alle 1, 2 oder 4 Wochen.


    Feiertage:

    Wenn der heutige Tag auf einen Feiertag fällt, dann wird der entsprechende Feiertag oberhalb der Uhrzeit angezeigt. Außerdem sind die Feiertage im Kalender fett geschrieben und werden als Tooltip angezeigt.


    Sonnenaufgang und -untergang:

    Diese sind abhängig vom Ort, wo man sich gerade aufhält (Latitude und Longitude). Dafür habe ich eine Datenbank (Geonames) gefunden, in der die Postleitzahlen und die dazugehörigen Positionen abgespeichert sind. Man muss also im Konfigurationsfenster nur die eigene PLZ eintragen und das Programm sucht die dazugehörigen Positionen aus der Datenbank raus. Zur Überprüfung der Daten kann man sie sich bei OpenStreetMap anzeigen lassen (Lupen-Button neben den Positionen).


    Die besonderen Tage (Geburts-, Hochzeits- und Jahrestage):

    Dabei handelt es sich um Tage, die jedes Jahr wieder eine Bedeutung haben. Sie können im Konfigurationsfenster eingegeben/geändert/gelöscht werden. Sie sind dann im Kalender fett geschrieben und werden als Tooltip angezeigt (wobei die Anzahl der Jahre in Klammern dahinter steht).


    Alarmtöne:

    Im Konfigurationsfenster lasssen sich die MP3-Dateien für die beiden Alarmzeiten festlegen. Sind dort keine MP3s eingetragen, so wird ein interner Alarmton benutzt.


    Tray-Icon:

    Zentraler Anlaufpunkt ist das Icon der Digitaluhr im Tray-Bereich. Hier kann man das oben erwähnte Konfigurationsfenster aufrufen, das Programm in den Autostart packen, das Fenster nach vorne holen, die Programminformationen aufrufen und das Programm beenden.


    Alarmzeiten:

    Die beiden Alarmzeiten lassen sich einstellen, indem man links neben der Uhrzeit auf eine der beiden Uhrensymbole klickt. Es wird dann statt der Uhrzeit die jeweilige Alarmzeit angezeigt und nun kann man mit dem Mausrad die Stunden, Minuten oder Sekunden verstellen (je nachdem, worüber sich der Mauszeiger gerade befindet).

    Links neben den Uhrensymbolen befindet sich noch jeweils eine Checkbox. Wenn die Checkbox angehakt ist, dann ist die entsprechende Alarmzeit aktiv.

    Wenn eine der beiden Alarmzeiten erreicht wurde (und der Alarm aktiv ist), wird der dazugehörige Alarmton (MP3-Datei) abgespielt und es wird ein Alarmfenster (im Vordergrund) angezeigt.

    Der Alarmton wird nur einmal abgespielt (keine Wiederholung) und er kann abgestellt werden, indem man das Alarmfenster schließt. Spätestens nach 10 Minuten wird das Alarmfenster aber auch automatisch geschlossen.


    Countdown:

    Das Datum und die Uhrzeit für den "Countdown bis zum nächsten Urlaub" kann man mit einem Klick auf das Kalendersymbol (mit dem Fragezeichen) einstellen. Wählt man einen Tag vor dem heutigen Datum, so wird kein Countdown angezeigt.


    Lizenz:

    Das Programm steht unter der "CC BY-NC-ND 4.0" Lizenz

    - freie Weitergabe mit Namensnennung

    - nicht kommerziell

    - keine Bearbeitung

    https://creativecommons.org/licenses/by-nc-nd/4.0


    Screenshots:


    Digitaluhr_Screenshot1.pngDigitaluhr_Screenshot2.png

    Digitaluhr_Screenshot3.png


    Zusätzliche Hinweise:

    Im ZIP-Archiv (Anhang) befindet sich das Script und alle benötigten Includes. Die verwendeten Grafiken, Sounds und Fonts sind alle BASE64-codiert in "Ressource.au3" enthalten. Das heißt, eigentlich braucht man dann nur noch die Exe-Datei.

    Die ganzen Einstellungen und Daten (Geburtstage etc.) werden in einem Unterordner von @AppDataDir gespeichert.

    Danksagungen gibt es im Programminformationsfenster. An dieser Stelle aber ein zusätzliches Dankeschön an UEZ ("Base64 String"-Generator) und an BugFix (Feiertagsfunktion) hier aus dem Forum.


    Update v4.1 (18.06.2018):

    Ich habe vergessen die Wecker-Grafik als BASE64-String in Ressoure.au3 zu packen und im Programm war noch der Link auf den Gfx-Ordner eingetragen (der in der veröffentlichten Version gar nicht existiert).

    Bei der Gelegenheit habe ich dann noch das "WNr." gegen "KW" ausgetauscht. :)


    Update v4.2 (20.06.2018):

    - Ein kleiner Bug hatte sich in der Konfiguration eingeschlichen. Die neuen Daten wurden zwar gespeichert, aber die Anzeige im Kalender nicht aktualisiert. Behoben!

    - Die Alarmzeiten lassen sich nun auch mit den Cursortasten einstellen: <links> und <rechts> zum auswählen von Stunden, Minuten, Sekunden und <oben> und <unten> zum verändern der Werte. Der gerade aktive Wert ist grün unterstrichen. Danke autoBert!

    - Die Tooltips zum einstellen der Alarmzeiten ergänzt. Danke autoBert!

    - Es gibt jetzt einen Update-Button im Programminformationsfenster. Beim ersten Klick darauf, wird im Internet nachgesehen, ob es eine neue Version gibt. Wenn ja, muss man das eigentliche updaten nochmal bestätigen (kein Auto-Update!).

    Noch ein Hinweis zum Update:

    Das Update ist nur im kompilierten Zustand möglich! Das heißt, es wird auch nur die kompilierte Exe gegen die neue Exe ausgetauscht! Das evtl vorhandene Script und die Includes bleiben die alten. Wer immer das neueste Script haben will, muss sich das hier im Forum holen.

    Die Exe-Datei wird von meiner Homepage (technik-hobby.de) per HTTPS geladen und dann gegen die vorhandene Exe ausgetauscht. Der Austausch geschieht mit Hilfe einer temporär erstellten Batchdatei. Es ist also wichtig, dass das Programm Schreibrechte im Programmverzeichnis (@ScritpDir) hat.

    Eine "Installation" der Digitaluhr im Programme-Verzeichnis von Windows ist nicht zu empfehlen, weil man dann Administratorrechte für das Update bräuchte. Das halte ich für überflüssig.


    Update v4.2.1 (20.06.2018):

    - Den Bug mit "_WinAPI_GetVersion()" beseitigt. Danke Bitnugger!


    Update 4.3 (25.06.2018):

    - Die Updatefunktion hat nun einen TimeOut dazubekommen. Sollte der Download der neuen Version (aus welchen Gründen auch immer) länger als 60 Sekunden dauern, so wird das entsprechend angezeigt.

    - Die Progressbar befindet sich nun am unteren Rand vom Programminformationsfenster (kein ProgressOn/-Off mehr).

    - Ich habe das komplette Script jetzt umfangreich kommentiert, für den Fall dass jemand irgendeine Funktion des Scripts gebrauchen kann.

    - Beim kommentieren sind mir dann noch Code-Optimierungen aufgefallen, die ich gleich eingebaut habe. Somit hat sich am Script so einiges geändert. Am Aussehen aber nicht. :)


    Update 4.3.1 (25.06.2018):

    - Das Update war nur für einen internen Test.


    Update 4.3.2 (26.06.2018):

    - Ein Bug beim Update, wenn das Programm aus dem Autostart gestartet wurde. Dann stimmte das WorkingDir nicht mit dem ScriptDir überein und verursachte einen Fehler. Behoben!

  • Abfalltonnen: Bei uns kannst du dir im Internet einen Jahresplan im PDF-Format downloaden...der sieht dann etwa so aus:


    pasted-from-clipboard.png


    Wenn das Datum nicht korrekt ist, wird die entsprechende Tonne nicht angezeigt und du berücksichtigst auch nicht, dass wenn ein oder mehrere Feiertage in der Abholwoche vor dem Abholtag sind, sich dieser verschiebt.


    Aber sonst... echt super... jetzt noch einen einheitlichen Hintergrund, diesen, die Schriftfarben und die Transparenz einstellbar machen, dann ist es perfekt. ;-)


    pasted-from-clipboard.png

  • Ich finde es auch super. Vielen Dank.

    Allgemein lohnt sich immer ein Blick in deinen Code. Immer gut lesbar und man kann immer etwas Neues/Gutes mitnehmen.

  • Hallo Oscar,


    sieht spitze aus :thumbup:. Ich habe aber trotzdem eine Bitte an dich, da ich keine Maus sondern ein Touchpad benutze ist die Einstellung der Alarmzeiten nicht möglich.


    Ein Mini-Bug ist mir auch noch aufgefallen: Der Hinweis "Anklicken zum Stellen der Alarmzeit" erscheint auch während des Stellens. Sollte dann doch zu "Anklicken um zur akt. Zeit zurückzukehren" geändert werden.


    mfg


    (auto)Bert

  • Ich habe aber trotzdem eine Bitte an dich, da ich keine Maus sondern ein Touchpad benutze ist die Einstellung der Alarmzeiten nicht möglich.

    Ja stimmt, das ist suboptimal! Ich werde mal sehen, dass ich da noch eine Tastatureinstellung möglich mache.


    Ein Mini-Bug ist mir auch noch aufgefallen: Der Hinweis "Anklicken zum Stellen der Alarmzeit" erscheint auch während des Stellens. Sollte dann doch zu "Anklicken um zur akt. Zeit zurückzukehren" geändert werden.

    Ja, auch das! Danke, für den Hinweis! :)

    Ich arbeite sowieso gerade an der v4.2er Version. Da war noch ein Bug mit dem Konfigurationsfenster (nach speichern wird der Kalender nicht aktualisiert).

    Außerdem wird es dann eine Update-Funktion geben.

  • So, das neue Update ist fertig (siehe Post#1).


    Wer möchte, kann sich jetzt über den Update-Button auf dem Programminformationsfenster die aktuelle Exe-Datei direkt von meiner Homepage holen (siehe dazu auch den Hinweis in Post#1).

    Ich habe mit Absicht kein Auto-Update eingebaut, weil ich es hasse, dass "alle" Programme ungefragt im Internet nachsehen, ob es eine neue Version gibt. Bei mir muss man das "checken" anklicken und dann das eigentliche "updaten".

  • Diesen Bug habe ich schon vor langer Zeit im englischen Forum gemeldet, die sehen das Problem beim Coder der UDF... solange dieser nichts am Rückgabewert ändert... bleibt es so wie es ist.


    _WinAPI_GetVersion liefert als Ergebnis einen String und Oscar vergleicht dieses Ergebnis auch mit einem String... und in dem Fall ist "10" eben kleiner als "6.0"!


    Das Ergebnis von _WinAPI_GetVersion muss also vor der Prüfung in eine Zahl umgewandelt werden, damit der Vergleich wie beabsichtigt funktioniert.

    AutoIt
    If Number(_WinAPI_GetVersion()) < 6.0 Then Exit MsgBox($MB_ICONERROR, StringFormat('%s - v%3.3s', $sAppTitle, $sAppVersion), StringFormat('Systemvoraussetzung nicht erfüllt!\nWindows Vista oder höher wird benötigt.'))


    Edit: Ab AutoItVersion 3.3.14.3 liefert _WinAPI_GetVersion keinen String mehr, sondern ein Double.

    Dann würde es so reichen:

    Code
    If _WinAPI_GetVersion() < 6.0 Then Exit MsgBox($MB_ICONERROR, StringFormat('%s - v%3.3s', $sAppTitle, $sAppVersion), StringFormat('Systemvoraussetzung nicht erfüllt!\nWindows Vista oder höher wird benötigt.'))
  • Das Ergebnis von _WinAPI_GetVersion muss also vor der Prüfung in eine Zahl umgewandelt werden, damit der Vergleich wie beabsichtigt funktioniert.

    Ah ja! Blöder Bug! X(


    Dann benutzt ihr wahrscheinlich noch nicht die AutoIt-Version 3.3.14.5?

    Bei mir ist der Rückgabewert eine Nummer.

    Das erklärt, warum es nach dem neu kompilieren funktioniert.

    Ich habe noch 3.3.14.2.


    Edit:

    Na gut, dann gibt es noch eine neue Version (v4.2.1). So könnt ihr den Update-Button ausprobieren. :)

  • Ich hätte noch einen Vorschlag für dich...


    Die Digitaluhr soll ja wahrscheinlich nur auf dem Desktop angezeigt werden... bevor du sie anzeigst, solltest du also prüfen, ob dieser sichbar/aktiviert ist.

  • Die Digitaluhr soll ja wahrscheinlich nur auf dem Desktop angezeigt werden... bevor du sie anzeigst, solltest du also prüfen, ob dieser sichbar/aktiviert ist.

    Hmm...jetzt bin ich etwas verwirrt. Ist das beim starten aus dem @StartupDir nicht automatisch so?

    Ich dachte, dass die Programme aus dem User-Startup erst gestartet werden, wenn der Desktop geladen/aktiv ist.

  • Ist das beim starten aus dem @StartupDir nicht automatisch so?

    Nein. In welcher Reihenfolge die Programme aus @StartupDir gestartet werden, wird durch die Reihenfolge bestimmt, in der diese hinzugefügt wurden. Bei mir wird erst Total Commander (maximiert) gestartet und dann die DigitalUhr... die dann aber nicht auf dem Desktop ist.

  • Ja ok, verstehe... aber zumindest beim Systemstart sollte sie sich dann nicht über andere Fenster legen und nur angezeigt werden, wenn der Desktop vorne ist. ;-)


    Stichwort: _WinAPI_RegisterShellHookWindow


    Evtl. hast du ja auch Lust, es einstellbar zu machen... 8o

  • Edit:

    Na gut, dann gibt es noch eine neue Version (v4.2.1). So könnt ihr den Update-Button ausprobieren.

    Hallo


    herzlichen Dank für die Bereitstellung des Codes. Das Vorhaben ist klasse umgesetzt und der Code ist, wie üblich, hervorragend nachvollziehbar.


    Besonders dankbar bin ich für die Updatefunktion. Hab' schon viel darüber gelesen aber konnte mir wahrhaftig nicht vorstellen, dass es (für mich gesehen) so kompliziert werden könnte. Dank Deines Codes blicke ich erstmals durch, was alles für ein vernünftiges Update notwendig ist.


    Die Scrollfunktion für die Uhr, auch das nachträgliche Einbauen der Steuerung mit den Pfeiltasten ist faszinierend für mich. Mausrad Scroll Funktionen hatte ich noch nie vorher gesehen. Spitze umgesetzt.


    Es gibt immer was zu lernen, wenn Du skriptest. :thumbup:


    PS:

    Bei mir unter Win10 x64 startet die beiliegende .exe, nach einmaligem anhaken und anschließendem raushaken dennoch beim Windowsstart. Hatte bislang aber nur die V. 4 benutzt und die .ini belassen wie sie installiert wurde.

    Viele Grüße,
    -Bazii-

    Einmal editiert, zuletzt von bazii () aus folgendem Grund: PS: Tritt nicht mehr auf. Autostart funktioniert.