Zeitkartenberechnung/Datumsdifferenzen

  • Hi,
    ..neulich war es mal wieder soweit: Gilt meine Monatskarte heute noch oder nicht?
    Für so einen Fall habe ich mir mal ein HTA-Skript geschrieben, aber das kann's doch
    nicht sein, nicht wirklich..
    Außerdem mußte ich ja das neue Scite ausprobieren und auch die neueste Beta.
    Alles k.P., also habe ich mir mit Koda erstmal eine 'schicke' Oberfläche gebastelt.
    (Meine erste mit Kalender-Controls..)
    Koda hat auch brav mitgespielt, sogar bei der Formatierung des Datums, okay.
    Ich füge also den Code in das Skript ein und wer beschreibt mein Erstaunen, als ich
    dort eine Zeile mit einem (für mich) neuen Befehl fand:

    [autoit]

    GuiCtrlSendMsg(-1, 0x1005, 0, "ddd, dd.MM.yyyy")

    [/autoit]

    Da die Zeile von Scite nicht bemängelt wurde, hatte ich keine Probleme damit..
    Ich hatte das Skript fast fertig, da ritt mich der Teufel und ich ließ es per Beta-Run
    laufen(ob das Absicht war oder ein Versehen weiß ich jetzt nicht mehr :rofl: :(
    Jedenfalls lief es nicht so, wie ich es erwartet hatte(in den Kalender-Controls stand
    nur der Tag des Monats..). Ooops, verschrieben? Nö, mit der Stable ist alles klar.
    Ich habe mir dann die Hilfe zum Kalender-Control angesehen und $DTS_SHORTDATEFORMAT
    gefunden, damit geht es auch und wer den Wochentag braucht, kann ja das jeweilige
    Control aufklappen. So, genug der Vorrede, hier isses:

    Spoiler anzeigen
    [autoit]

    ;<AutoItScript>
    #NoTrayIcon ;Ohne Icon im Tray, hängende Prozesse im ProcessViewer beenden
    Opt("MustDeclareVars", 0) ;0=ohne, 1=erfordert Variablen-Deklaration
    #include <GUIConstants.au3>
    #include <Constants.au3>
    #include <date.au3>
    ;+----------------------------------------------------------------------------+
    ;| Header: Bestimmen der Übergabeparameter |
    ;| ( Alles Strings(!!!), bis auf ArgC ) |
    ;| FontAnzeigeCheck: |Il1 sind Alt-0124, Großes i, Kleines L, Eins |
    Const $Autor="Zeitkarte.au3 ©2007 by ytwinky, MD"; |
    ;| EMail: [email='PIII1kSystem-AutoIt3Forum@yahoo.de'][/email] |
    ;| AutoIt3-Version: aktuelle beta |
    ;| Editor: SciTE aktuelle Version, feste Schriftart |
    ;| Zweck : Ermitteln der FBC-Versionen(geht nur auf PIII1k) |
    ;| Tab auf 2 setzen wg. Lesbarkeit |
    ;+----------------------------------------------------------------------------+
    Const $Moka=31, $Woka=7
    Dim $Diff, $s
    #Region ### START Koda GUI section ### Form=D:\Sprachen\AutoIt3\au3\kxf\Zeitkarte.kxf
    $Zeitkarte=GUICreate("Zeitkarte", 308, 209, 248, 209)
    GUISetFont(10, 400, 0, "Arial")
    $Rahmen=GUICtrlCreateGroup("", 0, -44, 308, 253)
    $Titel=GUICtrlCreateLabel("Zeitkarten-Berechnung", 8, 4, 295, 33, $SS_CENTER)
    GUICtrlSetFont(-1, 18, 800, 0, "Arial")
    GUICtrlSetColor(-1, 0x000080)
    GUICtrlSetTip(-1, "©2007 by ytwinky, MD")

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

    $grModus=GUICtrlCreateGroup("Berechnungsmodus", 156, 36, 144, 105)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $rbMonat=GUICtrlCreateRadio("Monatskarte", 160, 56, 113, 17)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetTip(-1, "..gilt " &$MoKa &" Tage")
    $rbWoche=GUICtrlCreateRadio("Wochenkarte", 160, 86, 113, 21)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetTip(-1, "..gilt " &$WoKa &" Tage")
    $rbDelta=GUICtrlCreateRadio("Datumsdifferenz", 160, 120, 113, 17)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetTip(-1, "..berechnen ;-))")
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $grErster=GUICtrlCreateGroup("Erster Geltungstag", 8, 36, 142, 49)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $ETag=GUICtrlCreateDate("2000/12/13", 16, 56, 127, 24, $DTS_SHORTDATEFORMAT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $grLetzter=GUICtrlCreateGroup("Letzter Geltungstag", 8, 92, 142, 49)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $LTag=GUICtrlCreateDate(_NowDate(), 16, 112, 127, 24, $DTS_ShortDATEFORMAT)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $grDelta=GUICtrlCreateGroup("Differenz in Tagen", 8, 148, 142, 53)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    $efDelta=GUICtrlCreateInput("", 16, 169, 57, 24)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $btQuit=GUICtrlCreateButton("Quit", 224, 177, 75, 25, 0)
    GUICtrlSetFont(-1, 10, 800, 0, "Arial")
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    _DeltaDate()

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

    While 1
    Switch GUIGetMsg()
    Case $rbMonat, $rbWoche, $rbDelta
    If GUICtrlRead($rbDelta)=$GUI_CHECKED Then
    GUICtrlSetState($efDelta, $GUI_Show)
    GUICtrlSetState($grDelta, $GUI_Show)
    _DeltaDate()
    Else
    GUICtrlSetState($efDelta, $GUI_HIDE)
    GUICtrlSetState($grDelta, $GUI_HIDE)
    $Diff=$Moka
    If GuiCtrlRead($rbWoche)=$GUI_CHECKED Then $Diff=$Woka
    $s=_Ger2EngDate($ETag)
    $s=_DateAdd("D", $Diff-1, $s)
    GUICtrlSetData($LTag, $s)
    EndIf
    Case $GUI_EVENT_CLOSE, $btQuit
    Exit
    EndSwitch
    Wend

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

    Func _DeltaDate()
    Dim $e=_Ger2EngDate($ETag), $l=_Ger2EngDate($LTag), $d=_DateDiff("D", $e, $l)+1
    If @Error Then $d="@Error " &@Error
    GUICtrlSetData($efDelta, $d)
    EndFunc

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

    Func _Ger2EngDate($From)
    Dim $d=GuiCtrlRead($From), $n=StringRight($d, 4) &"/" &StringMid($d, 4, 2)
    Return $n &"/" &StringLeft($d, 2)
    EndFunc

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

    ;</AutoItScript>

    [/autoit]

    Ach so, ne Frage habe ich ja auch noch:
    Gibt es eine (kurze) Erklärung für das, was ich eingangs beschrieben habe?
    Ich würde nämlich schon ganz gerne den Wochentag mit in der Maske haben..
    (Nein, nicht in einem Extra-Input-Feld :D)
    Gruß
    ytwinky

    (Ich) benutze stets die aktuelle (Beta) und SciTE..