• Offizieller Beitrag

    Ich habe mal eine Digitaluhr programmiert.

    Neu! Version 2.1.6 ( 29.04.10 )

    Bisherige Features:

    - Immer im Vordergrund (Ja/Nein)
    - Transparenter Hintergrund (Ja/Nein)
    - Tray-Icon (Ja/Nein)
    - Uhrzeit-Format = Stunden : Minuten : Sekunden
    - Datum-Format = Tag . Monat . Jahr
    - Wochentagsanzeige (MO, DI, MI, DO, FR, SA, SO)
    - frei verschiebbar
    - Einstellungen werden in einer Inidatei im Anwendungsverzeichnis des angemeldeten Benutzers gespeichert
    - Sechs verschiedene Anzeigefarben (Gelb, Blau, Rot, Grün, Silber und Orange)
    - Ein Erinnerungstimer (Vorgaben: 1, 3, 5, 10 oder 20 Minuten) mit Progressbar und Restzeit-Anzeige. Kann über das Kontext- oder Traymenü abgebrochen werden.
    - Die Hintergrundfarbe der Restzeitanzeige kann geändert werden (um sie dem jeweiligen Skin anzupassen).
    - Der Erinnerungstimer kann außerdem bis 23:59 (hh:mm) minutengenau eingestellt werden.
    - Beim frei einstellbaren Erinnerungstimer kann man mittels Checkbox zwischen "Erinnern" und "Rechner runterfahren" umschalten.
    - 30 Sekunden vor dem Runterfahren wird man (zusätzlich zur Restzeitanzeige) jede Sekunde per ToolTip darüber informiert.
    - Stundensignal zu jeder vollen Stunde (einstellbar zwischen welchen Uhrzeiten z.B. zwischen 8:00 und 20:00 Uhr, Sound auswählbar)
    - Uhrzeit wird beim Programmstart, sowie jede Stunde (oder per Menüaufruf) per NTP (1.de.pool.ntp.org) synchronisiert (erfordert Internet-Verbindung)
    - Zwei unabhängige Weckzeiten einstellbar. Man kann auswählen an welchen Wochentagen, zu welcher Uhrzeit und mit welcher Sounddatei (*.mp3 oder *.wav) geweckt werden soll.
    - Alle Zahlen und Buchstaben sind Icons und können als Vorlage für eigene Farbvariationen dienen. Einen guten Freeware Icon-Editor gibt es hier
    - Hotkey [STRG] + [DEL] zum abbrechen des Wecksignals ist immer aktiv.
    - Bei der kompilierten Exe kann (per Kontextmenü) eine Verknüpfung im Autostart erstellt werden.
    - Traymenü-Eintrag, um die Uhr in den Vordergrund zu holen.
    - (Fast) alle Kontextmenü-Einträge sind nun auch aus dem Tray-Menü aufrufbar
    - Viele Kommentare
    - Sollte problemlos auch unter Windows Vista laufen


    Hinweis: Das Wecksignal läßt sich mit [STRG] + [DEL] abbrechen.

    History :

    Spoiler anzeigen


    History (Digitaluhr)

    Version 1.9.1 ( 22.06.08 :(
    - Es gab noch einen kleinen Bug mit dem Stundensignal. Die Progressbar (zwischen Uhrzeit und Datum) wurde immer angezeigt.
    - Man kann jetzt auswählen, ob man ein Tray-Icon haben möchte oder nicht

    Version 1.9.2 ( 24.06.08 :(
    - Die verfügbaren Farben sind nun abhängig von den Unterverzeichnissen im "gfx"-Verzeichnis. Wer sich eine eigene Farbvariante erstellen will, kann einfach eine Kopie eines der vorhandenen Verzeichnisse erstellen, die Farben nach den eigenen Vorstellungen anpassen und dem neuen Verzeichnis dann den Namen geben unter dem die Farbe im Kontextmenü erscheinen soll (mit anderen Worten: der Name des Verzeichnisses ist gleich dem Namen der Farbe im Kontexmenü). Beim nächsten Neustart der Uhr wird die neue Farbe dann automatisch erkannt und ins Kontextmenü übernommen.
    - Der erste Punkt hatte ein umbennen der Verzeichnisse im "gfx"-Verzeichnis zur Folge. Deshalb bitte entweder die Ini-Datei komplett löschen oder zumindest die Zeile mit dem Eintrag "Color". Die Ini-Datei findet ihr unter: C:\Dokumente und Einstellungen\Benutzername\Anwendungsdaten\Digitaluhr\Digitaluhr.ini

    Version 1.9.3 ( 24.06.08 :(
    - Bug in der Funktion _TimeSync() behoben.

    Version 2.0 ( 26.06.08 :(
    - Hintergrundfarbe der Restzeitanzeige des Erinnerungstimers kann nun frei eingestellt werden.
    - Shutdownfunktion für den Erinnerungstimer hinzugefügt.
    - Uhrzeit wird beim Farbwechsel sowie beim Start gleich richtig angezeigt. Nicht erst 00:00:00
    - Die Anfangs- und Endstunden beim Stundensignal werden nun nur noch als Stunden angezeigt und können auch nur so eingestellt werden.
    - Einige Änderungen beim individuellen Erinnerungstimer
    - zusätzliches Icon, das angezeigt wird, wenn der Shutdown eingeschaltet ist.
    - 30 Sekunden vor dem Shutdown wird man per ToolTip jede Sekunde darauf hingewiesen

    Version 2.0.1 ( 26.06.08 :(
    - Die wichtigsten Einstellungen werden jetzt gleich nach der jeweiligen Einstellung in die Inidatei gespeichert.
    - kleine Verzögerung (100 ms) vor dem Neustart eingefügt, um dem IniWrite genügend Zeit zu geben die Daten zu speichern.

    Version 2.0.2 ( 05.07.08 :(
    - Das Tray-Icon wurde nach einem Uhr-Neustart nicht versteckt, wenn man den Haken bei "Tray-Icon anzeigen" entfernt hat.
    - Beim Timer-Einstellungsfenster wurde ein Teil der Umrandung durch ein Label verdeckt.

    Version 2.1 ( 06.07.08 :(
    - Bug beim Synchronisieren der Uhrzeit beseitigt. Die Rechner-Uhrzeit wurde zwar gestellt, aber die Anzeige wurde nicht sofort aktualisiert.
    - Das (Tray- und Fenster-)Icon der Uhr etwas verändert.
    - Den Fortschrittsbalken für das Stundensignal entfernt.
    - Wenn das Stundensignal aktiviert ist und die Uhrzeit innerhalb der Signalzeit liegt, wird das jetzt mit einem Glocken-Icon angezeigt
    - Der Fortschrittsbalken des Erinnerungstimers befindet sich nun unterhalb der Restzeitanzeige (horizontal)

    Version 2.1.1 ( 06.07.08 :(
    - Aufruf der Sync-Funktion erfolgt nun am Anfang der Endlosschleife
    - Die einzelnen Anzeige-Elemente haben nun keine schwarze Umrandung mehr

    Version 2.1.2 ( 20.07.08 :(
    - Stundensignal-Endzeit wurde nicht richtig erkannt.

    Version 2.1.3 ( 23.08.08 :(
    - Timer beim Beenden nicht in der Inidatei gespeichert.

    Version 2.1.4 ( 06.10.08 :(
    - Uhr wurde nicht aktualisiert, wenn der User den Desktop mit Win+L gesperrt hat.

    Version 2.1.5 ( 09.10.08 :(
    - Uhr wird jetzt automatisch aktualisiert beim Benutzerwechsel, An-/Abmelden und Lock/Unlock.
    - Die einzelnen Anzeige-Elemente haben nun wieder eine schwarze Umrandung (sieht auf hellem Untergrund besser aus)

    Version 2.1.6 ( 29.04.10 :(
    - Anpassungen, damit das Script auch mit der aktuellen AutoIt-Version funktioniert.

    Screenshot:
    TristateTreeview-sample.au3

  • Finde ich richtig cool, wie du das hingekriegt hast.
    Hab mir den Code angeschaut, verstehe nur 40% davon ^^

    Gruß Remax

  • Wäre doch viel Interressanter, wenn du nur _ und | Balken verwenden würdest und daraus kannst du ja auch die Uhrzeit zusammensetzen ;)
    Braucht weniger Festplattenspeicher und ist eine kleine Herausforderung ;)

  • Hallo !

    Ein weiteres Programm in Oscar-Qualität.

    Das flackern der GUI ist in Version 1.1 abgestellt.
    „Copyright“ bitte nur einmal, also „by Oscar“ eintragen.

    Welche Autoit-Version wurde benutzt?
    Bei mir gibt es viele Fehlermeldungen bei der au3-Datei?
    Die Exe-Datei funktioniert tadellos !

    PS: Oscar gute Arbeit, meine Bemerkungen sind gut gemeinte Hinweise – kein meckern.

    Schönes WE und weiterhin
    viel Erfolg !

  • ist noch 3.2.10.0 denk ich. Für die neue Stable fehlt ein:
    #include<WindowsConstants.au3>

  • Hallo Oscar,

    gefällt mir gut Dein Programm, aber es geht noch mehr !

    Warum überhaupt Includes, in diesem Fall ? ;)

    Digitaluhr by Oscar - GANZ OHNE INCLUDES

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=Digitaluhr1201.exe
    #AutoIt3Wrapper_Res_Fileversion=1.2.0.1
    #AutoIt3Wrapper_Res_LegalCopyright=by Oscar
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Run_Tidy=y
    #AutoIt3Wrapper_Run_Obfuscator=y
    #Obfuscator_Parameters=/striponly
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    Global Const $GUI_CHECKED = 1
    Global Const $GUI_UNCHECKED = 4
    Global Const $GUI_BKCOLOR_TRANSPARENT = -2
    Global Const $GUI_WS_EX_PARENTDRAG = 0x00100000
    Global Const $WS_MINIMIZEBOX = 0x00020000
    Global Const $WS_SYSMENU = 0x00080000
    Global Const $WS_CAPTION = 0x00C00000
    Global Const $WS_POPUP = 0x80000000
    Global Const $WS_EX_TOOLWINDOW = 0x00000080
    Global Const $WS_EX_LAYERED = 0x00080000
    Global Const $GUI_SS_DEFAULT_GUI = BitOR($WS_MINIMIZEBOX, $WS_CAPTION, $WS_POPUP, $WS_SYSMENU)

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1) ; Schaltet den OnEvent-Mode ein
    Opt('GUICloseOnESC', 0) ; das drücken der ESC-Taste führt nicht zum beenden des Programms
    Global $H = -1, $M = -1, $S = -1, $W = -1, $Path = @ScriptDir & '\gfx\', $Ini = @ScriptDir & '\Digitaluhr.ini'
    Global $X = IniRead($Ini, 'Position', 'X', -1) ; X-Position der Uhr aus der Inidatei lesen, wenn nicht vorhanden, dann zentrieren
    Global $Y = IniRead($Ini, 'Position', 'Y', -1) ; Y-Position der Uhr aus der Inidatei lesen, wenn nicht vorhanden, dann zentrieren
    Global $ExStyle = IniRead($Ini, 'Style', 'ExStyle', $WS_EX_TOOLWINDOW) ; den erweiterten Stil (ToolWindow und evtl. Transparent) für die GUI aus der Inidatei lesen
    Global $OnTop = IniRead($Ini, 'Style', 'OnTop', 1) ; Den Wert für "Immer im Vordergrund" aus der Inidatei lesen
    Global $Color = IniRead($Ini, 'Style', 'Color', 'yellow\') ; Den Wert für die Farbe der Anzeige aus der Inidatei lesen. Wenn Ini-Eintrag nicht vorhanden, dann Gelb auswählen
    Global $BKColor = IniRead($Ini, 'Style', 'BKColor', 0x000000) ; Den Wert der Hintergrundfarbe aus der Inidatei lesen. Wenn Ini-Eintrag nicht vorhanden, dann Schwarz auswählen

    [/autoit] [autoit][/autoit] [autoit]

    Global $GUI = GUICreate('Digitaluhr', 336, 128, $X, $Y, $WS_POPUP, $ExStyle) ; GUI erstellen
    WinSetOnTop('Digitaluhr', '', $OnTop) ; den Wert für "Immer im Vordergrund" setzen
    GUISetBkColor($GUI_BKCOLOR_TRANSPARENT) ; Hintergrundfarbe der Anzeige

    [/autoit] [autoit][/autoit] [autoit]

    Global $label = GUICtrlCreateLabel('', 0, 0, 336, 128, -1, $GUI_WS_EX_PARENTDRAG) ; ein transparentes Label erstellen, damit man die Uhr verschieben kann
    GUICtrlSetBkColor(-1, $BKColor)
    Global $menu = GUICtrlCreateContextMenu($label) ; Kontextmenü (rechte Maustaste) erstellen
    GUICtrlCreateMenuItem('Digitaluhr', $menu) ; Kontextmenü-Überschrift erstellen
    GUICtrlCreateMenuItem('', $menu) ; horizontaler Balken
    Global $cmenu = GUICtrlCreateMenu('Anzeigefarbe', $menu)
    Global $cmenuy = GUICtrlCreateMenuItem('Gelb/Schwarz', $cmenu)
    GUICtrlSetOnEvent(-1, '_ColorChangeY') ; wenn angeklickt, dann die Funktion _ColorChange() ausführen
    Global $cmenub = GUICtrlCreateMenuItem('Blau/Weiß', $cmenu)
    GUICtrlSetOnEvent(-1, '_ColorChangeB') ; wenn angeklickt, dann die Funktion _ColorChange() ausführen
    Switch $Color
    Case 'yellow\' ; Wenn Anzeigefarbe = Gelb/Schwarz
    GUICtrlSetState($cmenuy, $GUI_CHECKED) ; Haken bei Gelb/Schwarz setzen
    GUICtrlSetState($cmenub, $GUI_UNCHECKED) ; und bei Blau/Weiß entfernen
    Case 'blue\' ; Wenn Anzeigefarbe = Blau/Weiß
    GUICtrlSetState($cmenub, $GUI_CHECKED) ; Haken bei Blau/Weiß setzen
    GUICtrlSetState($cmenuy, $GUI_UNCHECKED) ; und bei Gelb/Schwarz entfernen
    EndSwitch
    Global $G_OnTop = GUICtrlCreateMenuItem('Immer im Vordergrund', $menu) ; Kontextmenüeintrag "Immer im Vordergrund" erstellen
    GUICtrlSetOnEvent(-1, '_OnTop') ; wenn angeklickt, dann die Funktion _OnTop() ausführen
    If $OnTop = 1 Then ; Wenn OnTop auf "Immer im Vordergrund",
    GUICtrlSetState(-1, $GUI_CHECKED) ; dann einen Haken neben den Menüeintrag setzen
    Else
    GUICtrlSetState(-1, $GUI_UNCHECKED) ; sonst den Haken löschen
    EndIf
    Global $trans = GUICtrlCreateMenuItem('Transparent', $menu) ; Kontextmenüeintrag "Transparent" erstellen
    GUICtrlSetOnEvent(-1, '_Transparent') ; wenn angeklickt, dann die Funktion _Transparent() ausführen
    If $ExStyle = $WS_EX_TOOLWINDOW Then ; Wenn der erweitere Stil nur ToolWindow (kein Transparent) enthält,
    GUICtrlSetState(-1, $GUI_UNCHECKED) ; dann den Haken von Transparent löschen
    Else
    GUICtrlSetState(-1, $GUI_CHECKED) ; sonst den Haken setzen
    EndIf
    Global $end = GUICtrlCreateMenuItem('Beenden', $menu) ; Kontextmenüeintrag "Beenden" erstellen
    GUICtrlSetOnEvent(-1, '_End') ; wenn angeklickt, dann die Funktion _End() ausführen

    [/autoit] [autoit][/autoit] [autoit]

    Global $DA[6], $DP[2], $DD[2] ; Arrays für die Dummys (Abstandshalter, Doppelpunkt und Punkt)
    Global $GUI_H1 = GUICtrlCreatePic($Path & $Color & '0.gif', 0, 0, 46, 78) ; 10er Stelle für die Stunden
    Global $GUI_H2 = GUICtrlCreatePic($Path & $Color & '0.gif', 46, 0, 46, 78) ; 1er Stelle für die Stunden
    $DA[0] = GUICtrlCreatePic($Path & $Color & 'nd.gif', 92, 0, 12, 78) ; Abstandshalter
    $DP[0] = GUICtrlCreatePic($Path & $Color & 'dp.gif', 104, 0, 12, 78) ; Doppelpunkt
    Global $GUI_M1 = GUICtrlCreatePic($Path & $Color & '0.gif', 116, 0, 46, 78) ; 10er Stelle für die Minuten
    Global $GUI_M2 = GUICtrlCreatePic($Path & $Color & '0.gif', 162, 0, 46, 78) ; 1er Stelle für die Minuten
    $DA[1] = GUICtrlCreatePic($Path & $Color & 'nd.gif', 208, 0, 12, 78) ; Abstandshalter
    $DP[1] = GUICtrlCreatePic($Path & $Color & 'dp.gif', 220, 0, 12, 78) ; Doppelpunkt
    Global $GUI_S1 = GUICtrlCreatePic($Path & $Color & '0.gif', 232, 0, 46, 78) ; 10er Stelle für die Sekunden
    Global $GUI_S2 = GUICtrlCreatePic($Path & $Color & '0.gif', 278, 0, 46, 78) ; 1er Stelle für die Sekunden
    $DA[2] = GUICtrlCreatePic($Path & $Color & 'nd.gif', 324, 0, 12, 78) ; Abstandshalter

    [/autoit] [autoit][/autoit] [autoit]

    Global $GUI_D1 = GUICtrlCreatePic($Path & $Color & '0.gif', 60, 85, 23, 39) ; 10er Stelle für den Tag
    Global $GUI_D2 = GUICtrlCreatePic($Path & $Color & '0.gif', 83, 85, 23, 39) ; 1er Stelle für den Tag
    $DA[3] = GUICtrlCreatePic($Path & $Color & 'nd.gif', 106, 85, 6, 39) ; Abstandshalter
    $DD[0] = GUICtrlCreatePic($Path & $Color & 'd.gif', 112, 85, 6, 39) ; Punkt
    Global $GUI_Mo1 = GUICtrlCreatePic($Path & $Color & '0.gif', 118, 85, 23, 39) ; 10er Stelle für den Monat
    Global $GUI_Mo2 = GUICtrlCreatePic($Path & $Color & '0.gif', 141, 85, 23, 39) ; 1er Stelle für den Monat
    $DA[4] = GUICtrlCreatePic($Path & $Color & 'nd.gif', 164, 85, 6, 39) ; Abstandshalter
    $DD[1] = GUICtrlCreatePic($Path & $Color & 'd.gif', 170, 85, 6, 39) ; Punkt
    Global $GUI_Y1 = GUICtrlCreatePic($Path & $Color & '0.gif', 176, 85, 23, 39) ; 1000er Stelle für das Jahr
    Global $GUI_Y2 = GUICtrlCreatePic($Path & $Color & '0.gif', 199, 85, 23, 39) ; 100er Stelle für das Jahr
    Global $GUI_Y3 = GUICtrlCreatePic($Path & $Color & '0.gif', 222, 85, 23, 39) ; 10er Stelle für das Jahr
    Global $GUI_Y4 = GUICtrlCreatePic($Path & $Color & '0.gif', 245, 85, 23, 39) ; 1er Stelle für das Jahr
    $DA[5] = GUICtrlCreatePic($Path & $Color & 'nd.gif', 268, 85, 6, 39) ; Abstandshalter

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW, $GUI) ; GUI anzeigen

    [/autoit] [autoit][/autoit] [autoit]

    While 1 ; Endlosschleife
    If $H <> @HOUR Then ; Wenn sich die Stunden verändert haben,
    _SetClock($GUI_H1, $GUI_H2, @HOUR) ; dann die Control-IDs der Stunden an die Funktion _SetClock() übergeben
    $H = @HOUR ; Neuen Vergleichswert setzen
    EndIf
    If $M <> @MIN Then ; Wenn sich die Minuten verändert haben,
    _SetClock($GUI_M1, $GUI_M2, @MIN) ; dann die Control-IDs der Minuten an die Funktion _SetClock() übergeben
    $M = @MIN ; Neuen Vergleichswert setzen
    EndIf
    If $S <> @SEC Then ; Wenn sich die Sekunden verändert haben,
    _SetClock($GUI_S1, $GUI_S2, @SEC) ; dann die Control-IDs der Sekunden an die Funktion _SetClock() übergeben
    $S = @SEC ; Neuen Vergleichswert setzen
    EndIf
    If $W <> @WDAY Then ; Wenn sich der Tag geändert hat
    _SetClock($GUI_D1, $GUI_D2, @MDAY) ; dann die Control-IDs des Tages an die Funktion _SetClock() übergeben
    _SetClock($GUI_Mo1, $GUI_Mo2, @MON) ; die Control-IDs des Monats an die Funktion _SetClock() übergeben
    _SetClock($GUI_Y1, $GUI_Y2, StringLeft(@YEAR, 2)) ; die linken 2 Control-IDs des Jahres an die Funktion _SetClock() übergeben
    _SetClock($GUI_Y3, $GUI_Y4, StringRight(@YEAR, 2)) ; und die rechten 2 Control-IDs des Jahres an die Funktion _SetClock() übergeben
    $W = @WDAY ; Neuen Vergleichswert setzen
    EndIf
    Sleep(900) ; um den Prozessor nicht zu sehr zu belasten
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _SetClock($first, $second, $value)
    $v1 = $Path & $Color & StringLeft($value, 1) & '.gif' ; 10er Stelle aus dem übergebenen Wert lesen und entsprechende Grafik + Pfad erstellen
    $v2 = $Path & $Color & StringRight($value, 1) & '.gif' ; 1er Stelle aus dem übergebenen Wert lesen und entsprechende Grafik + Pfad erstellen
    GUICtrlSetImage($first, $v1) ; die neue Grafikdatei für die 10er Stelle setzen
    GUICtrlSetImage($second, $v2) ; die neue Grafikdatei für die 1er Stelle setzen
    EndFunc ;==>_SetClock

    [/autoit] [autoit][/autoit] [autoit]

    Func _ColorChangeY()
    GUICtrlSetState($cmenuy, $GUI_CHECKED) ; Kontextmenueintrag: Haken bei Gelb/Schwarz setzen
    GUICtrlSetState($cmenub, $GUI_UNCHECKED) ; Kontextmenueintrag: Haken bei Blau/Weiß löschen
    $Color = 'yellow\' ; Pfad zur Farbe setzen
    $BKColor = 0x000000 ; Hintergrundfarbe auswählen
    Global $H = -1, $M = -1, $S = -1, $W = -1 ; Stunden, Minuten, Sekunden und Tag auf -1 setzen, damit Anzeige refresht wird
    _DummyRefresh()
    EndFunc ;==>_ColorChangeY

    [/autoit] [autoit][/autoit] [autoit]

    Func _ColorChangeB()
    GUICtrlSetState($cmenub, $GUI_CHECKED) ; Kontextmenueintrag: Haken bei Blau/Weiß setzen
    GUICtrlSetState($cmenuy, $GUI_UNCHECKED) ; Kontextmenueintrag: Haken bei Gelb/Schwarz löschen
    $Color = 'blue\' ; Pfad zur Farbe setzen
    $BKColor = 0xffffff ; Hintergrundfarbe auswählen
    Global $H = -1, $M = -1, $S = -1, $W = -1 ; Stunden, Minuten, Sekunden und Tag auf -1 setzen, damit Anzeige refresht wird
    _DummyRefresh()
    EndFunc ;==>_ColorChangeB

    [/autoit] [autoit][/autoit] [autoit]

    Func _DummyRefresh()
    For $i = 0 To 1 ; Die Grafikdateien der Abstandshalter, Doppelpunkte und Punkte neu laden
    GUICtrlSetImage($DA[$i], $Path & $Color & 'nd.gif')
    GUICtrlSetImage($DA[2 + $i], $Path & $Color & 'nd.gif')
    GUICtrlSetImage($DA[4 + $i], $Path & $Color & 'nd.gif')
    GUICtrlSetImage($DP[$i], $Path & $Color & 'dp.gif')
    GUICtrlSetImage($DD[$i], $Path & $Color & 'd.gif')
    Next
    GUICtrlSetBkColor($label, $BKColor) ; Hintergrundfarbe der Anzeige setzen
    If BitAND(GUICtrlRead($trans), $GUI_CHECKED) Then _Newstart(); Wenn Transparent, dann Programm neustarten
    EndFunc ;==>_DummyRefresh

    [/autoit] [autoit][/autoit] [autoit]

    Func _End()
    $Pos = WinGetPos('Digitaluhr') ; die momentane Position der Uhr ermitteln und in dem Array $Pos speichern
    IniWrite($Ini, 'Position', 'X', $Pos[0]) ; X-Position in die Inidatei speichern
    IniWrite($Ini, 'Position', 'Y', $Pos[1]) ; Y-Position in die Inidatei speichern
    IniWrite($Ini, 'Style', 'OnTop', $OnTop) ; Den Wert von "Immer im Vordergrund" in die Inidatei speichern
    IniWrite($Ini, 'Style', 'Color', $Color) ; Den Wert der Anzeigefarbe in die Inidatei speichern
    IniWrite($Ini, 'Style', 'BKColor', $BKColor) ; Den Wert der Anzeigefarbe in die Inidatei speichern
    Exit ; Programm beenden
    EndFunc ;==>_End

    [/autoit] [autoit][/autoit] [autoit]

    Func _Newstart()
    If @Compiled Then ; Wenn das Script bereits kompiliert ist,
    Run(@AutoItExe) ; dann direkt aufrufen
    Else
    Run('"' & @AutoItExe & '" /ErrorStdOut "' & @ScriptFullPath & '"') ; sonst als Script
    EndIf
    _End() ; die Beenden-Funktion aufrufen
    EndFunc ;==>_Newstart

    [/autoit] [autoit][/autoit] [autoit]

    Func _Transparent()
    If BitAND(GUICtrlRead($trans), $GUI_CHECKED) Then ; Wenn Transparent,
    $ExStyle = $WS_EX_TOOLWINDOW ; dann neuer Stil = nicht transparent
    Else
    $ExStyle = BitOR($WS_EX_LAYERED, $WS_EX_TOOLWINDOW) ; sonst neuer Stil = transparent
    EndIf
    IniWrite($Ini, 'Style', 'ExStyle', $ExStyle) ; den neuen Stil in die Inidatei speichern
    _Newstart() ; und Programm neustarten
    EndFunc ;==>_Transparent

    [/autoit] [autoit][/autoit] [autoit]

    Func _OnTop()
    If $OnTop = 1 Then ; Wenn "Immer im Vordergrund" angehakt ist,
    $OnTop = 0 ; dann Wert auf Null setzen
    GUICtrlSetState($G_OnTop, $GUI_UNCHECKED) ; Haken entfernen
    Else
    $OnTop = 1 ; sonst Wert auf Eins setzen
    GUICtrlSetState($G_OnTop, $GUI_CHECKED) ; Haken setzen
    EndIf
    WinSetOnTop('Digitaluhr', '', $OnTop) ; und den Wert setzen
    EndFunc ;==>_OnTop

    [/autoit]


    Schönes WE und weiterhin viel Erfolg !

  • Hallo Oscar,

    macht es vielleicht Sinn, wenn Du die Zeitdifferenz-Abfrage nicht über If-Abfragen ausführst, sondern einfach einmal/Sek.
    z.B. mit:

    AdlibEnable("_SetClock", 1000) einsetzt?

    Vielleicht kann ich ja ein wenig zum Optimieren des Codes beitragen :)
    ( oder was lernen :D )

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • Offizieller Beitrag

    Ich mache das extra über die If-Abfragen, weil dadurch nur die Werte geändert werden, die sich auch wirklich verändert haben. Mit AdlibEnable müßte man alle Werte immer wieder neu schreiben oder man müßte ebenfalls eine Abfrage einbauen. Wäre also keine Verbesserung. Ich bin aber dennoch für Kritik und Verbesserungsvorschläge sehr dankbar.

    Als nächstes wird es übrigens eine Timer-Funktion für die Uhr geben. Das programmiere ich gerade. :)

  • Hallo Oscar,

    du hast Recht.
    bringt wirklich nichts. Hab ich ausprobiert.

    Gibt es eigentlich eine Möglichkeit, die gif-Dateien beim Start in den Speicher zu laden und von dort auszutauschen?
    Ich denke die 3% CPU-Last auf meiner Maschine gehen zu Lasten des ständigen Bilder neu ladens von HDD.

    PS: Das Script ist echt gut.
    Hab gar nicht gewusst, das man so "fensterlose" Sachen machen kann :)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo Oscar,

    hab noch einen Verbesserungsvorschlag.
    Du kannst die .gif-Dateien doch includieren ohne FileInstall und Ablage auf der HDD:
    Hab ich aus einem Post von progandy:

    http://www.autoitscript.com/forum/index.php?showtopic=51103

    hab ich hier gefunden:
    [ offen ] GUI - frage zum editfeld!

    vielleicht kannst Du das ja brauchen :)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    • Offizieller Beitrag

    Das mit dem includieren der Dateien ist ziemlich aufwändig. Müßte man ja alle Dateien einzeln eintragen. Kommt vielleicht mal, wenn das Programm fertig ist.

    Jetzt gibt's erstmal Version 1.4.2 mit vier verschiedenen Farben (gelb, blau, rot und grün) und dem Funkuhr-Icon in der entsprechenden Farbe. Außerdem habe ich den Code mal etwas optimimert.

    Download wie immer in Post #1

  • Hallo,

    Vers. 1201 war sehr ausgewogen, selbst der Obfuscator wusste nichts hinzu zufügen. Daher meine Anregung die Includes weglassen (ca. 10 Zeilen zusätzlich, siehe meine Post vom 17.05.2008 ).

    In der 142er wurde auf die kl. Uhr zu Gunsten der Transparents verzichtet, wie auch die Msgbox beim Timer nicht mehr verdeckt wird. :thumbup:

    Ein (bei mir) leichtes flackern der Sekunden, könnte vielleicht durch Verkleinerung (in "Sec.") behoben werden ?

    Als Anregung:
    Eine Anzeige des Wochentages (Mo;Die;Fr) könnte ich mir gut vorstellen. ;)
    Die Änderung der GUI - Größe ist wohl schwieriger ?

    Ein schönes Projekt und weiterhin viel Erfolg !

    • Offizieller Beitrag

    Ich sehe keinen Sinn darin die Constants-Includes wegzulassen und stattdessen alle Konstanten von Hand einzufügen.

    Ein flackern ist bei mir nicht auszumachen, versuch doch mal den Sleepwert etwas runter zu setzen (z.B. auf 900).

    Das mit dem Wochentag ist keine schlechte Idee, aber etwas aufwendiger, weil ich die GIFs dazu erst erstellen muss. (Kommt vielleicht später)

    Die GUI-Größe ist ganz stark von den Digitalzahlen abhängig und somit nicht änderbar. Jedenfalls nicht so einfach.

    Momentan bin ich gerade dabei zwei unabhängige Weckzeiten zu integrieren.