2 Guis, wert und Function aus der einen Gui in der anderen ausführen ?

  • Hi, ich habe ein Problem.
    Wir haben in Sharepoint für die Kantine die möglichkeit essen zu bestellen.

    Nun habe ich mir 2 Guis gebastelt.
    In der einen mache ich mit :

    [autoit]


    $MainGui = GUICreate("Intranet", 1200, 900, _
    (@DesktopWidth - 160) / 2, (@DesktopHeight - 145) / 2, _
    $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)

    [/autoit]

    Die Firmenseite auf.
    Alles was ich an Buttons hier drinne habe Funktioniert einwandfrei.
    Jetzt habe ich mir aber gedacht um da eine gewisse übersicht zu bekommen mache ich ein Menü in die Grosse GUI die die Intranetseite beheimatet.
    Nun rufe ich in dem Menü z.B. Die Gui für die Kantine auf.
    Meine Functionen Funktionierten solange ich diese von Buttons auf der MainGui ausführte.
    Jetzt aber nachdem ich sie von der Kantinengui aus aufrufe gehen diese nicht mehr :(
    Ich rufe in dem Menü diese Function Essenmenu() auf und dort wird die nächste Gui Created.

    [autoit]


    Func Essenmenu()

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

    $EssenGui = GUICreate("Essen", 300, 900, _
    (@DesktopWidth - 160) / 2, (@DesktopHeight - 145) / 2, _
    $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS)
    GUICtrlCreateLabel('Essen', 1050, 48, 100, 20)

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

    $Essensmenue = GUICtrlCreateInput('', 100, 70, 100, 20)
    $GUI_Button_Bestellen = GUICtrlCreateButton("Bestellen", 100, 260, 100, 20)

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

    $GUI_Button_Close = GUICtrlCreateButton("Close", 100, 500, 100, 20)

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

    GUISetState(@SW_Show,$KantineGui) ;Show GUI

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

    While 1
    $Kantinemsg = GUIGetMsg()

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

    Select
    Case $Kantinemsg = $GUI_Button_Close
    GUISetState(@SW_Hide,$KantineGui) ;Hide Gui
    ExitLoop

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

    Case $Kantinemsg = $GUI_Button_Bestellen
    Essensbestellung()

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

    EndSelect
    WEnd

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

    EndFunc

    [/autoit]

    Mit der Function Essensbestellung() habe ich in der MainGui bisher das ausgewählte Menü übergeben.
    Also einfacher eintrag Menu1 oder Menu2 in der Inputbox.
    Mit der Function lese ich den Eintrag aus und übergebe ihn an den Linkclick.

    Was auch solange wie gesagt Funktionierte wie ich das in der MainGui ausführte.Nur jetzt in der KAntinenGui funzt diese Übergabe an das IEFenster plötzlich nicht mehr :(

    Vielen Dank für eure Antworten im Voraus

    MfG

    • Offizieller Beitrag

    Ich denke mal das liegt an der Auswetung der GuiMsg. Rufst du die Hauptgui auch über eine Function auf , die ne eigene GuiGetMsg abfrage hat.
    Ich würde die Einzelnen Guis gleich am Scriptanfang erstellen und nur die GUIs verstecken bzw anzeigen. Dei GuiMsg abfrage könntest du dann zentral machen .

  • Hier mal ein Beispiel:

    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 413, 298, 100, 219)
    $Button1 = GUICtrlCreateButton("Button1", 105, 42, 75, 25, 0)
    $Input1 = GUICtrlCreateInput("Input1", 45, 132, 121, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 413, 298, 600, 219)
    $Input2 = GUICtrlCreateInput("Input1", 15, 54, 121, 21)
    $Button2 = GUICtrlCreateButton("Button1", 111, 195, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Form1
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState (@SW_HIDE,$Form1)
    Case $Button1
    $1 = GUICtrlRead ($Input1)
    GUICtrlSetData ($Input2,$1)
    EndSwitch
    Case $Form2
    Switch $nMsg[0]
    Case $Button2
    $2 = GUICtrlRead ($Input2)
    GUICtrlSetData ($Input1,$2)
    Case $GUI_EVENT_CLOSE
    GUISetState (@SW_HIDE,$Form2)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Pass auf, auch wenn du beide Guis Schließt, istd as script noch an!

    mfg. Jam00

  • Ach du grüne neune :(

    Thx erstmal Jam00 für das Beispiel.
    Das bedeutet nur noch das ich jetzt für alle Guis die ich vorhabe das Planen muss :(

    Autsch da ich einiges darin vorhabe wird das dauern :(

    Wie ist das mit dem Beenden des Skriptes, das mache ich auch über ein Exitloop oder ?

    Kann ich ja dann in den Menüs ein Exit einbauen.

  • So überprüft der wenn beide Gui's geschlossen werden, dann geht es aus:

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form2", 413, 298, 100, 219)
    $Button1 = GUICtrlCreateButton("Button1", 105, 42, 75, 25, 0)
    $Input1 = GUICtrlCreateInput("Input1", 45, 132, 121, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Form2", 413, 298, 600, 219)
    $Input2 = GUICtrlCreateInput("Input1", 15, 54, 121, 21)
    $Button2 = GUICtrlCreateButton("Button1", 111, 195, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    $exititem = TrayCreateItem ("Exit")
    TrayItemSetOnEvent ( $exititem, "close" )
    $Close = 0
    While 1
    If $Close = 2 Then Exit
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Form1
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    GUISetState (@SW_HIDE,$Form1)
    $Close = $Close +1
    Case $Button1
    $1 = GUICtrlRead ($Input1)
    GUICtrlSetData ($Input2,$1)
    EndSwitch
    Case $Form2
    Switch $nMsg[0]
    Case $Button2
    $2 = GUICtrlRead ($Input2)
    GUICtrlSetData ($Input1,$2)
    Case $GUI_EVENT_CLOSE
    GUISetState (@SW_HIDE,$Form2)
    $Close = $Close +1
    EndSwitch
    EndSwitch
    WEnd
    Func close()
    Exit
    EndFunc

    [/autoit]

    mfg. Jam00

    • Offizieller Beitrag

    Wenn du 2 mal ein Fenster schließt ist das Prog aus . Egal welches .Wenn z.b. von der Hauptgui mehrere unter Guis geöffnet werden und diese dann geschlossen werden ist die Konstellation ungünstig. Ich würde das Programm beim schließen der Hauptgui beenden.

  • Raupi
    1. Man kann ja dann einfach die Zahlen ändern, so das er erst schließt, wenn 3 oder so Gui's geschlosssen wurden
    2. Weiß ich ja nicht was die Haubtgui ist!

    Und da du je selber kein Bespiel postest mach ich es eben:

    Spoiler anzeigen
    [autoit]


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

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Haubtgui", 413, 298, 100, 219)
    GUICtrlCreateLabel ("Haubtgui",10,10)
    $Button1 = GUICtrlCreateButton("Button1", 105, 42, 75, 25, 0)
    $Input1 = GUICtrlCreateInput("Input1", 45, 132, 121, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Nebengui", 413, 298, 600, 219)
    $Input2 = GUICtrlCreateInput("Input1", 15, 54, 121, 21)
    $Button2 = GUICtrlCreateButton("Button1", 111, 195, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[1]
    Case $Form1
    Switch $nMsg[0]
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    $1 = GUICtrlRead ($Input1)
    GUICtrlSetData ($Input2,$1)
    EndSwitch
    Case $Form2
    Switch $nMsg[0]
    Case $Button2
    $2 = GUICtrlRead ($Input2)
    GUICtrlSetData ($Input1,$2)
    Case $GUI_EVENT_CLOSE
    GUISetState (@SW_HIDE,$Form2)
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    mfg. Jam00

    Einmal editiert, zuletzt von Jam00 (24. Dezember 2008 um 00:33)

    • Offizieller Beitrag

    Dei Zeilen mit dem Tray

    [autoit]

    $exititem = TrayCreateItem ("Exit")
    TrayItemSetOnEvent ( $exititem, "close" )

    [/autoit]

    sind eigentlich unnütz.Exit ist doch schon im Traymenü :D .
    MIt Hauptgui meinte ich eigentlich die $Maingui zu deutsch auch Hauptgui s. 1. Post .

  • Raupi
    Falls du es nicht gemerkt hast, ich habe eine Gui habtgui genan und die andere Nebengui und wenn man die Haubtgui schließt, geht das Programm aus, wenn man nur die nebengui schließt geht es nicht aus! Und das TrayIcon war nur noch drin, weil ich was ausprobiert b und es vergesen hab wegzumachen!

    mfg. Jam00

  • Das habe ich schon hinbekommen danke, habe einfach ein Exit ins Menü gepackt wie hier auch gesagt wurde.
    Also soweit so gut.

    Nur jetzt noch ein Problem.
    in der MainGui sind paar Frames.
    Jetzt sollte ich auf einen Knopfdruck (wie schon gesagt Menü essensbestellung) einen Teil hier aus der MainGui auslesen.
    Das will ich als Kontrolle in die 2te Gui eintragen.Von dort dann in ein Logfiel speichern.

    [autoit]


    Func Bestellt()
    $oFrame = _IEFrameGetObjByName($oIE, 'mainFrame',") ; <-- hier den Namen des Frames eintragen
    $sText = _IEBodyReadText ($oFrame)
    $newstring = _StringBetween($sText, 'Mittagessen für ', '€');verwendet SRE nicht
    GUICtrlSetData($Essenspreis, $newstring[0])
    Preissammlung($newstring[0])
    EndFunc

    [/autoit]

    So stand das im alten Format in der einzelnen Gui.
    Jetzt habe ich dafür extra diese KantineGui erstellt.
    Wie lese ich den Preis aus der Frameseite und trage die in der 2ten Gui ein ?
    Ich schnalle das noch nicht mit der Übergabe.

    MfG

    • Offizieller Beitrag

    Nachdem du um 0:33 Uhr dein Script verändert hast . Aber egal mir is des viel zu blöde mich zu streiten . Hilf du weiter . Das schreibt man übrigens Hauptgui .

  • Nachdem du um 0:33 Uhr dein Script verändert hast . Aber egal mir is des viel zu blöde mich zu streiten . Hilf du weiter . Das schreibt man übrigens Hauptgui .

    He :(
    Nicht streiten.Ist kein Wettbewerb.
    Soll ne Hilfe für mich werden :)

    Und da bin ich jedem Dankbar der mir Ratschläge gibt.
    Umso mehr Bsp. umso besser das verständnis.
    Den verschiedene Programmierer haben verschiedene arten zu Proggen.
    Das ist dann gut weil man sich die Art des Proggens aussuchen kann die einem am ehsten liegt :)

    thx

  • Naja, ist ja so das ich ne IESeite eingebunden habe in die Gui.
    also meine Intranetseite wird innerhalb der MainGui geöffnet.
    Diese Sharepointseite hat mehrere Frames.
    Also der HTMLText ist aufgeteilt in mehrere Fenster, ich denke so könnte man es sagen.
    Nur diese Fenster sind alle in dem einen Browserfenster geöffnet.
    Wie schon gesagt in der MainGui funktionierte das auch.Nur bekomme ich die Werte nicht aus der MainGui in die KantineGui eingelesen :(

    Wie muss ich vorgehen um davon Daten rüber zu bekommen die ich entweder aus dem _IEBodyReadHTML oder aus dem _IEBodyReadText lese.

    MfG

    • Offizieller Beitrag

    Willst du einzelne Teile des Quelltextes in die KantinenGui übernehmen. Oder wie dachtest du dir das ?

  • So wie es da steht.

    [autoit]


    Func Bestellt()
    $oFrame = _IEFrameGetObjByName($oIE, 'mainFrame',") ; <-- hier den Namen des Frames eintragen
    $sText = _IEBodyReadText ($oFrame)
    $newstring = _StringBetween($sText, 'Mittagessen für ', '€');verwendet SRE nicht
    GUICtrlSetData($Essenspreis, $newstring[0])
    Preissammlung($newstring[0])
    EndFunc

    [/autoit]


    Ich habe ja mit $oIE wie oben beschrieben die Seite in die GUI embedded
    Jetzt kann ich mit $oFrame die einzelnen Frames der seite ansprechen.
    Daraus lese ich dann entweder den HTML Text oder den Angezeigten Text aus.
    Und von da lese ich dann entsprechend aus was ich brauche zum verwerten.

    Das kann ich in der MainGui aber nicht in der NebenGui :(
    Da ich on der nebengui die Werte nicht aus der IESeite auslesen kann :(
    Ich weis nicht wie ich an die werte komme.

    thx

    • Offizieller Beitrag

    Ich glaube wir reden aneinander vorbei. Was willst du in der Nebengui /s tun ? dir die einzelnen Frames anzeigen lassen? Controls ausfüllen?Bzw was macht du in den Nebenguis?

  • Das Inputfeld $Essenspreis ist in der Nebengui.
    Den Wert den ich darin Speichern will ist in der MainGui im Frametext.
    Jetzt muss ich also aus dem _IEBodyReadText des Frames in der MainGui den Wert auslesen und ihn in dem $Essenspreis = GUICtrlCreateInput('Essenspreis', 200, 50, 25, 20) abspeichern.

    thx