Bild wir im falschen GUI angezeigt

  • Hallo
    ich habe ein Programm erstellt um Bilder einer IP Cam anzuzeigen.
    Ich verwenden 2 GUI das Haupt GUI und ein GUI für einstellungen.
    Wenn ich das Programm Starte kann nich ganz normal die Bilder durchschalten. Wenn ich auf Einstellung gehe und dies wieder schließe wird das Aktuelle Bild um GUI Einstellungen angezeigt. Wie kann ich dies verhindern ?

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Func.au3>

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

    ;********************************************GUI 1 ********************************************
    $gui1=GUICreate ("Kamerabildspeicher",500,300,500,260)
    GUISetOnEvent(-3, "_Exit")
    GUISetState (@sw_show)
    $Group = GUICtrlCreateGroup ("Bild",8,8,370,280)
    $Zeit = GUICtrlCreateLabel ("Zeit" , 15,23,180,20)
    Global $Rand = 1
    $Buttonaendern = GUICtrlCreateButton ("Nächstes Bild", 400,20,90,35)
    $Buttonvorher = GUICtrlCreateButton ("Vorheriges Bild",400,60,90,35)
    $ButtonBildAufnehmen = GUICtrlCreateButton ("Bild Aufnahmen", 400,100,90,35)
    $Buttoeinstellung = GUICtrlCreateButton ("Einstellung", 400,140,90,35)

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

    ;*****************************************GUI Einstellung****************************************
    $hConfigGui = GUICreate("Edit Connection", 300, 200)
    GUISetOnEvent(-4, "_CancelConfigGui")
    GUICtrlCreateLabel("Geben Sie die URL Adresse der Kamera an",20,10,250,20)
    GLOBAL $GUIPfad = GUICtrlCreateInput ("Datenpfad",20,30,250,20)
    GUICtrlCreateLabel("Geben Sie die Anzahl der zu Speichernden Bilder an",20,70,250,20)
    GLOBAL $GUIAnzahl = GUICtrlCreateInput ("10",20,90,100,20,$ES_NUMBER)
    $Buttonspeichern = GUICtrlCreateButton ("Speichern",100,150,100,35)

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

    ;Zeige GUI 1 an
    GUISetState (@sw_show,$gui1)

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

    ;*********************************************************************************************
    RandPic ()
    LoadConfigGui()

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; window-handle
    Case $gui1
    Switch $msg[0] ; event/control-handle
    Case $Buttoeinstellung
    LoadConfigGui()
    GUISetState(@SW_SHOW, $hConfigGui)
    ;GUISetState(@SW_HIDE, $gui1)
    Case $Buttonaendern
    IF $Rand > $Anzahl-1 Then
    $Rand = 1
    Else
    $Rand = $Rand +1
    EndIf
    RandPic ()


    Case $Buttonvorher
    IF $Rand < 2 Then
    $Rand = 1
    ELSE
    $Rand = $Rand -1
    EndIf
    RandPic ()


    Case $ButtonBildAufnehmen
    _BildAufnahmen()
    RandPic ()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $hConfigGui
    Switch $msg[0]

    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $hConfigGui)
    Case $Buttonspeichern
    SaveConfigGui()
    LoadConfigGui()
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $hConfigGui)

    EndSwitch
    EndSwitch
    WEnd

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

    Func RandPic ()

    GUICtrlCreatePic ( @ScriptDir & "\Bilder\Bild"&$Rand&".jpg",15,24,350,250)
    Local $t = FileGetTime(@ScriptDir & "\Bilder\Bild"&$Rand&".jpg", 2)
    If Not @error Then
    Local $yyyymd = " Tag "& $t[2] & "." & $t[1]&"." & $t[0] & " Zeit: " & $t[3]& ":" & $t[4] & ":" & $t[5]
    GUICtrlSetData ($Group,"Bild"&$Rand&"."&$yyyymd)
    EndIf

    EndFunc

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

    ;Werte Speicherin
    Func SaveConfigGui()
    $Pfad = GUICtrlRead ($GUIPfad)
    $Anzahl = GUICtrlRead ($GUIAnzahl)
    _SaveConfigGui()

    EndFunc

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

    ;Werte Laden
    Func LoadConfigGui()
    _LoadConfigGui()
    GUICtrlSetData ($GUIPfad,$Pfad)
    GUICtrlSetData ($GUIAnzahl,$Anzahl)

    EndFunc

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


    ;Funktionen
    Global $Pfad
    Global $Anzahl

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

    ;Funktion Bild Aufnahmen
    Func _BildAufnahmen()
    ;Werte Aus INT Laden


    ;Bilder verschieben
    For $i = $Anzahl to 2 Step -1
    FileDelete(@ScriptDir & "\Bilder\Bild"&$i&".jpg")
    FileMove(@ScriptDir & "\Bilder\Bild"&$i-1&".jpg",@ScriptDir & "\Bilder\Bild"&$i&".jpg")
    Next
    $i=1
    ; Neues Bild Speichern
    InetGet($Pfad, @ScriptDir & "\Bilder\Bild"&$i&".jpg",1)
    EndFunc

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

    ;Input Werte Speicherin in int
    Func _SaveConfigGui()
    $_save = $Pfad
    IniWrite(@ScriptDir & "\setup.ini", "Pfad", "Adresse", $_save)
    $_save = $Anzahl
    IniWrite(@ScriptDir & "\setup.ini", "Bild", "Anzahl", $_save)

    EndFunc

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

    ;Input werte lesen aus int
    Func _LoadConfigGui()
    $Pfad = IniRead(@ScriptDir & "\setup.ini", "Pfad", "Adresse" , "http://192.168.178.24/Jpeg/CamImg*.jpg")
    $Anzahl = IniRead(@ScriptDir & "\setup.ini", "Bild", "Anzahl" , "10")

    EndFunc

    [/autoit]
  • Deine Funktion RandPic() erstellt ein Bild auf dem zuletzt erstellten GUI.
    Ich weiß nicht ob folgender code funktioniert, dir sollte aber das Prinzip klar sein wenn du in Zeile 13 und 95 schaust.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <Func.au3>

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

    ;********************************************GUI 1 ********************************************
    $gui1=GUICreate ("Kamerabildspeicher",500,300,500,260)
    $Randpic = GUICtrlCreatePic(@ScriptDir & "\Bilder\Bild"&$Rand&".jpg",15,24,350,250) ;$Randpic wird zum handle des Bilds
    GUISetOnEvent(-3, "_Exit")
    GUISetState (@sw_show)
    $Group = GUICtrlCreateGroup ("Bild",8,8,370,280)
    $Zeit = GUICtrlCreateLabel ("Zeit" , 15,23,180,20)
    Global $Rand = 1
    $Buttonaendern = GUICtrlCreateButton ("Nächstes Bild", 400,20,90,35)
    $Buttonvorher = GUICtrlCreateButton ("Vorheriges Bild",400,60,90,35)
    $ButtonBildAufnehmen = GUICtrlCreateButton ("Bild Aufnahmen", 400,100,90,35)
    $Buttoeinstellung = GUICtrlCreateButton ("Einstellung", 400,140,90,35)

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

    ;*****************************************GUI Einstellung****************************************
    $hConfigGui = GUICreate("Edit Connection", 300, 200)
    GUISetOnEvent(-4, "_CancelConfigGui")
    GUICtrlCreateLabel("Geben Sie die URL Adresse der Kamera an",20,10,250,20)
    GLOBAL $GUIPfad = GUICtrlCreateInput ("Datenpfad",20,30,250,20)
    GUICtrlCreateLabel("Geben Sie die Anzahl der zu Speichernden Bilder an",20,70,250,20)
    GLOBAL $GUIAnzahl = GUICtrlCreateInput ("10",20,90,100,20,$ES_NUMBER)
    $Buttonspeichern = GUICtrlCreateButton ("Speichern",100,150,100,35)

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

    ;Zeige GUI 1 an
    GUISetState (@sw_show,$gui1)

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

    ;*********************************************************************************************
    RandPic()
    LoadConfigGui()

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

    While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1] ; window-handle
    Case $gui1
    Switch $msg[0] ; event/control-handle
    Case $Buttoeinstellung
    LoadConfigGui()
    GUISetState(@SW_SHOW, $hConfigGui)
    ;GUISetState(@SW_HIDE, $gui1)
    Case $Buttonaendern
    IF $Rand > $Anzahl-1 Then
    $Rand = 1
    Else
    $Rand = $Rand +1
    EndIf
    RandPic ()

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

    Case $Buttonvorher
    IF $Rand < 2 Then
    $Rand = 1
    ELSE
    $Rand = $Rand -1
    EndIf
    RandPic ()

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

    Case $ButtonBildAufnehmen
    _BildAufnahmen()
    RandPic ()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    Case $hConfigGui
    Switch $msg[0]

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

    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $hConfigGui)
    Case $Buttonspeichern
    SaveConfigGui()
    LoadConfigGui()
    GUISetState(@SW_SHOW, $gui1)
    GUISetState(@SW_HIDE, $hConfigGui)

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

    EndSwitch
    EndSwitch
    WEnd

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

    Func RandPic ()
    GUICtrlSetImage($Randpic, @ScriptDir & "\Bilder\Bild"&$Rand&".jpg") ;$Randpic wird aktualisiert
    Local $t = FileGetTime(@ScriptDir & "\Bilder\Bild"&$Rand&".jpg", 2)
    If Not @error Then
    Local $yyyymd = " Tag "& $t[2] & "." & $t[1]&"." & $t[0] & " Zeit: " & $t[3]& ":" & $t[4] & ":" & $t[5]
    GUICtrlSetData ($Group,"Bild"&$Rand&"."&$yyyymd)
    EndIf

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

    EndFunc

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

    ;Werte Speicherin
    Func SaveConfigGui()
    $Pfad = GUICtrlRead ($GUIPfad)
    $Anzahl = GUICtrlRead ($GUIAnzahl)
    _SaveConfigGui()

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

    EndFunc

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

    ;Werte Laden
    Func LoadConfigGui()
    _LoadConfigGui()
    GUICtrlSetData ($GUIPfad,$Pfad)
    GUICtrlSetData ($GUIAnzahl,$Anzahl)

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

    EndFunc

    [/autoit]

    Ich habe einfach dem GUICtrlCreatePic eine Variable zugeordnet und diese wird per GUICtrlSetImage aktualisiert.

    gruß

  • howdy

    wenn du öfter mit mehreren guis arbeitest solltest du dir auch mal die funktion guiswitch() anschauen und bei der einen oder anderen funktion vlt. den optionalen parameter(standart ist die letzte gui) für ein gui-handle übergeben

    mfg
    sgtigram

  • Hallo
    habe einfach die Funktion GUISetState getauscht

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

    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE, $hConfigGui)
    GUISetState(@SW_SHOW, $gui1)

    Case $Buttonspeichern
    SaveConfigGui()
    LoadConfigGui()
    GUISetState(@SW_HIDE, $hConfigGui)
    GUISetState(@SW_SHOW, $gui1)

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