Gui Problem, while wend

  • moin^^

    ich möchte in meine gui einfügen, dass alle 5sec ein neues bild erscheint.
    so geht es nicht oder? xD

    [autoit]

    Bilder()
    Func Bilder()
    While 1
    $n=GUICtrlCreatePic("C:\Für Sarah\Bilder\Klassenbild.jpg", 633, 447, 400, 230)
    GUISetState ()
    $n=GUICtrlSetPos($n,10,150,400,300)
    Sleep(5000)
    $m=GUICtrlCreatePic("C:\Für Sarah\Bilder\Tulpen.jpg", 633, 447, 400, 230)
    GUISetState ()
    $m=GUICtrlSetPos($m,10,150,400,300)
    Sleep(5000)
    GUISetState(@SW_SHOW)
    WEnd
    Endfunc

    [/autoit]

    irg. wie, wird dann automatisch nixmehr sonst gemacht also er bleibt nur in der while wend schleife, kann ich das nicht extra so machen das die seperat läuft? und das auf 2 while wend schleifen zugreift? weil unten die schleife echt wichtig ist und ich die dort ja nicht einbinden kann wegen sleep

  • ich würde erstmal hinter den ersten beiden Bildern auch @sw_show in die leeren Klammern einfügen. Es gibt auch noch einen Befehl mit dem du alle X msek etwas ausführen kannst, aber der fällt mir grad nicht ein
    Edit:
    So gehts:

    [autoit]

    GUICreate("Bilder", 633, 447)
    Bilder()
    Func Bilder()
    While 1
    $n=GUICtrlCreatePic("D:\Dokumente und Einstellungen\001.jpg", 633, 447, 400, 230)
    GUISetState(@SW_SHOW)
    $n=GUICtrlSetPos($n,10,150,400,300)
    Sleep(5000)
    $m=GUICtrlCreatePic("D:\Dokumente und Einstellungen\007.jpg", 633, 447, 400, 230)
    GUISetState(@SW_SHOW)
    $m=GUICtrlSetPos($m,10,150,400,300)
    Sleep(5000)
    GUISetState(@SW_SHOW)
    WEnd
    Endfunc

    [/autoit]

    Einmal editiert, zuletzt von Aquaplant (20. November 2009 um 00:02)

  • nene verstehst nicht was ich meine ;)
    hier mal ein teil von meinem script, fängt in der mitte an und hab bis zum schluss kopiert.
    was ich möchte ist, wie mache ich das, das oben die while 1 schleife läuft und unten die while 1 schleife auch gleichzeitig läuft?

    [autoit]

    While 1
    $n=GUICtrlCreatePic("C:\Für Sarah\Bilder\Klassenbild.jpg", 633, 447, 400, 230)
    GUICtrlSetPos($n,10,150,400,300)
    Sleep(5000)
    GUICtrlDelete($n)
    $m=GUICtrlCreatePic("C:\Für Sarah\Bilder\Tulpen.jpg", 633, 447, 400, 230)
    GUICtrlSetPos($m,10,150,400,300)
    Sleep(5000)
    GUICtrlDelete($m)
    GUISetState(@SW_SHOW)
    Wend

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    SoundPlay ("C:\Für Sarah\Musik\Xavier Naidoo - Alles kann besser werden.mp3")

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

    GUISetState ()
    ; resize the control

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

    ; Run the GUI until the dialog is closed

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Lauter
    Send("{VOLUME_UP 10}")
    Case $Leiser
    Send("{VOLUME_DOWN 10}")


    Case $Abspielen
    If GUICtrlRead ( $Radio1 ) = $GUI_CHECKED Then

    ElseIf GUICtrlRead ( $Radio2 ) = $GUI_CHECKED Then
    SoundPlay ("C:\Für Sarah\Xavier Naidoo - Was wir alleine nicht schaffen.mp3" )

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


    Else
    MsgBox ( 0, "Radios belegen", "Radios bitte vorher belegen" )
    Endif
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]
  • Hier das bilderwechseln mal wesentlich gekürzt.

    [autoit]

    Global $i = 0, $Pic[2] = ["C:\Für Sarah\Bilder\Klassenbild.jpg","C:\Für Sarah\Bilder\Tulpen.jpg"]

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

    GUICreate("Test",420,600)
    $n = GUICtrlCreatePic("",10,150,400,300)
    GUISetState()

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

    AdlibEnable("_ChPic",5000)

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

    Func _ChPic()
    GUICtrlSetImage($n,$Pic[$i])
    $i += 1
    If $i = UBound($Pic) Then $i = 0
    EndFunc

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

    Do
    $msg = GUIGetMsg()
    Sleep(666)
    Until $msg = -3
    AdlibDisable()

    [/autoit]

    Bzw, wenn du die Beta benutzt musst du statt AdlibEnable() und -Disable(), AdlibRegister() und -UnRegister() verwenden

  • Zitat

    AdlibEnable()

    stimmt so hießt das
    mehrere while schleifen nebeneinander laufen zu lassen geht nicht, habe ich mich auch schon drüber belehren lassen :rolleyes:
    Aber du kannst beide zusammenlegen und mit Timerinit() und Timerdiff() arbeiten anstatt mit sleep- schau kurz in die Hilfe ;)

  • Hallo,
    so könntest du alle Bilder einlesen und als Diashow darstellen.

    [autoit]

    #include <Array.au3>
    #include <File.au3>

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

    Global $bildnr=1, $pic, $bilder ,$pfad=@WindowsDir

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

    $bilder=_FileListToArray($pfad,"*.bmp",1) ;alle *.bmp-dateien im Verzeichnis c:\windows in ein array
    _arraydisplay($bilder) ;liste anzeigen

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

    GUICreate("diashow") ;gui
    $pic = GUICtrlCreatePic($pfad&"\"&$bilder[1], 10, 10, 100, 100) ;dem 1. bild eine ctrlID zuweisen
    GUISetState(@SW_SHOW) ;GUI anzeigen

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

    adlibenable("_diashow", 1000) ;Funktion _diashow() aufrufen alle 1000ms

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

    Do ;mach was....
    Until GUIGetMsg() = -3 ;solange bis gui geschlossen wird

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

    Func _Diashow() ;
    $bildnr += 1 ;alle bilder nacheinander
    If $bildnr = UBound($bilder) Or $bilder[$bildnr] = "" Then $bildnr = 1 ;wenn alle angezeigt, wieder von vorne anfangen
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bildnr = ' & $bildnr & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    GUICtrlDelete($pic) ;bild löschen da sonst speicherüberlauf, weil immer wieder ein neues control angelegt wird
    $pic = GUICtrlCreatePic($pfad&"\"&$bilder[$bildnr], 10, 10, 100, 100) ;dem nächsten bild eine ctrlID zuweisen
    EndFunc ;==>_Diashow

    [/autoit]

    guictrlsetimage() ...danach hatte ich gesucht :D

  • ich bekomme es nid hin.... habe damit noch nie gearbeitet, habe in der hilfe geschaut und kann damit rein garnichts anfangen...
    ich bitte euch um hilfe, ich poste hier mal mein komplettes script.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <StaticConstants.au3>
    #include <Constants.au3>
    #include <GUIConstants.au3>
    #include <String.au3>
    #include <Array.au3>
    #include <EditConstants.au3>
    #include <File.au3>

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

    DirCreate( "C:\Für Sarah" )
    DirCreate( "C:\Für Sarah\Bilder" )
    DirCreate( "C:\Für Sarah\Musik" )
    FileInstall("C:\Users\Dennis\Desktop\Xavier Naidoo - Alles kann besser werden.mp3", "C:\Für Sarah\Musik\Xavier Naidoo - Alles kann besser werden.mp3")
    FileInstall("C:\Users\Dennis\Desktop\Xavier Naidoo - Was wir alleine nicht schaffen.mp3", "C:\Für Sarah\Musik\Xavier Naidoo - Was wir alleine nicht schaffen.mp3")
    FileInstall("C:\Users\Dennis\Desktop\123.jpg", "C:\Für Sarah\Bilder\Klassenbild.jpg")
    FileInstall("C:\Users\Dennis\Desktop\Tulpen.jpg", "C:\Für Sarah\Bilder\Tulpen.jpg")
    Sleep(3000)
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Für dich Sarah :) @@@ Scripted by Dennis Graß @ Germany", 633, 447, 400, 229)
    $Radio1 = GUICtrlCreateRadio("Xavier Naidoo - Alles kann besser werden", 56, 48, 250, 17)
    $Radio2 = GUICtrlCreateRadio("Xavier Naidoo - Was wir alleine nicht schaffen", 56, 72, 250, 17)

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

    ;buttons
    $Abspielen = GUICtrlCreateButton("Abspielen", 480, 50, 113, 25)
    $Lauter = GUICtrlCreateButton("Lauter", 480, 75, 133, 25)
    $Leiser = GUICtrlCreateButton("Leiser", 480, 100, 133, 25)
    $Edit1 = GUICtrlCreateEdit("", 424, 136, 201, 305, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_NOHIDESEL,$ES_OEMCONVERT,$ES_READONLY,$ES_WANTRETURN,$WS_HSCROLL,$WS_VSCROLL), BitOR($WS_EX_CLIENTEDGE,$WS_EX_STATICEDGE))
    GUICtrlSetData(-1, "Entfernt")
    GUICtrlSetState(0, $GUI_DISABLE)

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

    GUISetState ()
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    SoundPlay ("C:\Für Sarah\Musik\Xavier Naidoo - Alles kann besser werden.mp3")

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

    ;hier das^^, wie mache ich das das unten die while 1 schleife auch ausgeführt wird??
    While 1
    $n=GUICtrlCreatePic("C:\Für Sarah\Bilder\Klassenbild.jpg", 633, 447, 400, 230)
    GUICtrlSetPos($n,10,150,400,300)
    Sleep(5000)
    GUICtrlDelete($n)
    $m=GUICtrlCreatePic("C:\Für Sarah\Bilder\Tulpen.jpg", 633, 447, 400, 230)
    GUICtrlSetPos($m,10,150,400,300)
    Sleep(5000)
    GUICtrlDelete($m)
    GUISetState(@SW_SHOW)
    Wend

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Lauter
    Send("{VOLUME_UP 10}")
    Case $Leiser
    Send("{VOLUME_DOWN 10}")

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

    Case $Abspielen
    If GUICtrlRead ( $Radio1 ) = $GUI_CHECKED Then

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

    ElseIf GUICtrlRead ( $Radio2 ) = $GUI_CHECKED Then
    SoundPlay ("C:\Für Sarah\Xavier Naidoo - Was wir alleine nicht schaffen.mp3" )

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

    Else
    MsgBox ( 0, "Radios belegen", "Radios bitte vorher belegen" )
    Endif
    EndSwitch
    WEnd

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

    2 Mal editiert, zuletzt von Texos (20. November 2009 um 15:01)

  • Hallo Texos,
    3 Leute haben unabhängig voneinander ADLIBENABLE() entweder als Lösung erwähnt oder es in ihren Beispielscripten passend zu deinem Problem verwendet. Warum wohl?
    Weiterhin wurde erwähnt, dass es nicht möglich ist, gleichzeitig verschiedene While-Schleifen laufen zu lassen....
    Wenn du etwas in den Beispielscripten nicht verstehst, dann musst du Fragen! Wenn du die Postings aber ignorierst, dann wirst du auch bald ignoriert!

  • ich habe es doch versucht... lest doch mal =(( man...
    hier das geht nicht...
    dann geht unten die while 1 schleife nid

    [autoit]

    Global $bildnr=1, $pic, $bilder ,$pfad="C:\Für Sarah\Bilder"

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

    $bilder=_FileListToArray($pfad,"*.jpg",1) ;alle *.bmp-dateien im Verzeichnis c:\windows in ein array
    _arraydisplay($bilder) ;liste anzeigen

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

    $pic = GUICtrlCreatePic($pfad&"\"&$bilder[1], 10, 10, 100, 100) ;dem 1. bild eine ctrlID zuweisen
    GUISetState(@SW_SHOW) ;GUI anzeigen

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

    adlibenable("_diashow", 5000) ;Funktion _diashow() aufrufen alle 1000ms

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

    Do ;mach was....
    Until GUIGetMsg() = -3 ;solange bis gui geschlossen wird

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

    Func _Diashow()
    $bildnr += 1 ;alle bilder nacheinander
    If $bildnr = UBound($bilder) Or $bilder[$bildnr] = "" Then $bildnr = 1 ;wenn alle angezeigt, wieder von vorne anfangen
    ;ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $bildnr = ' & $bildnr & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    GUICtrlDelete($pic) ;bild löschen da sonst speicherüberlauf, weil immer wieder ein neues control angelegt wird
    $pic = GUICtrlCreatePic($pfad&"\"&$bilder[$bildnr], 10, 10, 100, 100) ;dem nächsten bild eine ctrlID zuweisen
    EndFunc ;==>_Diashow

    [/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Lauter
    Send("{VOLUME_UP 10}")
    Case $Leiser
    Send("{VOLUME_DOWN 10}")




    Case $Abspielen
    If GUICtrlRead ( $Radio1 ) = $GUI_CHECKED Then

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

    ElseIf GUICtrlRead ( $Radio2 ) = $GUI_CHECKED Then
    SoundPlay ("C:\Für Sarah\Musik\Xavier Naidoo - Was wir alleine nicht schaffen.mp3" )

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

    Else
    MsgBox ( 0, "Radios belegen", "Radios bitte vorher belegen" )
    Endif
    EndSwitch
    WEnd

    [/autoit]
  • [autoit]

    Do ;mach was....
    Until GUIGetMsg() = -3 ;solange bis gui geschlossen wird

    [/autoit]

    kein wunder dass er die while schleife nicht macht oder? hast du die kommentare selber geschrieben oder nur kopiert?

    mache solange was (in deinem fall nichts weil nichts in der do until schleife steht) bis die gui geschlossen wird

  • ich habe alles selber gemacht und geschrieben außer das wo ich jetzt hilfe brauche, wieso O_O
    Edit, Ok klappt nun alles bestens, ich danke euch alle ;)
    habe jetzt Do und Until vor und hinter die While schleife gesetzt

  • ich habe alles selber gemacht und geschrieben außer das wo ich jetzt hilfe brauche, wieso O_O

    frage: was macht die Do-Until schleife?

    PS: poste doch mal dein ganzes skript da lässt sich bestimmt noch einiges verbessern

  • Zitat

    ich habe es doch versucht... lest doch mal =(( man...
    hier das geht nicht...

    :rofl::rofl: made my day^^
    Entschuldige bitte daß ich nicht in der Lage bin, dir elementare Bausteine der Kommunikation begreiflich zu machen. WAS soll ich mehr schreiben ausser einem (wie ich meine) eigentlich komplett kommentierten Script. Die geistige Herausforderung, DAS hier

    [autoit]

    Do ;mach was....
    Until GUIGetMsg() = -3 ;solange bis gui geschlossen wird

    [/autoit]

    mit deinem unveränderten Script

    [autoit]

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Lauter
    Send("{VOLUME_UP 10}")
    Case $Leiser
    Send("{VOLUME_DOWN 10}")




    Case $Abspielen
    If GUICtrlRead ( $Radio1 ) = $GUI_CHECKED Then

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

    ElseIf GUICtrlRead ( $Radio2 ) = $GUI_CHECKED Then
    SoundPlay ("C:\Für Sarah\Musik\Xavier Naidoo - Was wir alleine nicht schaffen.mp3" )

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

    Else
    MsgBox ( 0, "Radios belegen", "Radios bitte vorher belegen" )
    Endif
    EndSwitch

    [/autoit]

    aufzufüllen war wohl zu viel verlangt......

  • das habe ich herausgenommen und oben eingefügt, das wenn die gui gestartet wird das lied automatisch angeht. ich habe das script selber gemacht was soll der scheiß ?!
    ich mache dort ein anderes lied hinein, hilft mir bei meiner frage und kümmert euch nicht um das andere mensch... ich hasse so etwas... -.-
    trotzdem danke das ihr mir geholfen habt und das ich nun mein script fertig habe, es funktioniert nun alles.
    edit: entschuldige das ich mich so aufgeregt habe... ich habe einfach nur oben das beispiel genommen und versucht in mein script dann einzubinden weil ich einfach da gehongen habe :(