Case problem..

  • Hi! Und zwar würde ich gerne folgendes umsetzen: Wenn ich Button X (hier Button: Slot_1) gedrückt habe würde ich gerne die position von anderen buttons verschieben und 2 inputboxen generieren.. soweit so gut. wenn ich nochmal button x (also slot_1) drücke möchte ich alles gerne rückgängig machen.. da alles beliebig oft wiederholbar sein soll hatte ich es in eine schleife gepackt und wollte es wie folgt umsetzen:
    ------------------------------------------------------------------------
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $slot_1
    If $slot_1check = 0 Then
    GUICtrlSetPos ( $slot_1, 162, 8, 75, 25)
    $slot_1check = 1
    EndIf
    If $slot_1check = 1 Then
    GUICtrlSetPos ( $slot_1, 8, 8, 75, 25)
    $slot_1check = 0
    EndIf
    EndSwitch
    WEnd
    ---------------------------------------------------------------------------
    Mein Problem ist (wie ihr euch bereits denken könnt, da ich es ja in eine schleife gepackt habe), dass wenn ich Button $Slot_1 drücke, dass er zwar die position ändert, aber auch direkt die zweite If abfrage ausführt.
    hoffe ihr könnt mein problem nachvollziehen und mir helfen
    lg und danke :)

    • Offizieller Beitrag

    Nun, dazu haben findige Programmierer die Funktionen erfunden. :D

    Edit: Ich habe mal für dich noch ein paar Kommentare eingefügt, dann wird klar warum das funktioniert.

    • Offizieller Beitrag
    Zitat von ManuelB.95

    ...jedoch stoße ich auf ein nächstes problem. wenn ich ich nochmal auf den button drücke, möchte ich gerne die zuvor generierten inputboxen sowie die radioboxen unsichtbar machen oder entfernen, ich weiß wieder nicht was ich falsch mache denn GUICtrlDelete oder GUICtrlSetState (@SW_HIDE, INPUTBOX) funktionieren beide nicht. anbei der code

    Du hattest mich wegen weiterer Fragen zu diesem Thema per PN angeschrieben. - Warum?
    Wir diskutieren die Fragen hier im Forum, dazu ist es da. Und dann haben auch andere User einen Nutzen davon.
    Es wäre nützlich, wenn du mal dein kpl. Skript zeigst, dann könnte man genauer auf die Schwachstellen eingehen.

    Hier mal die Funktion, die du mir geschickt hattest. Ich habe meine Anmerkungen rein geschrieben.

  • okay super.. also hier nochmal das komplette skript und ich will nochmal erklären was ich damit bewirken wollte :p

    ich wollte ursprünglich mit dem skript bewirken, dass wenn der user (zB) button §slot_1 drückt, ein zwei inputboxen sowie 2 radioboxen angezeigt werden, da wenn ich ein neues fenster öffnen lassen würde, ich das problem hätte, dass sich das ganze programm schließen würde sobald ich "X" auf dem fenster drücken würde. ich benutze autoit erst seit knapp 3 tagen und kenne mich nicht wirklich aus, weswegen ich wahrscheinlich auch noch sehr viele fehler mache.. aber ich würde sehr gerne lernen :) wie ihr seht, soll es ein programm werden was später reloggt und ich hoffe ich könnt mir helfen.. oder speziell du :) lg

    • Offizieller Beitrag

    da wenn ich ein neues fenster öffnen lassen würde, ich das problem hätte, dass sich das ganze programm schließen würde sobald ich "X" auf dem fenster drücken würde.

    Nöö, dem ist nur so, wenn du das in deinem Skript festlegst. :P

    Hier mal ein einfaches Bsp., wie nur das Hauptfenster das Skript beendet. Beim Schliessen des zweiten Fensters wird zurückgekehrt zum Hauptfenster.
    Da das also das Hauptproblem war, hättest du vielleicht gleich mal in dieser Richtung fragen sollen... :rolleyes:

    Edit:
    Hier mal noch ein Hinweis, wie du durch die Verwendung von Arrays (s. auch mein Array-Tut in der Signatur) deinen Code deutlich straffen kannst.
    Betrifft das If-Statement aus der Funktion um die Ctrl zu verschieben.

  • ok ich werde das nachher mal alles in ruhe durchlesen und durcharbeiten, danke :). aber nochmal, wenn ich zB den befehl GUICtrlSetState ($password_slot_1, $GUI_HIDE) nutze, funktioniert es nicht, d.h. der inputslot wird nicht versteckt oder deaktiviert und ich finde die lösung, dass sich kein neues fenster öffnet, sondern unter dem butten die inputs und die radioboxen "öffnen" schöner, deswegen muss ich dich diesbezüglich nochmal fragen wie ich das umsetze, dass sie "versteckt" und oder deaktiviert werden.. und soll ich sie schon vorher "erstellen" und dann direkt verstecken? wie setze ich das am besten um :/ Danke dir :p
    lg

    • Offizieller Beitrag

    wie ich das umsetze, dass sie "versteckt" und oder deaktiviert werden.. und soll ich sie schon vorher "erstellen" und dann direkt verstecken? wie setze ich das am besten um

    Du könntest sie bereits vorher erstellen, aber die GUI-Größe so definieren, dass diese Ctrl nicht sichtbar sind. Erst nach Button-Klick wird die GUI "ausgeklappt".
    Wichtig - Für jedes Ctrl muß der Resizing-Befehl gesetzt werden, sonst spielen die Ctrl verrückt. Kannst den Befehl ja mal weglassen, dann siehst du den Unterschied.
    Hier ein Bsp.

  • ok ich hab mir mal deine methode angeguckt und wenn ich sie richtig verstanden haben sollte, setzt du die hauptfenstergröße hoch. ich glaube aber nicht, dass das in meinem fall klappen wird (führ mein programm mal bitte in einem skript aus). denn mein gui sieht wie folgt aus:

    AutoIt
    ---------------------------------------------------------------------
    -[BUTTON1] [BUTTON5]                 [INPUT101] [INPUT102]-
    -[BUTTON2] [BUTTON6]                 [CHECKB1] [CHECKB2] -
    -[BUTTON3] [BUTTON7]                 [INPUT201] [INPUT202]-
    -[BUTTON4] [BUTTON8]                 [INPUT301] [INPUT302]-
    -                                                                                    -
    -                                                                                    -
    ---------------------------------------------------------------------


    und wenn ich BUTTON1 gedrückt habe soll es so aussehen:

    ich hoffe ich hab es gut genug beschrieben :p

    Einmal editiert, zuletzt von ManuelB.95 (30. Juli 2015 um 14:25)

  • ich muss leider nochmal fragen :/ wenn ich den code versuche bei mir einzubauen, klappt das irgendwie nicht

    und ich bekomme folgenden error : "C:\Users\Manuel\Desktop\Mu Online Reconnect v0.1.au3" (50) : ==> Subscript used on non-accessible variable.:
    $iX = $aSize[0]
    $iX = $aSize^ ERROR
    ich möchte mich aber vorab nochmal bedanken, dass ihr und ganz besonders du BugFix, euch so viel mühe gebt mir zu helfen

    edit: ich verstehe ja, dass die ziffern eine array rückgabe sind und er die x, y, höhe und weite ausliest, aber das funktioniert nur bei normalen GUI´s.. wie setzte ich das jetzt bei einem input um, dass nur dieser "eingeklappt" wird und nicht mein ganzes fenster

  • Dann musst du eben die Controls verstecken und wieder anzeigen lassen mit GUICtrlSetState. Wie man Controls mit GUICtrlSetPos verschieben kann hat BugFix ja bereits demonstriert. Somit steht deinem Vorhaben ja nichts im Wege ;).

    das war ja auch mein ursprungsproblem, dass autoit inputboxen und radioboxen nicht versteckt, zumindest krieg ich es nicht umgesetzt mit GUICtrlSetState (@SW_HIDE) oder GUICtrlSetState ($id_slot_1, $GUI_HIDE)

    edit: auf einmal klappt es?! ich bin am verzweifeln, danke erstmal jungs! ich mach mal weiter .. :/

    • Offizieller Beitrag

    $aSize = WinGetPos($id_slot_1)

    Wenn du die Abfrage für die Position (inkl. Abmessungen) eines Fensters auf ein Control anwendest, bekommst du natürlich ein Ergebnis, das nicht passt.
    Also nicht blind einsetzen, zumal ich ja auch kommentiert hatte WARUM diese Abfrage erfolgt. :whistling:

  • hehe ja :p, problem solved, also danke dir :) muss dich aber nochmal bezüglich folgendes fragen (wenn ich ein zweites fenster habe, dass ich schließen möchte und zum hauptfenster zurückgelagen möchte. ich habe mal versucht deine methode anzuwenden, komme aber nicht weiter, hier dein beispiel:


    und meine, auf dein bsp angewendete schleife:


    ich finde meinen fehler einfach nicht, denn wenn ich das programm ausführe, dann öffnet sich weder das fenster wenn ich auf den button $options drücke, noch kann ich das hauptfenster bedienen :/

  • Dein Skript ist nicht ausführbar: