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
Case problem..
-
ManuelB.95 -
29. Juli 2015 um 22:02 -
Erledigt
-
-
- Offizieller Beitrag
Nun, dazu haben findige Programmierer die Funktionen erfunden.
Edit: Ich habe mal für dich noch ein paar Kommentare eingefügt, dann wird klar warum das funktioniert.
AutoIt
Alles anzeigenWhile 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $slot_1 _Switch() EndSwitch WEnd Func _Switch() Local Static $slot_1check = True ; statische Variable: wird beim ersten Aufruf erstellt und bleibt nach Funktionsende erhalten (Verhalten wie Globale Variable, aber nur in der Funktion gültig) $slot_1check = Not $slot_1check ; Wert der Variablen wird negiert: aus True wird False und umgekehrt, je nachdem, welchen Wert die Variable beim letzten Aufruf hatte If $slot_1check Then ; Abhängig ob True oder False wird das jeweilige Statement ausgeführt GUICtrlSetPos ( $slot_1, 162, 8, 75, 25) Else GUICtrlSetPos ( $slot_1, 8, 8, 75, 25) EndIf ; Bei Verwendung von AutoIt ab v3.3.12 kann man das If-Statement auch in einen Einzeiler stecken (Ternärer Operator) ;~ GUICtrlSetPos ( $slot_1, ($slot_1check ? 162 : 8), 8, 75, 25) EndFunc
-
Super, Danke! Ich werde es direkt mal ausprobieren
-
- 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.
AutoIt
Alles anzeigen; Grundsätzlich solltest du dir angewöhnen, alle GUI-Ctrl am Skriptanfang zu erstellen. ; Dann kannst du in Abhängigkeit von deinem Programmablauf die einzelnen Ctrl anzeigen ($GUI_SHOW) oder verstecken ($GUI_HIDE) ; oder auch deaktivieren/aktivieren ($GUI_DISABLE/$GUI_ENABLE) Func _slot_1check() Local Static $slot_1check = True $slot_1check = Not $slot_1check ; jetzt erstellst du ein Input und liest es SOFORT aus - wann bitte soll der User da eine Eingabe machen?? $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $id_slot_1r = GUICtrlRead ($id_slot_1) ; hier dasselbe nochmal $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $password_slot_1r = GUICtrlRead ($password_slot_1) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) ; Ausserdem werden jetzt bei JEDEM Aufruf der Funktion diese Inputs und Radios erstellt. ; Es passt auch nicht, dass im selben Aufruf, indem das Input erstellt/gezeigt wird, dieses gelesen wird. ; Das kann logischerweise erst im nächsten Aufruf erfolgen. Hier solltest du dringend deine Programmlogik überarbeiten If $slot_1check Then GUICtrlSetState (@SW_HIDE, $id_slot_1) ; << schau mal hier und dann zwei Zeilen weiter, dort ist es richtig angewendet GUICtrlDelete ($id_slot_1) GUICtrlSetState ($password_slot_1, $GUI_HIDE) GUICtrlSetState ($market_slot_1, $GUI_HIDE) GUICtrlSetState ($leveling_slot_1, $GUI_HIDE) GUICtrlSetPos ( $slot_2, 8, 40, 75, 25) GUICtrlSetPos ( $slot_3, 8, 72, 75, 25) GUICtrlSetPos ( $slot_4, 8, 104, 75, 25) GUICtrlSetPos ( $slot_5, 88, 8, 75, 25) GUICtrlSetPos ( $slot_6, 88, 40, 75, 25) GUICtrlSetPos ( $slot_7, 88, 72, 75, 25) GUICtrlSetPos ( $slot_8, 88, 104, 75, 25) Else $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) GUICtrlSetPos ( $slot_2, 8, 152, 75, 25) GUICtrlSetPos ( $slot_3, 8, 184, 75, 25) GUICtrlSetPos ( $slot_4, 8, 216, 75, 25) GUICtrlSetPos ( $slot_5, 136, 8, 75, 25) GUICtrlSetPos ( $slot_6, 136, 40, 75, 25) GUICtrlSetPos ( $slot_7, 136, 72, 75, 25) GUICtrlSetPos ( $slot_8, 136, 104, 75, 25) EndIf EndFunc
-
okay super.. also hier nochmal das komplette skript und ich will nochmal erklären was ich damit bewirken wollte :p
AutoIt
Alles anzeigen#cs ---------------------------------------------------------------------------- Mu Online reconnect version 0.1 created by Manuel Bender #ce ---------------------------------------------------------------------------- #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> $mu_online_reconnect = GUICreate("Mu Online reconnect v0.1", 513, 257, 194, 125) GUISetBkColor(0xFFFFFF) $credits = GUICtrlCreateLabel("Mu Online reconnect v0.1, created by Manuel Bender.", 248, 232, 261, 17) GUICtrlSetBkColor(-1, 0x808080) $slot_1 = GUICtrlCreateButton("Slot 1", 8, 8, 75, 25) $slot_2 = GUICtrlCreateButton("Slot 2", 8, 40, 75, 25) $slot_3 = GUICtrlCreateButton("Slot 3", 8, 72, 75, 25) $slot_4 = GUICtrlCreateButton("Slot 4", 8, 104, 75, 25) $slot_5 = GUICtrlCreateButton("Slot 5", 88, 8, 75, 25) $slot_6 = GUICtrlCreateButton("Slot 6", 88, 40, 75, 25) $slot_7 = GUICtrlCreateButton("Slot 7", 88, 72, 75, 25) $slot_8 = GUICtrlCreateButton("Slot 8", 88, 104, 75, 25) $options = GUICtrlCreateButton("Options", 341, 200, 75, 25) $help = GUICtrlCreateButton("Help", 424, 200, 75, 25) $name_of_the_store_1 = GUICtrlCreateInput("Name of the store (1)", 244, 5, 121, 21) $market_yellingcheck_1 = GUICtrlCreateCheckbox("Market yelling", 244, 33, 121, 17) $market_yelling_text_1 = GUICtrlCreateInput("Market yelling text", 244, 60, 121, 21) $market_yelling_intervall_1 = GUICtrlCreateInput("Market yelling intervall", 244, 88, 121, 21) $name_of_the_store_2 = GUICtrlCreateInput("Name of the store (2)", 380, 5, 121, 21) $market_yellingcheck_2 = GUICtrlCreateCheckbox("Market yelling", 380, 33, 121, 17) $market_yelling_text_2 = GUICtrlCreateInput("Market yelling text", 380, 60, 121, 21) $market_yelling_intervall_2 = GUICtrlCreateInput("Market yelling intervall", 380, 88, 121, 21) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $slot_1 _slot_1check() EndSwitch WEnd Func _slot_1check() Local Static $slot_1check = True $slot_1check = Not $slot_1check $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $id_slot_1r = GUICtrlRead ($id_slot_1) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $password_slot_1r = GUICtrlRead ($password_slot_1) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) If $slot_1check Then GUISetState (@SW_DISABLE, $id_slot_1) GUICtrlSetPos ($slot_2, 8, 40, 75, 25) GUICtrlSetPos ($slot_3, 8, 72, 75, 25) GUICtrlSetPos ($slot_4, 8, 104, 75, 25) GUICtrlSetPos ($slot_5, 88, 8, 75, 25) GUICtrlSetPos ($slot_6, 88, 40, 75, 25) GUICtrlSetPos ($slot_7, 88, 72, 75, 25) GUICtrlSetPos ($slot_8, 88, 104, 75, 25) Else $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) GUICtrlSetPos ($slot_2, 8, 152, 75, 25) GUICtrlSetPos ($slot_3, 8, 184, 75, 25) GUICtrlSetPos ($slot_4, 8, 216, 75, 25) GUICtrlSetPos ($slot_5, 136, 8, 75, 25) GUICtrlSetPos ($slot_6, 136, 40, 75, 25) GUICtrlSetPos ($slot_7, 136, 72, 75, 25) GUICtrlSetPos ($slot_8, 136, 104, 75, 25) EndIf EndFunc
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.
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...AutoIt
Alles anzeigen#include<GUIConstantsEx.au3> Local $gui1, $gui2, $btn1, $btn2, $msg $gui1 = GUICreate('GUI 1') $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20) $gui2 = GUICreate('GUI 2') $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20) GUISetState(@SW_SHOW, $gui1) While 1 $msg = GUIGetMsg(1) Switch $msg[1] ; Window Handle Case $gui1 Switch $msg[0] ; Event Case $GUI_EVENT_CLOSE ExitLoop Case $btn1 GUISetState(@SW_HIDE, $gui1) GUISetState(@SW_SHOW, $gui2) EndSwitch Case $gui2 Switch $msg[0] Case $GUI_EVENT_CLOSE GUISetState(@SW_SHOW, $gui1) GUISetState(@SW_HIDE, $gui2) Case $btn2 MsgBox(0, '', 'Button 2 geklickt') EndSwitch EndSwitch WEnd GUIDelete($gui1) GUIDelete($gui2)
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.AutoIt
Alles anzeigenIf $slot_1check Then GUICtrlSetState (@SW_HIDE, $id_slot_1) ; << schau mal hier und dann zwei Zeilen weiter, dort ist es richtig angewendet GUICtrlDelete ($id_slot_1) GUICtrlSetState ($password_slot_1, $GUI_HIDE) GUICtrlSetState ($market_slot_1, $GUI_HIDE) GUICtrlSetState ($leveling_slot_1, $GUI_HIDE) GUICtrlSetPos ( $slot_2, 8, 40, 75, 25) GUICtrlSetPos ( $slot_3, 8, 72, 75, 25) GUICtrlSetPos ( $slot_4, 8, 104, 75, 25) GUICtrlSetPos ( $slot_5, 88, 8, 75, 25) GUICtrlSetPos ( $slot_6, 88, 40, 75, 25) GUICtrlSetPos ( $slot_7, 88, 72, 75, 25) GUICtrlSetPos ( $slot_8, 88, 104, 75, 25) Else $id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) GUICtrlSetPos ( $slot_2,8,152 , 75, 25) GUICtrlSetPos ( $slot_3,8,184 , 75, 25) GUICtrlSetPos ( $slot_4,8,216 , 75, 25) GUICtrlSetPos ( $slot_5,136,8 , 75, 25) GUICtrlSetPos ( $slot_6,136,40 , 75, 25) GUICtrlSetPos ( $slot_7,136,72 , 75, 25) GUICtrlSetPos ( $slot_8,136,104, 75, 25) EndIf #cs ; Wenn mehrfach dasselbe durchgeführt wird (GUICtrlSetPos) empfiehlt es sich mit Schleifen und Arrays zu arbeiten ; Im Array speicherst du: [[ID,x-Pos-1,y-Pos-1,x-Pos-2,y-Pos-2]] ; Sollte dann aber als Globales Array ausserhalb der Funktion erstellt werden, würde sonst bei jedem Aufruf neu erstellt werden Local $aSlots[7][5] = [ _ [$slot_2,8,40,8,152], _ [$slot_3,8,72,8,184], _ [$slot_4,8,104,8,216], _ [$slot_5,88,8,136,8], _ [$slot_6,88,40,136,40], _ [$slot_7,88,72,136,72], _ [$slot_8,88,104,136,104]] ; In der Funktion dann nur die Schleife ; Spalten-Index im Array für x1 ist 1, für x2 ist er 3. Der y-Index ist immer x-Index +1 Local $iX = 1 If Not $slot_1check Then $iX = 3 ; oder ternär: Local $iX = $slot_1check ? 1 : 3 For $i = 0 To UBound($aSlots) -1 GUICtrlSetPos($aSlots[$i][0], $aSlots[$i][$iX], $aSlots[$i][$iX+1], 75, 25) Next #ce
-
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.AutoIt
Alles anzeigenGlobal $iW = 230, $iH_small = 40, $iH_full, $iH, $iX, $iY Global $fSwitch = False $hGui = GUICreate('Test', $iW, $iH_small) $idButton = GUICtrlCreateButton('Show/Hide Other Ctrl', 10, 10, 150, 20) GUICtrlSetResizing(-1, 802) ;~ $GUI_DOCKALL = 802 ; diese Ctrl werden nachher ein/ausgeblendet $idInput1 = GUICtrlCreateInput('', 10 , 40, 100, 20) GUICtrlSetResizing(-1, 802) ;~ $GUI_DOCKALL = 802 $idInput2 = GUICtrlCreateInput('', 120 , 40, 100, 20) GUICtrlSetResizing(-1, 802) ;~ $GUI_DOCKALL = 802 ; jetzt die wirklichen Abmaße des Fensters auslesen und speichern, brauchen wir für Resizing $aSize = WinGetPos($hGui) $iX = $aSize[0] $iY = $aSize[1] $iW = $aSize[2] $iH_small = $aSize[3] $iH_full = $iH_small +30 GUISetState() While True Switch GUIGetMsg() Case -3 Exit Case $idButton $fSwitch = Not $fSwitch $iH = $fSwitch ? $iH_full : $iH_small WinMove($hGui, '', $iX, $iY, $iW, $iH) EndSwitch WEnd
-
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:
AutoIt
Alles anzeigen----------------------------------------------------------------------- -[BUTTON1] [BUTTON5] [INPUT101] [INPUT102] - -[INPUTID] [BUTTON6] [CHECKB1] [CHECKB2] - -[INPUTPW] [BUTTON7] [INPUT201] [INPUT202]- -[RADIO1] [BUTTON8] [INPUT301] [INPUT302]- -[RADIO2] - -[BUTTON2] - -[BUTTON3] - -[BUTTON4] - - - - - ---------------------------------------------------------------------
ich hoffe ich hab es gut genug beschrieben :p
-
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 ;).
-
ich muss leider nochmal fragen wenn ich den code versuche bei mir einzubauen, klappt das irgendwie nicht
AutoIt
Alles anzeigen$id_slot_1 = GUICtrlCreateInput("ID", 8, 40, 121, 21) GUICtrlSetResizing(-1, 802) $password_slot_1 = GUICtrlCreateInput("Password", 8, 72, 121, 21, BitOR($GUI_SS_DEFAULT_INPUT,$ES_PASSWORD)) GUICtrlSetResizing(-1, 802) $market_slot_1 = GUICtrlCreateRadio("Market", 8, 104, 121, 17) GUICtrlSetResizing(-1, 802) $leveling_slot_1 = GUICtrlCreateRadio("Leveling", 8, 128, 113, 17) GUICtrlSetResizing(-1, 802) Global $iW = 121, $iH_small = 21, $iH_full, $iH, $iX, $iY Global $fSwitch = False $aSize = WinGetPos($id_slot_1) $iX = $aSize[0] $iY = $aSize[1] $iW = $aSize[2] $iH_small = $aSize[3] $iH_full = $iH_small +30 While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $slot_1 _slot_1check() $fSwitch = Not $fSwitch $iH = $fSwitch ? $iH_full : $iH_small WinMove($id_slot_1, '', $iX, $iY, $iW, $iH) EndSwitch WEnd
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 helfenedit: 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. -
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:
AutoIt
Alles anzeigen#include<GUIConstantsEx.au3> Local $gui1, $gui2, $btn1, $btn2, $msg $gui1 = GUICreate('GUI 1') $btn1 = GUICtrlCreateButton('Zeige GUI 2', 10, 20, 100, 20) $gui2 = GUICreate('GUI 2') $btn2 = GUICtrlCreateButton('Button 2', 10, 20, 100, 20) GUISetState(@SW_SHOW, $gui1) While 1 $msg = GUIGetMsg(1) Switch $msg[1] ; Window Handle Case $gui1 Switch $msg[0] ; Event Case $GUI_EVENT_CLOSE ExitLoop Case $btn1 GUISetState(@SW_HIDE, $gui1) GUISetState(@SW_SHOW, $gui2) EndSwitch Case $gui2 Switch $msg[0] Case $GUI_EVENT_CLOSE GUISetState(@SW_SHOW, $gui1) GUISetState(@SW_HIDE, $gui2) Case $btn2 MsgBox(0, '', 'Button 2 geklickt') EndSwitch EndSwitch WEnd GUIDelete($gui1) GUIDelete($gui2)
und meine, auf dein bsp angewendete schleife:AutoIt
Alles anzeigen$mu_online_reconnect_options = GUICreate("Options", 177, 187, 194, 125) $save_the_settings = GUICtrlCreateLabel("Save the settings", 8, 8, 86, 17) $setting_control = GUICtrlCreateLabel("Ctrl + F10", 104, 8, 49, 17) $start_mu_online_reconnect = GUICtrlCreateLabel("Start", 8, 40, 26, 17) $start_control = GUICtrlCreateLabel("Ctrl + F11", 104, 40, 49, 17) $exit_mu_online_reconnect = GUICtrlCreateLabel("Exit", 8, 72, 21, 17) $exit_control = GUICtrlCreateLabel("Ctrl + F12", 104, 72, 49, 17) $amount_of_accounts = GUICtrlCreateCombo("Amount of account´s", 8, 127, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "One account|Two account´s|Three account´s|Four account´s|Five account´s|Six account´s|Seven account´s|Eight account´s") $Input_intervall_of_reconnectcheck = GUICtrlCreateInput("Intervall", 8, 162, 145, 21) $Combo1 = GUICtrlCreateCombo("Desktop resolution", 8, 97, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) GUICtrlSetData(-1, "1920 x 1080") GUISetState (@SW_HIDE) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $mu_online_reconnect_main Switch $nMsg() Case $GUI_EVENT_CLOSE Exit Case $slot_1 _slot_1check() Case $slot_2 _slot_2check() Case $slot_3 _slot_3check() Case $slot_4 _slot_4check() Case $slot_5 _slot_5check() Case $slot_6 _slot_6check() Case $slot_7 _slot_7check() Case $slot_8 _slot_8check() Case $options GUISetState(@SW_SHOW, $mu_online_reconnect_options) EndSwitch Case $mu_online_reconnect_options Switch $nMsg() Case $GUI_EVENT_CLOSE GUISetState(@SW_SHOW, $mu_online_reconnect_main) GUISetState(@SW_HIDE, $mu_online_reconnect_options) Endswitch EndSwitch WEnd
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:
Code
Alles anzeigen>"C:\Program Files\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.exe" /run /prod /ErrorStdOut /in "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3" /UserParams +>18:27:06 Starting AutoIt3Wrapper v.14.801.2025.0 SciTE v.3.4.4.0 Keyboard:00000407 OS:WIN_81/ CPU:X64 OS:X64 Environment(Language:0407) +> SciTEDir => C:\Program Files\AutoIt3\SciTE UserDir => C:\Users\Bert\AppData\Local\AutoIt v3\SciTE\AutoIt3Wrapper SCITE_USERHOME => C:\Users\Bert\AppData\Local\AutoIt v3\SciTE +>Check for missing standard constants/udf include files: 2 include(s) were added >Running AU3Check (3.3.14.1) from:C:\Program Files\AutoIt3 input:C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3 "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(25,34) : warning: $mu_online_reconnect_main: possibly used before declaration. Case $mu_online_reconnect_main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(29,19) : warning: $slot_1: possibly used before declaration. Case $slot_1 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(31,19) : warning: $slot_2: possibly used before declaration. Case $slot_2 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(33,19) : warning: $slot_3: possibly used before declaration. Case $slot_3 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(35,19) : warning: $slot_4: possibly used before declaration. Case $slot_4 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(37,19) : warning: $slot_5: possibly used before declaration. Case $slot_5 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(39,19) : warning: $slot_6: possibly used before declaration. Case $slot_6 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(41,19) : warning: $slot_7: possibly used before declaration. Case $slot_7 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(43,19) : warning: $slot_8: possibly used before declaration. Case $slot_8 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(45,20) : warning: $options: possibly used before declaration. Case $options ~~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(25,34) : error: $mu_online_reconnect_main: undeclared global variable. Case $mu_online_reconnect_main ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(29,19) : error: $slot_1: undeclared global variable. Case $slot_1 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(31,19) : error: $slot_2: undeclared global variable. Case $slot_2 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(33,19) : error: $slot_3: undeclared global variable. Case $slot_3 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(35,19) : error: $slot_4: undeclared global variable. Case $slot_4 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(37,19) : error: $slot_5: undeclared global variable. Case $slot_5 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(39,19) : error: $slot_6: undeclared global variable. Case $slot_6 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(41,19) : error: $slot_7: undeclared global variable. Case $slot_7 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(43,19) : error: $slot_8: undeclared global variable. Case $slot_8 ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(45,20) : error: $options: undeclared global variable. Case $options ~~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(30,20) : error: _slot_1check(): undefined function. _slot_1check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(32,20) : error: _slot_2check(): undefined function. _slot_2check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(34,20) : error: _slot_3check(): undefined function. _slot_3check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(36,20) : error: _slot_4check(): undefined function. _slot_4check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(38,20) : error: _slot_5check(): undefined function. _slot_5check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(40,20) : error: _slot_6check(): undefined function. _slot_6check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(42,20) : error: _slot_7check(): undefined function. _slot_7check() ~~~~~~~~~~~~~^ "C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3"(44,20) : error: _slot_8check(): undefined function. _slot_8check() ~~~~~~~~~~~~~^ C:\Users\Bert\AutoIt3.My\Test\2Guisasd.au3 - 18 error(s), 10 warning(s) !>18:27:08 AU3Check ended. Press F4 to jump to next error.rc:2 +>18:27:08 AutoIt3Wrapper Finished. >Exit code: 2 Time: 2.533
-
Dein Skript ist nicht ausführbar:
natürlich ist es nicht ausführbar, ich habe ja auch nur den "schnipsel" von der schleife gepostet und nicht das ganze skript
-
Und wie soll man dann deinen Fehler beim umsetzen des Beispiels auf dein Skript finden?