Berechnung der zeitlichen Dauer - Einbinden in eine GUI

  • Hallo zusammen,

    ich hab mir ein kleines Programm geschrieben, um die Dauer für einen bestimmten Vorgang ausrechnen zu lassen.

    Mein eigentliches Problem besteht darin, dass er bei bestimmten Eingaben falsch rechnet, obwohl er das eigentlich laut IF-Anweisungen nicht sollte.

    Geb ich in mein Programm z.B. folgendes ein:
    Start-Stunde 8, Start-Minute 10, End-Stunde 10, End-Minute 16 => Ergebnis: Dauer 26:06 (!?!)

    Geb ich aber folgendes ein dann geht alles einwandfrei:
    Start-Stunde 08, Start-Minute 10, End-Stunde 10, End-Minute 16 => Ergebnis: Dauer 02:06 (!?!)

    Auch das hier geht einwandfrei:
    Start-Stunde 8, Start-Minute 10, End-Stunde 9, End-Minute 16 => Ergebnis: Dauer 01:06
    Start-Stunde 12, Start-Minute 10, End-Stunde 14, End-Minute 16 => Ergebnis: Dauer 02:06


    Woran könnte das liegen? Ich find den Fehler einfach nicht. Bin da schon fast am verzweifeln...

    Falls ihr für die Eingabe der Uhrzeit und die "Verarbeitung" ne bessre Lösung habt, in der ich die Zeiten dann komplett eingeben kann (z.B.: 08:15 oder 15:36 anstatt Stunde und Minute einzeln) wäre ich auch sehr dankbar. Ich hab keine Möglichkeit gefunden den String nachträglich noch zu "zerpflücken".

    Danke schonmal für eure Hilfe. Das Skript häng ich an den Beitrag mit an.

    Gruß Andi

    • Offizieller Beitrag

    Hallo,

    Strings werden immer Zeichen für Zeichen verglichen, da die 8 größer ist als die 1 kommt es zu diesem Fehler!
    Du must den String aus der Inputbox einfach in einen Integer konvertieren dann gehts:

    Spoiler anzeigen
    [autoit]

    $start_uhr= Int(InputBox("Startzeit eingeben", "Bitte geben Sie den Beginn ein" & @CR & "(z.B. 08 oder 15)"))
    $start_min= Int(InputBox("Startzeit eingeben", "Bitte geben Sie die Beginn-Minute ein" & @CR & "(z.B. 02 oder 56)"))
    $end_uhr= Int(InputBox("Endzeit eingeben", "Bitte geben Sie die End-Stunde ein"))
    $end_min= Int(InputBox("Endzeit eingeben", "Bitte geben Sie die End-Minute ein"))

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

    #comments-start
    If ($start_uhr < 10) Then
    $start_uhr = 0 & $start_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf

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

    If ($start_min < 10) Then
    $start_min = 0 & $start_min ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf
    #comments-end

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

    If ($start_uhr <= $end_uhr) Then
    $dauer_uhr = $end_uhr - $start_uhr
    ElseIf ($start_uhr > $end_uhr) Then
    $dauer_uhr = (24 - $start_uhr) + $end_uhr
    EndIf

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

    If ($start_min > $end_min) Then
    $dauer_min = 60 - ($start_min - $end_min)
    $dauer_uhr = $dauer_uhr - 1
    Else
    $dauer_min = $end_min - $start_min
    EndIf

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

    If ($dauer_min < 10) Then
    $dauer_min = 0 & $dauer_min ;Falls die Minuten kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf

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

    If ($dauer_uhr < 10) Then
    $dauer_uhr = 0 & $dauer_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf

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

    MsgBox(0,"Ergebnis", "Beginn: " & $start_uhr & ":" & $start_min & @CR & "Ende: " & $end_uhr & ":" & $end_min & @CR & "Dauer: " & $dauer_uhr & ":" & $dauer_min)

    [/autoit]
  • Super. Danke.

    Das werd ich dann gleich mal ändern.

    Gruß Andi

    P.S.: Falls einer noch nen Tipp hat wie ich die Uhrzeit in einer Input-Box einlesen und dann weiterverarbeiten kann nur her damit :)

  • Mit Input-Box und RestrictControlRegExp-UDF - Fehleingaben direkt verhindern, Eingabentypen festlegen

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include "RestrictControlRegExp.au3"
    _RegEx_RestrictControl_setup (2) ; prepare for up to 20 Controls to restrict
    #region - GUI Create
    GUICreate('df')
    $inp = GUICtrlCreateInput("", 10, 10, 100, 20)
    _RegEx_RestrictControl_add ($inp, "^((((?:[01]\d)|(?:2[0-3])):([0-5]\d):([0-5]\d))|(24:00:00))$","01:00:00") ; time :)
    GUISetState()
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd
    #endregion

    [/autoit]
  • woher bekomm ich die Datei "RestrictControlRegExp.au3"??

    Da wirft das AutoIt bei mir ne Fehlermeldung wenn ichs kompilieren will.

  • Jetzt hab ich aber noch einmal kurz eine Frage:
    Wie binde ich das Ganze nun in eine GUI ein, sodass sich der Wert immer gleich automatisch ausrechnet und anzeigt (über die MsgBox gehts einwandfrei, nur geht das auch anders?) ?


    Hier mal mein GUI-Programm:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)

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

    Opt("GUIOnEventMode", 1)

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

    $GUI = GUICreate("V0.31",130,200)
    GUISetState(@sw_show, $GUI)

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

    $label_header = GUICtrlCreateLabel("Tool zur Berechnung der Einsatzdauer",10,3,112,25,-1,-1)
    $label_beginn = GUICtrlCreateLabel("Beginn",10,55,35,15,-1,-1)
    $id_start_uhr = Int (GUICtrlCreateInput("",50,52,25,20,-1,-1))
    $id_start_min = Int (GUICtrlCreateInput("",80,52,25,20,-1,-1))
    $label_uhr = GUICtrlCreateLabel("Uhr",53,35,20,15,-1,-1)
    $label_min = GUICtrlCreateLabel("Min",84,35,20,15,-1,-1)
    $label_ende = GUICtrlCreateLabel("Ende",10,79,35,15,-1,-1)
    $id_end_uhr = Int (GUICtrlCreateInput("",50,75,25,20,-1,-1))
    $id_end_min = Int (GUICtrlCreateInput("",80,75,25,20,-1,-1))
    $label_dauer = GUICtrlCreateLabel("Dauer",10,112,35,15,-1,-1)
    $label_dauer_berechnet = GUICtrlCreateLabel("",50,112,40,15,-1,-1)

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

    $button_start = GUICtrlCreateButton("Berechnung",22,140,75,25,-1,-1)

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

    ;Schließt das GUI-Fenster, nachdem auf das X geklickt wurde
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")

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

    ;Startet die Funktion "START", wenn auf den Button geklickt wird
    GUICtrlSetOnEvent($button_start, "START")

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

    Func START()

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

    $start_uhr = Int (GUICtrlRead($id_start_uhr))
    $start_min = Int (GUICtrlRead($id_start_min))
    $end_uhr = Int (GUICtrlRead($id_end_uhr))
    $end_min = Int (GUICtrlRead($id_end_min))

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

    If ($start_uhr <= $end_uhr) Then
    $dauer_uhr = $end_uhr - $start_uhr
    ElseIf ($start_uhr > $end_uhr) Then
    $dauer_uhr = (24 - $start_uhr) + $end_uhr
    EndIf

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

    If ($start_min > $end_min) Then
    $dauer_min = 60 - ($start_min - $end_min)
    $dauer_uhr = $dauer_uhr - 1
    Else
    $dauer_min = $end_min - $start_min
    EndIf

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

    If ($dauer_min < 10) Then
    $dauer_min = 0 & $dauer_min ;Falls die Minuten kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf

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

    If ($dauer_uhr < 10) Then
    $dauer_uhr = 0 & $dauer_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf

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

    MsgBox(0,"Ergebnis", "Beginn: " & $start_uhr & ":" & $start_min & @CR & "Ende: " & $end_uhr & ":" & $end_min & @CR & "Dauer: " & $dauer_uhr & ":" & $dauer_min)

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

    EndFunc

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

    Func CLOSE()
    Exit
    EndFunc

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

    While 1
    $msg=GUIGetMsg()
    If $msg=$GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit]


    Danke und Gruß

    Andi

    Edit BugFix: Bitte Tags verwenden!! Habe Spoiler und AutoIt-Tag gesetzt.

    2 Mal editiert, zuletzt von BugFix (16. Mai 2008 um 10:03)

    • Offizieller Beitrag

    Ich hatte mal eine Stoppuhr erstellt. Ist ja grundsätzlich dasselbe Prinzip.
    Schau es dir mal an, vielleicht bringt es dich weiter ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    Global $start, $UsedTime, $diff_Alt = 0
    Global $SetTime = False, $Break = False, $Pause = False, $Run = True

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

    $GUI = GUICreate('Stoppuhr', 400, 100, -1, -1)
    $Time = GUICtrlCreateInput('00:00:00,000', 100, 20, 200, 20, BitOR($ES_CENTER,$ES_READONLY))
    $bStart = GUICtrlCreateButton('Start', 40, 60, 80, 20)
    $bBreak = GUICtrlCreateButton('Unterbrechen', 160, 60, 80, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $bPause = GUICtrlCreateButton('Pause', 280, 60, 80, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)
    GUISetState()

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

    While True
    $msg = GUIGetMsg()
    If $SetTime Then $UsedTime = SetTime()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $bStart ; Start/Stop Messung absolut
    $Run = Not $Run
    If $Run Then
    $SetTime = False
    SetTime()
    GUICtrlSetData($bStart, 'Start')
    GUICtrlSetState($bBreak, $GUI_DISABLE)
    GUICtrlSetState($bPause, $GUI_DISABLE)
    Else
    $SetTime = True
    $start = TimerInit()
    GUICtrlSetData($bStart, 'Stop')
    GUICtrlSetState($bBreak, $GUI_ENABLE)
    GUICtrlSetState($bPause, $GUI_ENABLE)
    EndIf
    Case $bBreak ; nur Anzeige wird angehalten (z.B. Rundenmessung)
    $Break = Not $Break
    If $Break Then
    $SetTime = False
    GUICtrlSetData($bBreak, 'Fortsetzen')
    GUICtrlSetState($bPause, $GUI_DISABLE)
    Else
    $SetTime = True
    GUICtrlSetData($bBreak, 'Unterbrechen')
    GUICtrlSetState($bPause, $GUI_ENABLE)
    EndIf
    Case $bPause ; Messung wird angehalten (Additionsmessung)
    $Pause = Not $Pause
    If $Pause Then
    $diff_Alt = $UsedTime ; abgelaufene Zeit aufaddieren
    $SetTime = False
    GUICtrlSetData($bPause, 'Weiter')
    GUICtrlSetState($bBreak, $GUI_DISABLE)
    Else
    $SetTime = True
    $start = TimerInit() ; Zeitmessung neu initialisieren
    GUICtrlSetData($bPause, 'Pause')
    GUICtrlSetState($bBreak, $GUI_ENABLE)
    EndIf
    EndSwitch
    WEnd

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

    Func SetTime()
    Local $diff = TimerDiff($start)/1000 + $diff_Alt
    Local $hour = 0
    Local $min = 0
    Local $sec = Floor($diff)
    Local $rest = ($diff-$sec)*1000
    Local $secShow, $minShow, $hourShow
    If $sec > 59 Then
    $min = Floor($sec/60)
    $secShow = Mod($sec, 60)
    ElseIf $sec > 3599 Then
    $hourShow = Mod(Mod($sec,3600),60)
    $minShow = Floor(Mod($sec,3600)/60)
    $secShow = Floor($sec/3600)
    Else
    $secShow = $sec
    $minShow = $min
    $hourShow = $hour
    EndIf
    GUICtrlSetData($Time, StringFormat('%02u', $hourShow) & ':' & StringFormat('%02u', $minShow) & ':' & StringFormat('%02u', $secShow) & ',' & StringFormat('%03u', $rest))
    Return $diff ; gibt abgelaufene Zeit als absolute Differenz zurück
    EndFunc

    [/autoit]
  • Ein bisschen weiter bin ich gekommen.

    Nur find ich keine Möglichkeit, wie ich es schaffe, dass sich der Inhalt des Input-Feldes ändert, ohne dass ich den Button klicke.Den Button brauch ich halt, weil dieser später noch ein 2tes Fenster aufrufen soll. Geht das überhaupt, was ich haben will so einfach? Wenn nicht, dann für ich einfach noch nen 2ten Button ein. Den ersten dann zur Berechnung und den zweiten für das 2te Fenster.

    Hier nochmal mein bisheriges Programm:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include "RestrictControlRegExp.au3"
    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)
    Opt("GUIOnEventMode", 1)
    _RegEx_RestrictControl_setup (5) ; prepare for up to 5 Controls to restrict
    $GUI = GUICreate(" V0.55",130,205)
    GUISetState(@sw_show, $GUI)
    $label_header = GUICtrlCreateLabel("Tool zur Berechnung der Einsatzdauer",10,3,112,25,-1,-1)
    $label_beginn = GUICtrlCreateLabel("Beginn",10,55,35,15,-1,-1)
    $id_start_uhr = Int (GUICtrlCreateInput("00",50,52,25,20,-1,-1))
    ;Eingabe der Stunden wird begrenzt, sodass man immer 2 Zahlen eingeben muss. Die erste ist dabei 0, 1 oder 2 und die zweite beliebig.
    _RegEx_RestrictControl_add ($id_start_uhr, "^((?:[01]\d)|(?:2[0-3]))$","01") ; Stunden im Format -> xx
    $id_start_min = Int (GUICtrlCreateInput("00",80,52,25,20,-1,-1))
    ;Eingabe der Minuten wird begrenzt, sodass man immer 2 Zahlen eingeben muss. Die erste ist dabei von 0-5 und die zweite beliebig.
    _RegEx_RestrictControl_add ($id_start_min, "^((([0-5]\d)[0-5]\d))|(24:00))$","01:00") ; Minuten im Format -> xx
    $label_uhr = GUICtrlCreateLabel("Uhr",53,35,20,15,-1,-1)
    $label_min = GUICtrlCreateLabel("Min",84,35,20,15,-1,-1)
    $label_ende = GUICtrlCreateLabel("Ende",10,79,35,15,-1,-1)
    $id_end_uhr = Int (GUICtrlCreateInput("00",50,75,25,20,-1,-1))
    _RegEx_RestrictControl_add ($id_end_uhr, "^((?:[01]\d)|(?:2[0-3]))$","01") ; Stunden im Format -> xx
    $id_end_min = Int (GUICtrlCreateInput("00",80,75,25,20,-1,-1))
    _RegEx_RestrictControl_add ($id_end_min, "^((([0-5]\d)[0-5]\d))|(24:00))$","01:00") ; Minuten im Format -> xx
    $label_dauer = GUICtrlCreateLabel("Dauer",10,112,35,15,-1,-1)
    $id_dauer_berechnet = GUICtrlCreateInput("00:00",50,112,40,20,-1,-1)
    $label_info = GUICtrlCreateLabel("! nur 2-stellige Eingaben zulässig !",10,170,110,26,-1,-1)
    $button_start = GUICtrlCreateButton("Berechnung",22,140,75,25,-1,-1)
    ;Schließt das GUI-Fenster, nachdem auf das X geklickt wurde
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
    ;Startet die Funktion "START", wenn auf den Button geklickt wird
    GUICtrlSetOnEvent($button_start, "START")
    Func START()

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

    $start_uhr = Int (GUICtrlRead($id_start_uhr))
    $start_min = Int (GUICtrlRead($id_start_min))
    $end_uhr = Int (GUICtrlRead($id_end_uhr))
    $end_min = Int (GUICtrlRead($id_end_min))

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

    If ($start_uhr <= $end_uhr) Then
    $dauer_uhr = $end_uhr - $start_uhr
    ElseIf ($start_uhr > $end_uhr) Then
    $dauer_uhr = (24 - $start_uhr) + $end_uhr
    EndIf
    If ($start_min > $end_min) Then
    $dauer_min = 60 - ($start_min - $end_min)
    $dauer_uhr = $dauer_uhr - 1
    Else
    $dauer_min = $end_min - $start_min
    EndIf

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

    GUICtrlSetData($id_dauer_berechnet, StringFormat('%02u', $dauer_uhr) & ':' & StringFormat('%02u', $dauer_min))
    EndFunc
    Func CLOSE()
    Exit
    EndFunc
    While 1
    $msg=GUIGetMsg()
    If $msg=$GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Nur find ich keine Möglichkeit, wie ich es schaffe, dass sich der Inhalt des Input-Feldes ändert,


    Die Funktion zum Aktualisieren des Inputfeldes in festen Intervallen aufrufen:

    [autoit]

    AdlibEnable('SetInput', $Zeitintervall_in_ms)
    Func SetInput()
    GUICtrlSetData($InputCtrl, $Data) ; $Data muß Globale Variable sein, wenn in anderer Funktion Wertezuweisung
    EndFunc

    [/autoit]
  • GEIL.

    Du bist der Größte.

    Habs hinbekommen.

    Hier mein Programm. Falls es mal einer brauchen sollte:

    Spoiler anzeigen
    [autoit]


    ;Programmiert von ade2k1 aka Andreas Armbruster
    #include <GUIConstants.au3>
    #include "RestrictControlRegExp.au3"
    Opt("WinWaitDelay",100)
    Opt("WinTitleMatchMode",4)
    Opt("WinDetectHiddenText",1)
    Opt("MouseCoordMode",0)
    Opt("GUIOnEventMode", 1)
    _RegEx_RestrictControl_setup (5) ; prepare for up to 5 Controls to restrict
    $GUI = GUICreate(" V0.61",130,205)
    GUISetState(@sw_show, $GUI)
    $label_header = GUICtrlCreateLabel("Tool zur Zeitdifferenz- Berechnung",10,3,112,25,-1,-1)
    $label_beginn = GUICtrlCreateLabel("Beginn",10,55,35,15,-1,-1)
    $id_start_uhr = Int (GUICtrlCreateInput("00",50,52,25,20,-1,-1))
    ;Eingabe der Stunden wird begrenzt, sodass man immer 2 Zahlen eingeben muss. Die erste ist dabei 0, 1 oder 2 und die zweite beliebig.
    _RegEx_RestrictControl_add ($id_start_uhr, "^((?:[01]\d)|(?:2[0-3]))$","01") ; Stunden im Format -> xx
    $id_start_min = Int (GUICtrlCreateInput("00",80,52,25,20,-1,-1))
    ;Eingabe der Minuten wird begrenzt, sodass man immer 2 Zahlen eingeben muss. Die erste ist dabei von 0-5 und die zweite beliebig.
    _RegEx_RestrictControl_add ($id_start_min, "^((([0-5]\d)[0-5]\d))|(24:00))$","01:00") ; Minuten im Format -> xx
    $label_uhr = GUICtrlCreateLabel("Uhr",53,35,20,15,-1,-1)
    $label_min = GUICtrlCreateLabel("Min",84,35,20,15,-1,-1)
    $label_ende = GUICtrlCreateLabel("Ende",10,79,35,15,-1,-1)
    $id_end_uhr = Int (GUICtrlCreateInput("00",50,75,25,20,-1,-1))
    _RegEx_RestrictControl_add ($id_end_uhr, "^((?:[01]\d)|(?:2[0-3]))$","01") ; Stunden im Format -> xx
    $id_end_min = Int (GUICtrlCreateInput("00",80,75,25,20,-1,-1))
    _RegEx_RestrictControl_add ($id_end_min, "^((([0-5]\d)[0-5]\d))|(24:00))$","01:00") ; Minuten im Format -> xx
    $label_dauer = GUICtrlCreateLabel("Dauer",10,112,35,15,-1,-1)
    $id_dauer_berechnet = GUICtrlCreateInput("00:00",50,112,40,20,-1,-1)
    $label_info = GUICtrlCreateLabel("! nur 2-stellige Eingaben zulässig !",10,170,110,26,-1,-1)
    AdlibEnable("CALC", 1000)
    $button_start = GUICtrlCreateButton("Berechnung",22,140,75,25,-1,-1)
    ;Schließt das GUI-Fenster, nachdem auf das X geklickt wurde
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSE")
    ;Startet die Funktion "START", wenn auf den Button geklickt wird
    GUICtrlSetOnEvent($button_start, "CALC")
    Global $dauer_uhr = 00
    Global $dauer_min = 00
    Func CALC()

    $start_uhr = Int (GUICtrlRead($id_start_uhr))
    $start_min = Int (GUICtrlRead($id_start_min))
    $end_uhr = Int (GUICtrlRead($id_end_uhr))
    $end_min = Int (GUICtrlRead($id_end_min))

    If ($start_uhr <= $end_uhr) Then
    $dauer_uhr = $end_uhr - $start_uhr
    ElseIf ($start_uhr > $end_uhr) Then
    $dauer_uhr = (24 - $start_uhr) + $end_uhr
    EndIf
    If ($start_min > $end_min) Then
    $dauer_min = 60 - ($start_min - $end_min)
    $dauer_uhr = $dauer_uhr - 1
    Else
    $dauer_min = $end_min - $start_min
    EndIf
    ;Falls eine der Zahlen kleiner als "10" ist, wird vorne mit einer "0" aufgefüllt.
    If ($start_min < 10) Then
    $start_min = 0 & $start_min ;Falls die Minuten kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf
    If ($start_uhr < 10) Then
    $start_uhr = 0 & $start_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf
    If ($end_min < 10) Then
    $end_min = 0 & $end_min ;Falls die Minuten kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf
    If ($end_uhr < 10) Then
    $end_uhr = 0 & $end_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf
    If ($dauer_min < 10) Then
    $dauer_min = 0 & $dauer_min ;Falls die Minuten kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf
    If ($dauer_uhr < 10) Then
    $dauer_uhr = 0 & $dauer_uhr ;Falls die Stunden kleiner als "10" sind, vorne mit einer "0" auffüllen
    EndIf

    GUICtrlSetData($id_dauer_berechnet, StringFormat('%02u', $dauer_uhr) & ':' & StringFormat('%02u', $dauer_min)) ; Variablen müssen Globale sein, wenn in anderer Funktion Wertezuweisung erfolgt

    EndFunc
    Func CLOSE()
    Exit
    EndFunc
    While 1
    $msg=GUIGetMsg()
    If $msg=$GUI_EVENT_CLOSE Then ExitLoop
    WEnd

    [/autoit]


    Nochmals Danke an BugFix für die Hilfe.

    Gruß Andi

  • Die Funktion ist echt super.

    Nur verdammt blöd dass man der Funktion nichts übergeben kann. Wenn ich die Funktion an 10 verschiedenen Stellen in meinem Programm brauche muss ich die Berechnung in der Funktion gleich von Anfang an 10 mal machen und kann mir daher auch keinen Code sparen. Dafür ist so eine Funktion ja eigentlich gut...

    Voll blöd das Ganze.

    Oder gibts dafür auch ne Lösung?

    • Offizieller Beitrag

    Nur verdammt blöd dass man der Funktion nichts übergeben kann.


    Das ist zwar unschön, aber nicht dramatisch.
    Du legst einfach für die durch AdlibEnable aufzurufenden Funktion Globale Variablen an. Diesen kannst du jederzeit im laufenden Programm Werte zuweisen und beim nächsten Aufruf durch AdlibEnable werden dann diese Werte verwendet. Du kannst der Funktion z.B. auch anweisen nichts zu tun, falls diese Variablen ihren Wert nicht geändert haben.
    Hier mal ein einfaches Bsp.:

    Spoiler anzeigen
    [autoit]

    Global $i1 = 0, $i1_alt = 0, $i2 = 20
    HotKeySet('^!e', '_ende') ; Beende Skript mit STRG+ALT+e
    AdlibEnable('_show', 500) ; Abfrage alle 1/2 Sekunde

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

    While True ; jede Sekunde wird Zähler um 1 erhöht
    $i1 += 1
    Sleep(1000)
    WEnd

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

    Func _ende()
    Exit
    EndFunc

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

    Func _show()
    If ($i1 - $i1_alt) > 4 Then ; nur die 5-er Schritte anzeigen - Beginn bei 25
    $i1_alt = $i1
    ToolTip($i1 + $i2)
    EndIf
    EndFunc

    [/autoit]
  • Dann nochmals Danke für die Antwort.
    Ich habs jetzt alles einwandfrei zum laufen bekommen *freu*

    Gruß Andi