While schleife verlassen

  • Hallo zusammen,

    ich bastle im Moment an einer kleinen GUI womit man ein Video aufrufen kann und das gleichzeitig eine Intervallvorgabe hat wann das Video wiederholt wird.

    Soweit so gut klappt auch alles, video wird abgespielt, Intervall funktioniert usw.
    Ob es natürlich der sauberste Weg ist kann ich als Autoit anfänger nicht sagen :)

    Mein Problem ist nun aber sobald meine Funktion bzw der sleep aktiv ist funktioniert der "Verlassen" Button nicht.

    [autoit]

    Dim $vlc = @ProgramFilesDir & "\vlc\vlc.exe"

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

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    $form_video = GUICreate("Video Player", 474, 164, -1, -1)
    $lbl_video = GUICtrlCreateLabel("Video:", 16, 19, 40, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $input_video = GUICtrlCreateInput("", 56, 16, 297, 21)
    $btn_src_video = GUICtrlCreateButton("Öffne Video", 360, 15, 97, 25, $WS_GROUP)
    $lbl_spielzeit = GUICtrlCreateLabel("Pause zwischen dem abspielen: (in Minuten)", 16, 59, 213, 17)
    $input_zeit = GUICtrlCreateInput("30", 234, 56, 41, 21)
    $btn_play = GUICtrlCreateButton("Video starten", 16, 104, 201, 41, $WS_GROUP)
    $btn_exit = GUICtrlCreateButton("Programm schliessen", 256, 104, 201, 41, $WS_GROUP)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $btn_exit
    Exit
    Case $btn_src_video
    $getvideo = FileOpenDialog("Video Auswählen", "S:\SALES\Admin Center\EMPFANG\MONITOR1", "ALL (*.*)")

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

    If @error Then
    MsgBox(16,"Fehler","Keine Datei ausgewählt")
    EndIf

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

    GUICtrlSetData($input_video, $getvideo)
    Case $btn_play
    Global $video = GUICtrlRead($input_video)
    Global $intervall = (GUICtrlRead($input_zeit)*60)*1000

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

    _video()

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

    EndSwitch
    WEnd

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

    Func _video()
    $videoplay = RunWait('"' & $vlc & '"' & " " & '"' & $video & '"')
    ProcessWaitClose($videoplay)
    sleep($intervall)
    _video()
    EndFunc

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

    Vielen Dank schonmal
    Gruß Waro

    Einmal editiert, zuletzt von waro0815 (2. März 2011 um 16:35)

  • ich würd es mal so versuchen: statt

    sleep($intervall)

    [autoit]


    for $i = 1 to $intervall step 250
    sleep(250)
    Next

    [/autoit]

    so würdest du den status pro sekunde 4 mal abfragen...

  • Hallo waro,

    [autoit]

    Case $btn_play
    Global $video = GUICtrlRead($input_video)
    Global $intervall = (GUICtrlRead($input_zeit)*60)*1000

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

    _video()

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

    EndSwitch
    WEnd

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

    Func _video()
    $videoplay = RunWait('"' & $vlc & '"' & " " & '"' & $video & '"')
    ProcessWaitClose($videoplay)
    sleep($intervall)
    _video()
    EndFunc

    [/autoit]


    Du führst eine Endlosschleife aus, video() startet video(). Das ganze läuft in einem Switch Case, das wird ausgeführt und das Script solange angehalten.

    Du drückst auf den Knopf, Case $btn_play tritt ein, und es wird video gestartet, dann wieder video gestartet, etc. DU kommst nicht mehr in die While 1 Schleife des GUI´s zurück, da du immernoch im Case $btn_play bist.

  • vielen Dank für die Antworten.
    Ich versuche im Moment mein Glück mit OnEvent, mal schauen wo es mich hinbringt :)

    OK der Versuch war da, die korrekte Umsetzung hackt noch massiv.
    Soweit funktioniert nun zwar wieder alles, aber eben mein Hauptproblem, das das gewählte Video nach Ablauf des Intervals erneut gestartet wird, aber auch die Möglichkeit das Program zu beenden gegeben ist, bekomme ich nicht hin.

    Fürchte das liegt aber eher daran das ich die OnEvent Geschichte nicht so ganz auf die Reihe bekomme.

    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $form_video, $lbl_video, $lbl_spielzeit, $input_video, $input_zeit, $btn_play, $btn_src_video, $btn_exit
    Local $getvideo, $videoplay
    Local $vlc = @ProgramFilesDir & "\vlc\vlc.exe"

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

    Video_Gui()

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

    Func Video_Gui()

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

    Opt("GUICoordMode", 1)
    Opt("GUIResizeMode", 1)
    Opt("GUIOnEventMode", 1)

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

    $form_video = GUICreate("Video Player", 474, 164, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")

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

    $lbl_video = GUICtrlCreateLabel("Video:", 16, 19, 40, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $input_video = GUICtrlCreateInput("", 56, 16, 297, 21)
    $btn_src_video = GUICtrlCreateButton("Öffne Video", 360, 15, 97, 25)
    GUICtrlSetOnEvent(-1, "SRCVideo")
    $lbl_spielzeit = GUICtrlCreateLabel("Pause zwischen dem abspielen: (in Minuten)", 16, 59, 213, 17)
    $input_zeit = GUICtrlCreateInput("30", 234, 56, 41, 21)
    $btn_play = GUICtrlCreateButton("Video starten", 16, 104, 201, 41)
    GUICtrlSetOnEvent(-1, "PlayPressed")
    $btn_exit = GUICtrlCreateButton("Programm schliessen", 256, 104, 201, 41)
    GUICtrlSetOnEvent(-1, "CancelPressed")

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

    GUISetState(@SW_SHOW)

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

    ; Just idle around
    While 1
    Sleep(10)
    WEnd

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

    EndFunc ;End Video_Gui

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

    Func SRCVideo()
    $getvideo = FileOpenDialog("Video Auswählen", "S:\SALES\Admin Center\EMPFANG\MONITOR1", "ALL (*.*)")

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

    If @error Then
    MsgBox(16,"Fehler","Keine Datei ausgewählt")
    EndIf

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

    GUICtrlSetData($input_video, $getvideo)
    EndFunc

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

    Func PlayPressed()
    Global $video = GUICtrlRead($input_video)
    Global $intervall = (GUICtrlRead($input_zeit)*60)*1000

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

    _video()
    EndFunc ;==>PlayPressed

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

    Func _video()
    $videoplay = RunWait('"' & $vlc & '"' & " " & '"' & $video & '"')
    ProcessWaitClose($videoplay)
    sleep($intervall)
    EndFunc

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

    Func CancelPressed()
    Exit
    EndFunc ;==>CancelPressed

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

    Func SpecialEvents()
    Select
    Case @GUI_CtrlId = $GUI_EVENT_CLOSE
    MsgBox(0, "Close Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
    Exit

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

    Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
    MsgBox(0, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)

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

    Case @GUI_CtrlId = $GUI_EVENT_RESTORE
    MsgBox(0, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)

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

    EndSelect
    EndFunc ;==>SpecialEvents

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

    Einmal editiert, zuletzt von waro0815 (1. März 2011 um 14:05)