Button startet nicht

  • Hallo,

    Ich muß mit einem Button (Gui2) einen Button von (Gui1) starten!
    ...Bilder sagen mehr als 1000 Worte!

    Der Inhalt kann nicht angezeigt werden, da er nicht mehr verfügbar ist.


    Meine Gui1

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Main = GUICreate("Form1", 615, 440, 261, 142)
    $Info = GUICtrlCreateButton("Info", 52, 52, 75, 25)
    $Code = GUICtrlCreateButton("Code", 52, 92, 75, 25)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Info
    #include "Suche.au3"
    Case $Code
    ;$info= GUICtrlRead($Input1)
    Msgbox(4,"Die Info von Input",$Info)
    EndSwitch
    WEnd

    [/autoit]

    Meine Gui2

    [autoit]


    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    #Region ### START Koda GUI section ### Form=
    $FormSuche = GUICreate("Suche", 163, 99, 192, 124, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $Input1 = GUICtrlCreateInput("Input1", 24, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Starte Code", 40, 40, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $info= GUICtrlRead($Input1)
    MsgBox(4,"MainFokus",$info)
    ;GUISetState($Main)
    ;MsgBox(4,"MainFokus","Button Code")
    EndSwitch
    WEnd

    [/autoit]

    Also, nach dem Klick der Gui2 soll die Gui 1 den Fokus erhalten.
    Der CodeButton der gui 1 ist später nicht sichtbar.

    Ich habe alles mögliche schon probiert... :(


    Viele Grüße
    Ilse ;)

  • dann frag ich mich, warum du mit GUI2 auf GUI1 "klicken" willst. kannst doch den code anstatt in GUI1 den button direkt in GUI2 den button schreiben.

  • Logisch...aber genau das wollte ich nicht.
    Gui 1 hat viele CodeElemente die ich je nachdem
    welches Fenster offen ist einfach per Buttom von einer anderen Gui per Buttom
    abrufen möchte. D.h. bei 20 Fenstern mit Buttons hätte ich 20x den gleichen Code!

    ....und, die MainGui sollte nach dem klick den Fokus erhalten!

  • Hier mal das ganze innerhalb einer Datei, ohne include einer externen GUI. Vielleicht kannst du damit ja was anfangen.

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=

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

    $Main = GUICreate("Form1", 615, 440, 261, 142)
    $Info = GUICtrlCreateButton("Info", 52, 52, 75, 25)
    $Code = GUICtrlCreateButton("Code", 52, 92, 75, 25)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW,$Main)

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

    $FormSuche = GUICreate("Suche", 163, 99, 192, 124, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $Input1 = GUICtrlCreateInput("Input1", 24, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Starte Code", 40, 40, 75, 25, $WS_GROUP)
    GUISetState(@SW_HIDE,$FormSuche) ; GUI2 ist unsichtbar

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

    #EndRegion ### END Koda GUI section ###

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

    While 1

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

    $nMsg = GUIGetMsg(1) ;extended Modus wichtig!!
    Switch $nMsg[1] ;für welches Fenster ist die Message

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

    Case $Main ;ab hier ist Gui 1 dran
    Switch $nMsg[0] ;welche Message wurde ausgelöst
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Info
    ;#include "Suche.au3"
    GUISetState(@SW_SHOW,$FormSuche) ; GUI2 einblenden
    Case $Code
    $eingabe= GUICtrlRead($Input1)
    Msgbox(4,"Die Info von Input",$eingabe)
    EndSwitch

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

    Case $FormSuche ;ab hier ist Gui 2 dran
    Switch $nMsg[0] ;welche Message wurde ausgelöst
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$FormSuche) ; GUI2 verstecken
    Case $Button1
    $eingabe= GUICtrlRead($Input1)
    GUISetState(@SW_HIDE,$FormSuche) ; GUI2 wieder verstecken
    MsgBox(4,"MainFokus",$eingabe)
    EndSwitch

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

    EndSwitch
    WEnd

    [/autoit]
  • Hallo MisterSpeed,

    ja genau so.
    Ich habe leider mehrere include.au3
    Heißt das, mit include funktioniert das nicht?

    Muß ich Änderungen an der Main.au3 machen
    oder an den include-Dateien?

    Grüße
    Ilse ;)

  • [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=

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

    $Main = GUICreate("Form1", 615, 440, 261, 142)
    $Info = GUICtrlCreateButton("Info", 52, 52, 75, 25)
    $Code = GUICtrlCreateButton("Code", 52, 92, 75, 25)
    ;GUICtrlSetState(-1, $GUI_HIDE)
    GUISetState(@SW_SHOW,$Main)

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

    $FormSuche = GUICreate("Suche", 163, 99, 192, 124, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $Input1 = GUICtrlCreateInput("Input1", 24, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Starte Code", 40, 40, 75, 25, $WS_GROUP)
    GUISetState(@SW_HIDE,$FormSuche) ; GUI2 ist unsichtbar

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

    #EndRegion ### END Koda GUI section ###

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

    While 1

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

    $nMsg = GUIGetMsg(1) ;extended Modus wichtig!!
    Switch $nMsg[1] ;für welches Fenster ist die Message

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

    Case $Main ;ab hier ist Gui 1 dran
    Switch $nMsg[0] ;welche Message wurde ausgelöst
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Info
    ;#include "Suche.au3"
    GUISetState(@SW_SHOW,$FormSuche) ; GUI2 einblenden
    Case $Code
    _code()
    EndSwitch

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

    Case $FormSuche ;ab hier ist Gui 2 dran
    Switch $nMsg[0] ;welche Message wurde ausgelöst
    Case $GUI_EVENT_CLOSE
    GUISetState(@SW_HIDE,$FormSuche) ; GUI2 verstecken
    Case $Button1
    $eingabe= GUICtrlRead($Input1)
    GUISetState(@SW_HIDE,$FormSuche) ; GUI2 wieder verstecken
    MsgBox(4,"MainFokus",$eingabe)
    _code()
    EndSwitch

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

    EndSwitch
    WEnd
    func _code()
    $eingabe= GUICtrlRead($Input1)
    Msgbox(4,"Die Info von Input",$eingabe)
    EndFunc

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

    So Vieleicht?

  • Hallo MisterSpeed,

    ja genau so.
    Ich habe leider mehrere include.au3
    Heißt das, mit include funktioniert das nicht?

    Muß ich Änderungen an der Main.au3 machen
    oder an den include-Dateien?

    Grüße
    Ilse ;)

    Man kann das auch per include realisieren. Sinnvoll ist das aber nicht unbedingt, ausser du schreibst dir Standard Popup GUI's die du in mehreren Programmen immer mal wieder verwenden willst.
    Hier mal ein Beispiel:

    maingui.au3

    [autoit]


    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <mygui2.au3> ; GUI2 include

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

    Global $eingabe

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

    #Region ### START Koda GUI section ### Form=

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

    $Main = GUICreate("Form1", 615, 440, 261, 142)
    $Info = GUICtrlCreateButton("Info", 52, 52, 75, 25)
    $Code = GUICtrlCreateButton("Code", 52, 92, 75, 25)
    GUISetState()

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

    #EndRegion ### END Koda GUI section ###

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Info
    $eingabe = mygui2Start() ; ruft Funktion aus include Datei und erstellt GUI2
    Case $Code
    Msgbox(4,"Die Info von Input",$eingabe)
    EndSwitch
    WEnd

    [/autoit]

    mygui2.au3

    [autoit]


    Func mygui2Start()

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

    $FormSuche = GUICreate("Suche", 163, 99, 192, 124, -1, BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $Input1 = GUICtrlCreateInput("Input1", 24, 8, 121, 21)
    $Button1 = GUICtrlCreateButton("Starte Code", 40, 40, 75, 25, $WS_GROUP)
    GUISetState()

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1
    $eingabe= GUICtrlRead($Input1)
    GUIDelete($FormSuche)
    MsgBox(4,"MainFokus",$eingabe)
    Return $eingabe ; Rückgabewert der Funktion
    EndSwitch
    WEnd

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

    EndFunc

    [/autoit]
  • @alle

    merci nochmals für eure Tipps.
    Habe alles nochmal probiert, es funktioniert.

    Ineluki

    Sieht so aus als wenn ControlClick
    wohl am wenigsten aufwendig ist,

    [autoit]


    ControlClick ( "title", "text", controlID [, button [, clicks [, x [, y ]]]] )

    [/autoit]

    hm...aber es klappt noch nicht.

    Grüße
    Ilse ;)

  • Wenn du Nudeln kochen willst und das Wasser zuvor mit einem Wasserkocher zum Kochen bringst bevor du das ganze auf den Herd stellst wäre das in etwa mit der controlclick Lösung vergleichbar. Warum sich auf eine externe Aktion verlassen, wenn man das ganze auch intern lösen kann?

    Controlclick ist dafür gedacht um fremde Programme zu steuern, auf deren Variablen und Controls kein direkter Zugriff möglich ist. Sicher funktioniert das auch in deinem Beispiel, aber es scheitert evtl schon wenn du die Anordnung/Position der Buttons änderst, den Text des Buttons, den Titel der GUI usw.

  • Wenn man den Text, die Position oder irgendetwas anderes ändert, funktioniert es.
    Wieso soll man sich mit einer langen Lösung rumquälen, wenn es auch mit einem Einzeiler gut geht?
    Was ist daran so schlimm, wenn sich der Fenstertitel ändert? Man muss diesen ja nicht benutzen, man kann auch ein Handle benutzen ;)

  • Hallo Ilse,

    wenn Du mit mehreren GUIs hantierst, solltest Du Dich mal mit dem GUIOnEventMode beschäftigen. Passenden Code kann übrigens sogar Dein geliebter Koda Form Designer erstellen. Dann brauchst Du keinen ControlClick, weil Du die dem Buttonklick zugeordnete Funktion direkt aufrufen kannst.