Neues GUI in Funktion

  • Ich erhallte immer die Fehlermeldung:

    Code
    (35) : ==> Variable used without being declared.


    Code:

    [autoit]

    #include <Inet.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3> ; ich weis, die ganzen includes braucht man nicht
    #include <GuiListView.au3> ;
    #include <IE.au3>
    $DesktopWidth=@DesktopWidth-100
    $DesktopHeight=@DesktopHeight-130
    $DesktopPosLeft=(@DesktopWidth-$DesktopWidth)/2
    $DesktopPosTop=(@DesktopHeight-$DesktopHeight)/2
    $hWindow = GUICreate("Fenster 1", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    $but = GUICtrlCreateButton("Fenster 2 öffnen", 500, 500, 300, 50) ; Button erzeugen
    GUISetState(@SW_SHOW)
    Func Funktion()
    Global $wiWindow = GUICreate("Fenster 2", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    Global $closewibut = GUICtrlCreateButton("Fenster 2 schließen", 500, 500, 300, 50) ; Button erzeugen
    GUISetState(@SW_SHOW)
    EndFunc
    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Switch $nMsg[1]
    Case $hWindow
    Exit
    Case $wiWindow
    GUIDelete($wiWindow)

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

    EndSwitch
    Case $but
    Funktion()
    Case $closewibut
    GUIDelete($wiWindow)
    EndSwitch
    WEnd

    [/autoit]


    Woran liegt das?
    Danke!

  • Dann deklarier die Variable doch global.

    Schreib am besten vor der Haupt-GUI mal irgendwo

    [autoit]

    Global $wiWindow

    [/autoit]

    Das liegt daran, dass Du eine Varible nutzt, die Du in einer Funktion erstellst. Diese Variable wird außerhalb der Funktion nicht erkannt.

  • [autoit]

    Func Funktion()
    Global $wiWindow
    $wiWindow = GUICreate("Fenster 2", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    $closewibut = GUICtrlCreateButton("Fenster 2 schließen", 500, 500, 300, 50) ; Button erzeugen
    GUISetState(@SW_SHOW)

    [/autoit]

    Standard-Deklaration in Funktionen ist LOCAL. Also außerhalb der Funktion nicht mehr verfügbar.
    Wenn Du also ausßerhalb einer Funktion darauf zugreifen willst, muss Du sie als GLOBAL deklarieren.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Dann wird das Skript zwar nicht abgeborchen, aber beide Fenster werden sofort geschlossen.
    Hier der Code:

    [autoit]

    #include <Inet.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3> ; ich weis, die ganzen includes braucht man nicht
    #include <GuiListView.au3> ;
    #include <IE.au3>
    Global $wiWindow
    Global $closewibut
    $DesktopWidth=@DesktopWidth-100
    $DesktopHeight=@DesktopHeight-130
    $DesktopPosLeft=(@DesktopWidth-$DesktopWidth)/2
    $DesktopPosTop=(@DesktopHeight-$DesktopHeight)/2
    $hWindow = GUICreate("Fenster 1", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    $but = GUICtrlCreateButton("Fenster 2 öffnen", 500, 500, 300, 50) ; Button erzeugen
    GUISetState(@SW_SHOW)
    Func Funktion()
    Global $wiWindow = GUICreate("Fenster 2", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    Global $closewibut = GUICtrlCreateButton("Fenster 2 schließen", 500, 500, 300, 50) ; Button erzeugen
    GUISetState(@SW_SHOW)
    EndFunc
    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Switch $nMsg[1]
    Case $hWindow
    Exit
    Case $wiWindow
    GUIDelete($wiWindow)

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

    EndSwitch
    Case $but
    Funktion()
    Case $closewibut
    GUIDelete($wiWindow)
    EndSwitch
    WEnd

    [/autoit]
  • Micha_he, bei deiner kommt die Fehlermeldung

    Code
    18,17) : WARNING: $wiWindow: declared global in function only. Prefer top of file.
    (38) : ==> Variable used without being declared.
    (31,31) : WARNING: $wiWindow: possibly used before declaration.
                	Case $wiWindow
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    (38,19) : WARNING: $closewibut: possibly used before declaration.
  • Du fragst in Zeile 28 mit "Case $wiWindow" eine Variable ab, bevor sie in der Funktion deklariert wurde.

    Geh einfach folgendermaßen vor:
    Erzeuge beide GUI's am Anfang (mit globalen Handle-Variablen) und schalte dann mittels deines Button's
    das jeweilige GUI sichtbar/unsichtbar (GUISetState).

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • @Micha he
    Die Variable kann in einer Funktion nicht Global deklariert werden, denke ich :D
    Oder hab ich da was falsch verstanden ?(

    name22: Ja

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • So z.B.:

    Spoiler anzeigen
    [autoit]

    #include <Inet.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3> ; ich weis, die ganzen includes braucht man nicht
    #include <GuiListView.au3> ;
    #include <IE.au3>
    Global $hWindow, $wiWindow, $but, $closewibut
    $DesktopWidth=@DesktopWidth-100
    $DesktopHeight=@DesktopHeight-130
    $DesktopPosLeft=(@DesktopWidth-$DesktopWidth)/2
    $DesktopPosTop=(@DesktopHeight-$DesktopHeight)/2
    $hWindow = GUICreate("Fenster 1", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    $but = GUICtrlCreateButton("Fenster 2 öffnen", 500, 500, 300, 50) ; Button erzeugen
    $wiWindow = GUICreate("Fenster 2", $DesktopWidth,$DesktopHeight,$DesktopPosLeft, $DesktopPosTop)
    $closewibut = GUICtrlCreateButton("Fenster 2 schließen", 500, 500, 300, 50) ; Button erzeugen
    GUISetState(@SW_SHOW, $hWindow)

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $but
    GUISetState(@SW_SHOW,$wiWindow)
    Case $closewibut
    GUISetState(@SW_HIDE,$wiWindow)
    EndSwitch
    WEnd

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Wie kann ich dann aber sagen, das bei einem z.B.

    [autoit]

    GUICtrlCreateObj

    [/autoit]

    sich das auf das zweite GUI bezieht? - Danke

  • Wie kann ich dann aber sagen, das bei einem z.B.

    [autoit]

    GUICtrlCreateObj

    [/autoit]

    sich das auf das zweite GUI bezieht? - Danke

  • Die Funktion muss aber bestehen beleiben.
    Es gibt nähmlich ein ListView, und je nach derzeit markiertem sollen Informationen aus dem I-Net in einem extra-Gui angezeigt werden.

  • Dann erzeugst Du am Ende deines Scripts eine Funktion, in der Du z.B. das ListView-Object im 2. GUI aktualisierst und es anschließend mit GUISetState anzeigst.

    Diese Funktion kannst Du nun an der passenden Stelle im Script aufrufen.

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"