1. Gui findet 2. Gui doof! - Oder: 2. GUI lässt 1. GUI einschlafen

  • Hi zusammen,


    ich hab keine AHnung, wie banal meine Fragen sind, ich verbring jedenfalls viel Zeit, um sie selbst zu lösen :-/

    Also, folgendes Problem: Ich hab ein GUI [$windowmain = GuiCreate("Titel", 220, 405,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_GROUP))], die eine zweite GUI[$windowpopup = GUICreate("abIM08 - Name", 542, 366, 221, 107, BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS, $WS_SIZEBOX, $WS_POPUP, $DS_SETFOREGROUND))] über eine Funktion öffnet. Wenn nun das zweite GUI öffne, reagiert das erste GUI nicht mehr. DH. es öffnet führt keine Aktion mehr durch. Warum ? Weil die Whileschleife nicht weiterläuft ? Wenn ja, wie kann ich das ändern ?


    Erste GUI:


    Zweite GUI - open_chat.func.au3:


    Gruß,
    Chris

    • Offizieller Beitrag

    Hallo!

    Naja, die erste GUI ist halt aus ihrer Message-Schleife raus, bis die Funktion zu Ende ist, die die zweite GUI aufruft. Wenn du beide laufen haben willst, müsstest du die Messageverarbeitung in ein und der selben Wihle-Schileife unterbringen. Dazu musst du die Gliederung in zweei Dateien aufgeben, die meist mehr schadet als hilft.

    Ich habe mir den Quelltext nur ganz kurz angesehen, kann alsoa uch falsch sein.

    peethebee

  • Danke für die schnelle Antwort! Aber ich kann mir irgendwie nichts darunter forstellen (liegt vielleicht auch daran, dass ich verdammt müde bin)...


    BTW.: Ich will eine Funktion mit Parametern öffnen, wenn ich ein Hotkey verwende, oder einen Button drücke... geht das?

    Einmal editiert, zuletzt von dunno (13. Juni 2006 um 00:00)

    • Offizieller Beitrag

    Hallo,

    Du könntest z.B. mit Opt("GUIOnEventMode", 1) in den OnEvent-Modus schalten, dann bist du unabhängig von der Wihle-Schleife.

    Das ganze sieht dann in etwa so aus:

    Erste GUI:

    Zweite GUI - open_chat.func.au3:

    Du mußt also für jede Message eine Funktion schreiben, Info findest du in der Hilfe unter GUI-Referenz.

    @1: Fehler behoben! ;)

    • Offizieller Beitrag
    Zitat

    von th.meger
    HI,

    macht es nicht unnötig kompliziert. Mach eine While-Schleife, in der du beide GUIs abhandelst. Am Anfang baust du beide GUIs und schaltest die zweite das einfach auf show wenn du sie brauchst.

    So long,

    Mega

    Dann sollte er aber auch nur mit einer Datei arbeiten! ;)

  • Danke für eure schnellen Antworten, Jungs! Das schätze ich so an diesem Board :)

    Das Problem ist, dass dieses Fenster mehrmals geöffnet werden soll (deswegen soll die erste GUI ja auch weiterlaufen), nur mit dem Unterschied, dass es andere Daten handelt. Kann ich nicht einfach sämtliche Variablen per ByRef an die erste Whileschleife zurückgeben ? BZW. einfach das GUICreate über die Funktion aufrufen und dann mit einer Hilfvariable und einer IF-Abfrage die Komponenten aktivieren... ok, das wird auch wieder zu kompliziert ;)

    BTW. das soll ein Instant Messenger werden :D Aber nur für einen kleinen, ausgewählten Kreis (meine Stufe ;) )

    LG,
    Chris

  • Mein Code in der ersten GUI sieht jetzt so aus:

    Spoiler anzeigen

    Das Problem ist, dass er die Funktionen nicht einmal aufruft, bis auf die close Funktion. Noch nicht mal ein Button hat ihn dazu bewegt, irgendwas zu machen... Wo liegt der Fehler ?


    Gruß,
    Chris

    Einmal editiert, zuletzt von dunno (15. Juni 2006 um 15:30)

    • Offizieller Beitrag

    Es wäre hilfreich wenn du zumindest die GUI komplett posten könntest!

  • klar, kann ich machen:

    Spoiler anzeigen
    • Offizieller Beitrag

    Ich habe dir die falschen Funktionen gepostet, sorry! Für Controlelemente heisst die Funktion GuiCtrlSetOnEvent(). :tier:

    Code
    GUICtrlSetOnEvent($list_online, "_OpenChatClicked")
    GUICtrlSetOnEvent($dropdown_status, "_ChangeStatus")
    GUISetOnEvent($GUI_EVENT_CLOSE, "close", $windowmain)
  • :) hätte ich auch selbst drauf kommen können :o) danke dir!


    Eine Frage: Ich kenn es aus TurboPascal und PHP, das man in einer Funktion auch noch eine Funktion anlegen kann. bei AutoIT ist das nicht der Fall, oder? Wenn das der Fall ist, dann hab ich ein Problem mit den Unterfunktionen, bzw. ich muss die Variablen Global machen, Richtig ?


    Gruß,
    Chris

    • Offizieller Beitrag

    Funktion in einer Funktion geht (leider) nicht! Du kannst aber Variablen auch mit ByRef übergeben (s. Hilfe zu Func) dann kannst du sie innerhalb der Funktion verändern. Wenn du innerhalb von Event-Funktionen auf Variablen zugreifen willst geht es nur über Global.