User nach Uhrzeit fragen

  • Hey,

    ich würde gerne eine Uhrzeit einlesen. Dazu versuche ich "_GUICtrlDTP_Create" zu nutzen. Ich hatte mir das im Idealfall folgendermaßen vorgestellt:
    Es gibt ein Editfeld, welches allerdings als "Zeitedit" deklariert wurde, so dass dort immer etwas wie hh:mm steht und der ":" auch nicht verändert werden kann, sondern nur die zwei Werte links und rechts davon.
    Datum benötige ich keins. Am besten ist rechts neben dem Edit noch ein Up-Down-Feld.
    Mit den Styleparametern "$DTS_TIMEFORMAT, $DTS_UPDOWN" bekomme ich das leider nicht hundertprozentig hin. Zum einen ist das Feld irgendwie zu klein geraten. Kleiner als es ohne diese Parameter war und außerdem benötige ich die Sekunden nicht. Kann man die irgendwie entfernen?

    Sry, falls die Frage trivial ist, konnte in der Dokumentation allerdings keine Lösung finden und arbeite erst seit gestern mit AutoIT :)
    Ansonsten ist AutoIT wirklich überraschend gut dokumentiert. Man findet wirklich schnell in die Materie.

    Vielen Dank im Voraus.

  • Hab btw gerade den Thread bzgl. Fehlersuche gelesen. Kannte natürlich auch Scite bis gestern gar nicht und ist wirklich cool, welche Möglichkeiten die Software biete. Mit Debug to consolte und msgbox kann man wirklich super arbeiten.

    Code
    $timeEdit = _GUICtrlDTP_Create($Form1, 10, 10, 120, 21,  $DTS_TIMEFORMAT, $DTS_UPDOWN)
    • Offizieller Beitrag

    Du benutzt die Styles falsch. Styles werden mit BitOR kombiniert. Dein Beispiel hätte den Syte $DTS_TIMEFORMAT und den ExStyle $DTS_UPDOWN,
    welcher dem ExStyle $WS_EX_DLGMODALFRAME gleich kommt.
    Hier mal ein Beispiel, welches du dir ausbauen kannst:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiDateTimePicker.au3>
    #include <WindowsConstants.au3>
    #include <array.au3>
    Global $g_hDTP, $g_aDate

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

    Example()

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

    Func Example()
    Local $hGUI, $hDTP

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

    ; Create GUI
    $hGUI = GUICreate("(UDF Created) DateTimePick Create", 400, 300)
    $g_hDTP = _GUICtrlDTP_Create($hGUI, 10, 10, 60, 21, BitOR($DTS_TIMEFORMAT, $DTS_UPDOWN))
    $hButton = GUICtrlCreateButton("Get Time", 10, 40, 100, 21)
    GUISetState(@SW_SHOW)

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

    ; Set the display format
    _GUICtrlDTP_SetFormat($g_hDTP, "HH:mm")

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

    ; Loop until the user exits.
    #Region - GUI SwitchLoop
    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_ClOSE
    Exit
    Case $hButton
    $g_aDate = _GUICtrlDTP_GetSystemTime($g_hDTP)
    MsgBox(0, "Timecontrol", "Set Time is " & GetTimeStr())

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

    EndSwitch
    WEnd
    #EndRegion - GUI SwitchLoop

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

    GUIDelete()
    EndFunc ;==>Example

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

    Func GetTimeStr()
    Return StringFormat("%02d:%02d", $g_aDate[3], $g_aDate[4])
    EndFunc ;==>GetTimeStr

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • Das macht natürlich Sinn. Durch das BitOR kann ich dann auch mehr als zwei Styles angeben. Habe mich sowieso schon gefragt wo der Unterschied zwischen Style und ExStyle ist. Das ist mir derzeit noch nicht klar. Also verknüpfe ich einfach beliebig viele Styles im Parameter Style mittels BitOR. Und was packe ich in ExStyles?

    Durch das BitOR schaut der Edit auf jeden Fall schon mal sehr nach dem aus was ich mir vorgestellt habe. Vielen Dank dafür! :)

  • Mir scheint, als wären das einfach etwas ausgefallenere Styles, "extended Styles" halt. Bzw. Styles, die meist irgendwelche anderen Styles erweitern und auf ihnen aufbauen.

    Eine Sache fällt mir gerade noch auf: Ich kann jetzt Stunden und Minuten Per UpDown steuern. Allerdings kann ich zwischen den Fildern HH und mm nur per Pfeiltaste switchen, aber nicht per Mausklick. Ist das eine gesonderte Styleeigenschaft oder wie könnte ich das umsetzen?

    • Offizieller Beitrag

    Die UDF benötigt man dafür eigentlich gar nicht. Das geht auch mit dem Standard-Date-Control:

    Spoiler anzeigen
    [autoit]


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

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

    GUICreate("Stunden : Minuten", 240, 120)

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

    $idDate = GUICtrlCreateDate("", 40, 20, 90, 30, $DTS_UPDOWN)
    GUICtrlSetFont(-1, 20)

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

    ; to select a specific default format
    $sStyle = "HH:mm"
    GUICtrlSendMsg($idDate, $DTM_SETFORMATW, 0, $sStyle)

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

    GUISetState(@SW_SHOW)
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE

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

    MsgBox($MB_SYSTEMMODAL, "Time", GUICtrlRead($idDate))

    [/autoit]
    • Offizieller Beitrag

    @Oscar, hab nur sein Beispiel genommen und mir keine weiter Gedanken darüber gemacht :D
    Mit den Standardfunktionen ist es viel einfacher, an die Daten zu kommen. ;)
    Jetzt fällt mir erst auf, das ich noch nie mit einem Datecontrol gearbeitet habe.