Input während der Eingabe überprüfen???

  • Hallo zusammen,

    ich möchte gern über ein GUICtrlCreateInput eine Uhrzeit eintragen.
    Meine Vorstellung: ein Input Control mit vorgegebenem ":".
    Während der Eingabe soll dann bei jedem Tastendruck eine Funktion aufgerufen werden,
    damit die Eingabe auf Korrektheit überprüft und der Cursor automatisch gesetzt werden kann.
    (Stundenzeiten vor dem ":", nach Eingabe von zwei Zahlen Sprung auf die rechte Seite des ":" für die Minuteneingabe)

    Hab sowas in unserem Spesenabrechnungsprogramm gesehen und weiß jetzt nicht, wie ich am Besten Focus und Tasteneingabe "abfangen" kann.

    Ich hoffe, ich hab mich verständlich ausgedrückt.
    Ansonsten bastle ich zur Veranschaulichung ein kleines Script...

    Danke schon mal im voraus

    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
  • Die Aktuelle Uhrzeit kannst du mit dem Umgebungsvariablen @SEC, @MIN und @HOUR abrufen.

    Beispiel direkt bei Create:

    Spoiler anzeigen
    [autoit]


    GUICtrlCreateInput(@HOUR & ':' & @MIN & ':' & @SEC, 10, 10, 80, 23)

    [/autoit]


    Patric

  • @ Bernd
    Danke für den Tip, bin schon ganz verzweifelt gewesen.
    Schau ich mir gleich mal an.

    @ prizma
    Danke auch für deinen Tip, aber das war nicht mein Problem.
    Arbeite an einer Zeiterfassungssoftware auf Basis von AutoIt incl. SQLite und so ...

    Auf jeden Fall finde ich das Forum echt gut.
    Da bekommt man innerhalb von Minuten gute Tipps :P

    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 zusammen,

    hab jetzt mal eine Funktion auf Grundlage der bisherigen Tipps erstellt.
    Vielleicht hat ja jemand Lust und/oder Zeit da mal drüber zu schauen.
    Mir wäre sehr an einer Optimierung gelegen. Verstanden wie es geht hab ich ja jetzt. :whistling:

    Spoiler anzeigen

    #include <GuiConstants.au3>
    #include <Array.au3>

    ;Global $changed = False

    GUICreate("My GUI Zeiteingabe",200,100) ; will create a dialog box that when displayed is centered

    $edit = GUICtrlCreateInput(" :", 10, 30, 52, 20,$ES_NUMBER) ; Eingabebox
    GUICtrlSetFont(-1,10,600,0,"Courier New") ; nichtproportionale Schrift gewählt, für die Optik des gleichbleibenden Abstandes vor dem ":" mit Leerzeichen
    GUICtrlSetLimit(-1,5)
    $edit1 = GUICtrlCreateInput(" :", 75, 30, 52, 20,$ES_NUMBER) ; Eingabebox
    GUICtrlSetFont(-1,10,600,0,"Courier New") ; nichtproportionale Schrift gewählt, für die Optik des gleichbleibenden Abstandes vor dem ":" mit Leerzeichen
    GUICtrlSetLimit(-1,5)
    $edit2 = GUICtrlCreateInput(" :", 140, 30, 52, 20,$ES_NUMBER) ; Eingabebox
    GUICtrlSetFont(-1,10,600,0,"Courier New") ; nichtproportionale Schrift gewählt, für die Optik des gleichbleibenden Abstandes vor dem ":" mit Leerzeichen
    GUICtrlSetLimit(-1,5)
    $btn = GUICtrlCreateButton("Ohne Funktion", 50, 70, 100, 20)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    Send("{LEFT 3}")
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $backspc = 0
    Local $nNotifyCode = _HiWord($wParam)
    Local $nID = _LoWord($wParam)
    Local $hCtrl = $lParam
    Switch $nID ; aktuelle Inputbox
    Case $edit Or $edit1 Or $edit2
    Switch $nNotifyCode
    Case $EN_CHANGE
    $temp = StringSplit(GUICtrlRead($nID),":")
    $temp[1] = StringReplace($temp[1]," ","")
    If $temp[0] = 1 Then
    $temp[1] = StringLeft($temp[1],1)&" "
    GUICtrlSetData($nID,$temp[1]&":")
    Send("{LEFT 2}")
    EndIf
    Switch StringLen($temp[2])
    Case 2
    Send("{TAB}")
    Case 1
    If NOT StringIsDigit($temp[1]) Then
    GuiCtrlSetData($nID," :")
    Send ("{LEFT 3}")
    EndIf
    If $temp[2] > 5 Then
    $temp[2]=""
    GuiCtrlSetData($nID,$temp[1]&":"&$temp[2])
    EndIf
    Case 0
    Switch StringLen($temp[1])
    Case 2
    Switch StringLeft($temp[1],1)
    Case 2
    If $temp[1] > 23 Then
    $temp[1] = "2 "
    GuiCtrlSetData($nID,$temp[1]&":")
    send ("{LEFT 2}")
    Else
    GuiCtrlSetData($nID,$temp[1]&":")
    EndIf
    Case 1
    GuiCtrlSetData($nID,$temp[1]&":")
    Case 0
    GuiCtrlSetData($nID,$temp[1]&":")
    EndSwitch
    Case 1
    Switch $temp[1]
    Case 3 to 9
    $temp[1] = "0"&$temp[1]
    GuiCtrlSetData($nID,$temp[1]&":")
    Case 0 to 2
    GuiCtrlSetData($nID,$temp[1]&" :")
    send ("{LEFT 2}")
    EndSwitch
    Case 0
    GuiCtrlSetData($nID," :")
    send ("{LEFT 3}")
    EndSwitch
    EndSwitch
    Case $EN_SETFOCUS
    GuiCtrlSetData($nID," :")
    Send("{LEFT 3}")
    Case $EN_KILLFOCUS
    $temp = StringSplit(GUICtrlRead($nID),":")
    $temp[1] = StringReplace($temp[1]," ","")
    If $temp[0] = 1 Then _ArrayAdd($temp,"")
    If StringLen($temp[2]) = 2 Then
    If StringLen($temp[1]) = 2 Then
    Return
    Else
    GUICtrlSetData($nID," :")
    Return
    EndIf
    EndIf
    Switch StringisDigit($temp[1])
    Case True
    Switch StringLen($temp[1])
    Case 1
    If $temp[1] > 2 Then $temp[1] = "0"&$temp[1]
    If $temp[1] <= 2 Then $temp[1] = " "
    Case 2
    If $temp[2] > "" Then
    $temp[2] = $temp[2]&"0"
    GUICtrlSetData($nID,$temp[1]&":"&$temp[2])
    EndIf
    EndSwitch
    If $temp[2] = "" Or $temp[2] = 0 Then
    $temp[2] = "00"
    GUICtrlSetData($nID,$temp[1]&":"&$temp[2])
    EndIf
    Case False
    GUICtrlSetData($nID," :")
    EndSwitch
    EndSwitch
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

    Func _HiWord($x)
    Return BitShift($x, 16)
    EndFunc ;==>_HiWord

    Func _LoWord($x)
    Return BitAND($x, 0xFFFF)
    EndFunc ;==>_LoWord


    vielleicht kannn das ja der Ein oder Andere auch gebrauchen.

    Wäre für jeden Tip dankbar...

    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

    Hi,

    ich würde mal auf den ersten Blick vermuten, dass es nicht klappen kann. Man kann den : löschen und dann bekommt dein Array ein Problem. :D
    Warum willst du dies on the fly überprüfen. Es wäre sicherlich viiiiel einfacher beim Klick des Buttons eine Checkroutine laufen zu lassen.

    Mega

  • Wieso nicht einfach mal wieder ne Up/Down verwenden? Einfach eine für Stunden und eine für Minuten, und schon gibts kein Problem mehr. :)

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

    • Offizieller Beitrag

    Warum überhaupt ein Input-Control? Es gibt doch GUICtrlCreateDate().

    Aus der Hilfe:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <DateTimeConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example2()

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

    ; example2
    Func Example2()
    Local $n, $msg

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

    GUICreate("My GUI get time")
    $n = GUICtrlCreateDate("", 20, 20, 100, 20, $DTS_TIMEFORMAT)
    GUISetState()

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

    ; Run the GUI until the dialog is closed
    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    MsgBox(0, "Time", GUICtrlRead($n))
    GUIDelete()
    EndFunc ;==>Example2

    [/autoit]

    Dort wird eine Falscheingabe doch sowieso verhindert. :whistling:

  • danke für die zahlreichen Tipps,

    die On-the-Fly Prüfung wäre schon ein gewisses "Feature" für mich.
    Vielleicht kann ich mein "Problem" verdeutlichen...
    Ich bastle an einer Zeiterfassungs-Software.
    In dieser sollen die User Ihre Zeiten eintragen.
    Damit es "schön" aussieht und zur Sicherheit der Eingaben (dann brauche ich nicht hinterher alle Daten prüfen) möchte ich diese Prüfung.
    Ich speichere die Zeitdaten in einer SQLite-DB pro User. Dafür hab ich eine kleine Funktion geschrieben, die mir die Zeiten in Minuten umrechnet und gleichzeitig auch mit Vorzeichen umgehen kann. Damit kann ich dann auch die Überstunden berechnen etc...

    hier ein Screenshot von der Sache.
    Ich denk mir halt bei der Vielzahl von Input's :)
    [Blockierte Grafik: http://www.pc-wizards.de/Bild.jpg]

    Ach ja, wer es brauchen kann:
    Ich hänge die Funktion mal mit an...

    @Mega: Du hast Recht, ich hatte in einer ersten Version noch einePrüfung drin, hatte ich wohl beim umstrukturieren "verloren".
    Hab ich jetzt wieder eingebaut. Ich denke jetzt ist die Eingabe fast Idiotensicher. Wenn noch einer einen Bug findet würde ich mich freuen.

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <Array.au3>

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

    ;Global $changed = False

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

    GUICreate("My GUI Zeiteingabe",200,100) ; will create a dialog box that when displayed is centered

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

    $edit = GUICtrlCreateInput(" :", 10, 30, 52, 20,$ES_NUMBER) ; Eingabebox
    GUICtrlSetFont(-1,10,600,0,"Courier New") ; nichtproportionale Schrift gewählt, für die Optik des gleichbleibenden Abstandes vor dem ":" mit Leerzeichen
    GUICtrlSetLimit(-1,5)
    $edit1 = GUICtrlCreateInput(" :", 75, 30, 52, 20,$ES_NUMBER) ; Eingabebox
    GUICtrlSetFont(-1,10,600,0,"Courier New") ; nichtproportionale Schrift gewählt, für die Optik des gleichbleibenden Abstandes vor dem ":" mit Leerzeichen
    GUICtrlSetLimit(-1,5)
    $edit2 = GUICtrlCreateInput(" :", 140, 30, 52, 20,$ES_NUMBER) ; Eingabebox
    GUICtrlSetFont(-1,10,600,0,"Courier New") ; nichtproportionale Schrift gewählt, für die Optik des gleichbleibenden Abstandes vor dem ":" mit Leerzeichen
    GUICtrlSetLimit(-1,5)
    $btn = GUICtrlCreateButton("Ohne Funktion", 50, 70, 100, 20)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")
    Send("{LEFT 3}")
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    EndSelect
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $msg, $wParam, $lParam)
    Local $backspc = 0
    Local $nNotifyCode = _HiWord($wParam)
    Local $nID = _LoWord($wParam)
    Local $hCtrl = $lParam
    Switch $nID ; aktuelle Inputbox
    Case $edit Or $edit1 Or $edit2
    Switch $nNotifyCode
    Case $EN_CHANGE
    $temp = StringSplit(GUICtrlRead($nID),":")
    If @error Then
    _ArrayAdd($temp,"")
    EndIf
    $temp[1] = StringReplace($temp[1]," ","")
    If $temp[0] = 1 Then
    $temp[1] = StringLeft($temp[1],1)&" "
    GUICtrlSetData($nID,$temp[1]&":")
    Send("{LEFT 2}")
    EndIf
    Switch StringLen($temp[2])
    Case 2
    Send("{TAB}")
    Case 1
    If NOT StringIsDigit($temp[1]) Then
    GuiCtrlSetData($nID," :")
    Send ("{LEFT 3}")
    EndIf
    If $temp[2] > 5 Then
    $temp[2]=""
    GuiCtrlSetData($nID,$temp[1]&":"&$temp[2])
    EndIf
    Case 0
    Switch StringLen($temp[1])
    Case 2
    Switch StringLeft($temp[1],1)
    Case 2
    If $temp[1] > 23 Then
    $temp[1] = "2 "
    GuiCtrlSetData($nID,$temp[1]&":")
    send ("{LEFT 2}")
    Else
    GuiCtrlSetData($nID,$temp[1]&":")
    EndIf
    Case 1
    GuiCtrlSetData($nID,$temp[1]&":")
    Case 0
    GuiCtrlSetData($nID,$temp[1]&":")
    EndSwitch
    Case 1
    Switch $temp[1]
    Case 3 to 9
    $temp[1] = "0"&$temp[1]
    GuiCtrlSetData($nID,$temp[1]&":")
    Case 0 to 2
    GuiCtrlSetData($nID,$temp[1]&" :")
    send ("{LEFT 2}")
    EndSwitch
    Case 0
    GuiCtrlSetData($nID," :")
    send ("{LEFT 3}")
    EndSwitch
    EndSwitch
    Case $EN_SETFOCUS
    GuiCtrlSetData($nID," :")
    Send("{LEFT 3}")
    Case $EN_KILLFOCUS
    $temp = StringSplit(GUICtrlRead($nID),":")
    $temp[1] = StringReplace($temp[1]," ","")
    If $temp[0] = 1 Then _ArrayAdd($temp,"")
    If StringLen($temp[2]) = 2 Then
    If StringLen($temp[1]) = 2 Then
    Return
    Else
    GUICtrlSetData($nID," :")
    Return
    EndIf
    EndIf
    Switch StringisDigit($temp[1])
    Case True
    Switch StringLen($temp[1])
    Case 1
    If $temp[1] > 2 Then $temp[1] = "0"&$temp[1]
    If $temp[1] <= 2 Then $temp[1] = " "
    Case 2
    If $temp[2] > "" Then
    $temp[2] = $temp[2]&"0"
    GUICtrlSetData($nID,$temp[1]&":"&$temp[2])
    EndIf
    EndSwitch
    If $temp[2] = "" Or $temp[2] = 0 Then
    $temp[2] = "00"
    GUICtrlSetData($nID,$temp[1]&":"&$temp[2])
    EndIf
    Case False
    GUICtrlSetData($nID," :")
    EndSwitch
    EndSwitch
    EndSwitch
    EndFunc ;==>MY_WM_COMMAND

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

    Func _HiWord($x)
    Return BitShift($x, 16)
    EndFunc ;==>_HiWord

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

    Func _LoWord($x)
    Return BitAND($x, 0xFFFF)
    EndFunc ;==>_LoWord

    [/autoit]
    Spoiler anzeigen
    [autoit]

    #include-once
    ; #INDEX# =======================================================================================================================
    ; Title .........: TimeMin
    ; AutoIt Version: 3.2.3++
    ; Language: English
    ; Description: Functions that assist with Time calculation.
    ; ===============================================================================================================================
    ; ------------------------------------------------------------------------------
    ; AutoIt Version: 3.0
    ; Language: English
    ; Description: Functions that assist with Time management.
    ; ------------------------------------------------------------------------------

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _TimetoMin()
    ; Description ...: Change the format from Time to Minutes like: 08:45 --> 525
    ; Syntax.........: _TimetoMin($msg)
    ; Parameters ....: $msg - Time to convert in format "(+/-)05:04" Returns(+/-) only if it comes with $msg!
    ; Return values .: Success - Time in minutes with "+/-mmmmm"
    ; Failure: @error - 1 = Function called with wrong Parameter (not in format (+/-)hhhh:mm)
    ; Failure: @error - 2 = Function called with wrong Parameter (hhhh/mm are no Digits)
    ; Failure: @error - 3 = Function called with wrong Parameter (mm > 59)
    ; Author ........: Oliver Zimmermann <o_z at gmx dot net> (Schnuffel)
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _MintoTime()
    ; Link ..........;
    ; Example .......; No
    ; ===============================================================================================================================
    Func _TimetoMin($msg)
    Local $vz="", $Mins1, $Mins2, $sumtoMin
    If StringLeft($msg,1)="+" Then
    $vz="+"
    $msg=StringTrimLeft($msg,1)
    ElseIf StringLeft($msg,1)="-" Then
    $vz="-"
    $msg=StringTrimLeft($msg,1)
    EndIf
    $msg=StringSplit($msg,":")
    If @error=1 Then
    setError(1)
    Return 0
    EndIf
    If StringIsDigit($msg[1])=0 Or StringIsDigit($msg[2])=0 Then
    setError(2)
    Return 0
    EndIf
    If $msg[2]>59 Then
    setError(3)
    Return 0
    EndIf
    $msg[1]=$msg[1]*60
    $sumtoMin=$msg[1]+$msg[2]
    $msg=0
    setError(0)
    Return($vz&$sumtoMin)
    EndFunc
    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _MintoTime()
    ; Description ...: Change the format from minutes to Time format like: 08:45 --> +525
    ; Syntax.........: _MintoTime($msg)
    ; Parameters ....: $msg - Minutes to convert in format "+/-mmmmmm" Returns(+/-) only if it comes with $msg!
    ; Return values .: Success - Time in format "+/-hh:mm"
    ; Failure: @error - 1 = Function called with wrong Parameter (not in format (+/-)mmmmm; 'mmmm' are no Digits)
    ; Author ........: Oliver Zimmermann <o_z at gmx dot net> (Schnuffel)
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _TimetoMin()
    ; Link ..........;
    ; Example .......; No
    ; ===============================================================================================================================
    Func _MintoTime($msg)
    Local $Hours, $Mins, $vz=""
    If StringLeft($msg,1)="+" Then
    $msg=StringTrimLeft($msg,1)
    $vz="+"
    ElseIf StringLeft($msg,1)="-" Then
    $vz="-"
    $msg=StringTrimLeft($msg,1)
    EndIf
    If StringIsDigit($msg)=0 Then
    SetError(1)
    Return(0)
    EndIf
    $Hours=StringSplit($msg/60,".")
    $Mins=$msg-($Hours[1]*60)
    If $Mins<10 Then $Mins="0"&$Mins
    If $Hours[1]<10 Then $Hours[1]="0"&$Hours[1]
    $msg=0
    setError(0)
    Return ($vz&$Hours[1]&":"&$Mins)
    EndFunc

    [/autoit]

    Dateien

    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 Ganze geht auch in größer und nur Stunden und Minuten

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <DateTimeConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example2()

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

    ; example2
    Func Example2()
    Local $n, $msg

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

    GUICreate("My GUI get time")
    $n = GUICtrlCreateDate("", 20, 20, 70, 28, $DTS_TIMEFORMAT)
    GUICtrlSetFont(-1, 14, 400, 'Arial')
    GUISetState()

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

    ; Run the GUI until the dialog is closed
    Do
    $msg = GUIGetMsg()
    Until $msg = $GUI_EVENT_CLOSE

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

    MsgBox(0, "Time", StringLeft(GUICtrlRead($n), 5))
    GUIDelete()
    EndFunc ;==>Example2

    [/autoit]
  • Hmm Net schlecht :) Bei AHK hab ich eine ErweiterungsDLL gefunden, die man auch mit AutoIT verwenden kann. Jezt ham die endlich auch mal was für uns gemacht :D
    http://www.autohotkey.com/forum/topic8365.html

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <WinAPI.au3>
    $dll = DllOpen("AHKCtrlSupport\AHKCtrlSupport.dll")
    ; Da muss ich mich doch mal bei der AHK-Gemeinde bedanken, dass sie für uns so eine tolle Erweiterung geschrieben haben :P

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

    #region - GUI Create
    GUICreate('')
    $in = GUICtrlCreateInput("hio",10,10,100,20)
    $in2 = GUICtrlCreateInput("hio",150,10,100,20)
    $dwexStyle = $ES_CENTER+$WS_BORDER
    $ExistingEdit = GUICtrlGetHandle($in)
    $MaskEditHwnd = DllCall($dll,"int:cdecl","CreateMaskEditID","DWORD", $dwexStyle, "DWORD",$ExistingEdit)
    $MaskEditHwnd = $MaskEditHwnd[0]
    $ret = DllCall($dll,"int:cdecl","SetMaskEditMask", "DWORD", $MaskEditHwnd, "str", "##:##:##")
    $ret = DllCall($dll,"int:cdecl","SetEditMaskPromptSymbol", "DWORD", $MaskEditHwnd, "str", "0")
    $ret = DllCall($dll,"int:cdecl","SetEditMaskValidCharSet", "DWORD", $MaskEditHwnd, "str", "00:0-1|01:0-9|03:0-5|04:0-9|06:0-5|07:0-9")
    $ret = DllCall($dll,"int:cdecl","SetEditMaskValidCharSet", "DWORD", $MaskEditHwnd, "str", "00:2|01:0-3|03:0-5|04:0-9|06:0-5|07:0-9")

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

    GUISetState()
    #endregion

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

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

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

    $ret = DllCall($dll,"int:cdecl","GetEditMaskInputData", "DWORD", $MaskEditHwnd, "str", "##:##:##" ,"int",10)
    $EnteredData = StringTrimRight(StringRegExpReplace($ret[2],"(\d\d)","$1:"),1) ; The Mask isn't returned, we have to insert it manually
    MsgBox(0, 'THe Entered Data:', $EnteredData)

    [/autoit]
  • ihr seid wirklich gut :thumbup: ,

    da bastel ich mir die Finger wund, dabei gibt es das alles schon. :whistling:

    Eine Frage hab ich aber doch noch.
    Gibt es eine Möglichkeit mit dem GuiCtrlSendMsg Hexcode die Pull-up/-down Pfeile noch zu "eliminieren"?
    siehe Script:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    GUICreate ( "My GUI get date", 200,200,800,200)
    $date = GUICtrlCreateDate ("00:00", 10,10,60,20, $DTS_TIMEFORMAT )
    $date1 = GUICtrlCreateDate ("00:00", 10,40,60,20, $DTS_TIMEFORMAT )
    $date2 = GUICtrlCreateDate ("00:00", 10,70,60,20, $DTS_TIMEFORMAT )
    $style = "HH:mm"

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

    GuiCtrlSendMsg($date, 0x1032, 0, $style)
    GuiCtrlSendMsg($date1, 0x1032, 0, $style)
    GuiCtrlSendMsg($date2, 0x1032, 0, $style)
    GuiSetState()

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

    While GuiGetMsg() <> $GUI_EVENT_CLOSE
    WEnd

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

    MsgBox(0,"Time", GUICtrlRead($date)&@CR&GUICtrlRead($date1)&@CR&GUICtrlRead($date2))

    [/autoit]

    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. ;)

    Einmal editiert, zuletzt von Schnuffel (20. Mai 2008 um 17:15)