Habe schon angefangen den Code neu zu formatieren. Habe auch den Code neu geschrieben um es übersichtlicher zu halten. Wollte ihn gerade hier posten aber irgendwie will das nicht so recht.
Text in iFrame schreiben
-
AlphavibeZ -
1. Februar 2018 um 14:16 -
Erledigt
-
-
Wollte ihn gerade hier posten aber irgendwie will das nicht so recht.
Du hast es doch bisjetzt auch hinbekommen, woran scheiterts?
-
Er zeigt ihn nicht formatiert als AutoIT code an, selbst wenn ich es auswähle. Dadurch sieht es total unübersichtlich aus.
Habe nur Scite Lite, glaube da gibt es die Tidy funktion nicht.
-
Poste ihn doch auf pastebin.com und verlink ihn dann hier.
-
Hier ist er : https://pastebin.com/xJZSyb7v
Hält aber nur ne Stunde.
Bin gerade dabei, zu schauen welche Variablen ich tatsächlich Global brauche und welche ich auf local stellen kann.
-
Alle Globalen-Variablendefinitionen sollten auf jeden Fall aus den Funktionen raus, das ist sehr -- wirklich -- sehr schlechter Stil und führt nur zu Unmengen an Warnungen.
Die GUIs solltest du ebenfalls überarbeiten, denn du rufst sie rekursiv auf. Das bedeutet, dass du von GUI1 zu GUI2 springst und dann von GUI2 GUI1 neu erstellst.
Den Befehl Call solltest du komplett aus deinem Code streichen, der ist unnötig. Rufe deine Funktionen einfach direkt auf wie du MsgBoxen z.B. aufrufst.
-
Ok, werde ich berücksichtigen und demnächst den Code nochmals hochladen. Dankeschön!
-
- Offizieller Beitrag
Die GUIs solltest du ebenfalls überarbeiten, denn du rufst sie rekursiv auf. Das bedeutet, dass du von GUI1 zu GUI2 springst und dann von GUI2 GUI1 neu erstellst.
AlphavibeZ: Das ist genau so ein Beispiel, wie ich das hier angesprochen habe. Das missbrauchen von Funktionsaufrufen als Goto-Ersatz.
Wenn Du mehrere GUIs verwenden willst, erstelle beide am Anfang des Scripts und mache nur das gerade benötigte Fenster sichtbar (mit GuiSetState) und schalte das andere unsichtbar. So vermeidest Du das ständige löschen und wieder erstellen der GUIs.
Je nach Kenntnisstand ist es auch von Vorteil den OnEventMode zu benutzen.
-
Werde ich versuchen, vielen dank
-
Hallo, ich bins nochmal.
Hab jetzt alles überarbeitet und die variablen z.b. alle (zumindest fast alle) local oben im script deklariert. und die global deklaration aus den funktionen rausgenommen. Danke nochmal für die ganze Hilfe.
Habe jetzt eine kleine Schwierigkeit mit den GUIs.
ich ruf die jetzt alle am Anfang meines Scriptes auf (nach der deklaration der variablen), also so :
AutoIt
Alles anzeigen; Hier deklarieren wir unsere Variablen #Region Variablen Local $hersteller, $hGUI1, $hGUI_Login, $hGUI2, $menu, $CheckMasse1, $CheckMasse2, $CheckMasse3, $sCheckFarbe, $checkDimmbar, $artnr, $preis, $effizienz, $flammen, $material, $farbe Local $masse1, $masse2, $masse3, $kelvin, $lumen, $watt, $racri, $racriwert, $serie, $kategorie, $istdimmbar, $dimmbar, $artikelname, $google2, $lagerbestand, $email, $passwort #EndRegion Variablen ; Wir öffnen unser GUIs. #Region GUIs guiLogin() guiMenu() guiHersteller() guiArtikelanlegen() guiErfolg() #EndRegion GUIs
Das Problem welches ich jetzt habe ist, dass ich jetzt bei der GUI Login auf Einloggen drücken kann - sich allerdings nicht wie gewünscht das GUI Menü öffnet, sondern erneut das GUI Login.
Hier ist der Code der beiden GUIs
AutoIt
Alles anzeigenFunc guiLogin() $hGUI_Login = GUICreate("Bitte Anmelden", 455, 210, 178, 166) $Pic1 = GUICtrlCreatePic("C:\Artikelmanager\Projekt Artikelmanager\Data\Pictures\Wohnkult24Logo.jpg", 8, 8, 436, 100, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS)) $sEmail = GUICtrlCreateLabel("E-Mail", 8, 128, 33, 17) GUICtrlSetTip(-1, "Bitte Anmelde E-Mail von Wohnkult24.com eingeben.") $sPasswort = GUICtrlCreateLabel("Passwort", 8, 168, 47, 17) GUICtrlSetTip(-1, "Bitte Passwort eingeben. Das Passwort entspricht dem Anmeldepasswort der Homepage Wohnkult24.com") $s_email = GUICtrlCreateInput("", 64, 128, 121, 21) $s_Passwort = GUICtrlCreateInput("", 64, 168, 121, 21, BitOR($ES_PASSWORD,$ES_AUTOHSCROLL)) $ButtonEinloggen = GUICtrlCreateButton("Einloggen", 320, 128, 123, 25, $WS_GROUP) $ButtonBeenden = GUICtrlCreateButton("Beenden", 320, 168, 123, 25, $WS_GROUP) GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit 0 _IEQuit($oIE) Case $ButtonEinloggen $email = GuiCtrlRead ($s_email) $passwort = GuiCtrlRead ($s_Passwort) If $email = "" Or $passwort = "" Then MsgBox($MB_SYSTEMMODAL, "Bitte E-Mail und Passwort eingeben", "Sie haben entweder die E-Mail oder das Passwort nicht eingegeben.", 10) Else _abschickenLogin() GUISetState(@SW_HIDE,$hGUI_Login) GUISetState(@SW_SHOW,$menu) EndIf Case $ButtonBeenden _IEQuit($oIE) Exit 0 EndSwitch WEnd EndFunc ;==>guiLogin
AutoIt
Alles anzeigenFunc guiMenu() $menu = GUICreate("Hauptmenü", 590, 409, 195, 126) $Pic1 = GUICtrlCreatePic("C:\Artikelmanager\Projekt Artikelmanager\Data\Pictures\Wohnkult24Logo.jpg", 8, 8, 572, 116, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS)) $bt_newarticle = GUICtrlCreateButton("Neuen Artikel Anlegen", 8, 136, 171, 41, $WS_GROUP) $bt_editarticle = GUICtrlCreateButton("Artikel Bearbeiten", 208, 136, 171, 41, $WS_GROUP) $bt_editattributes = GUICtrlCreateButton("Attribute Bearbeiten", 408, 136, 171, 41, $WS_GROUP) $bt_admin = GUICtrlCreateButton("Adminbereich öffnen", 8, 200, 171, 41, $WS_GROUP) $bt_articledelete = GUICtrlCreateButton("Artikel Löschen", 208, 200, 171, 41, $WS_GROUP) $bt_editcategorie = GUICtrlCreateButton("Kategorien Bearbeiten", 408, 200, 171, 41, $WS_GROUP) $bt_beenden = GUICtrlCreateButton("Beenden", 408, 360, 171, 41, $WS_GROUP) GUISetState(@SW_HIDE) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE _IEQuit($oIE) Exit Case $bt_newarticle GUISetState(@SW_HIDE, $menu) GUISetState(@SW_SHOW, $hersteller) Case $bt_editarticle MsgBox($MB_SYSTEMMODAL, "Fehler", "Dieses Feature ist noch nicht fertig.", 10) Case $bt_editattributes MsgBox($MB_SYSTEMMODAL, "Fehler", "Dieses Feature ist noch nicht fertig.", 10) Case $bt_admin Do $oIE2 = _IECreate("https://www.wohnkult24.com/admin/start.php") Until IsObj($oIE2) Case $bt_editcategorie MsgBox($MB_SYSTEMMODAL, "Fehler", "Dieses Feature ist noch nicht fertig.", 10) Case $bt_articledelete MsgBox($MB_SYSTEMMODAL, "Fehler", "Dieses Feature ist noch nicht fertig.", 10) Case $bt_beenden _IEQuit($oIE) Exit 0 EndSwitch WEnd EndFunc
Vermutlich ist das wieder irgendein dämlicher Fehler.. aber ich komm einfach nicht drauf. Möchte aber auch nicht weiterhin die Funktionen immer wieder neu Aufrufen, damit ich nicht diesen von Oscar angesprochenen Stack Overflow error bekomme.
-
Das liegt ganz einfach daran, dass du deine GUIs in den Funktionen erzeugst und in den Funktionen wegen der Msg-Schleife auch wartest.
Erzeuge vorher alle GUIs und verstecke sie ohne irgendwelche GUI-Nachrichten zu lesen.
Nachdem du alle erzeugst hast kannst du anfangen eine Msg-Schleife zu bauen (oder auf Events zu warten wenn du OnEventMode verwendest).
-
Ich merke schon, dass ich schon wieder etwas nicht verstehe. Ich werde mein Wissen nacharbeiten und sobald ich weiß was du damit meinst - und ich das umsetzen konnte, werde ich mich hier mit dem Resultat melden.
LG
-
Der Grund warum dein Skript keine Fehler schmeißt und du deine fehlerhafte Logik direkt sehen würdest ist, dass du alle Variablen vorher deklarierst.
Das ist ja auch in Ordnung aber dann musst du schärfer hingucken.
Du versuchst deine GUIs so anzuzeigen, und das ist falsch.
Du darfst GUI-Defintionen gerne in Funktionen schieben, das ist kein Problem aber dann sollte die Funktion nicht-blockierend sein, da ansonsten in der Funktion auf GUI-Nachrichte gewartet wird.
Sind deine anderen GUIs noch nicht initialisiert bringt dir ein GUISetState auch nichts.
AutoIt
Alles anzeigenGlobal $hG1, $hG2, $hButton G1() G2() Func G1() $hG1 = GUICreate("GUI1") $hButton = GUICtrlCreateButton("Zeige GUI2", 20, 20) GUISetState(@SW_SHOW, $hG1) While Sleep(10) Switch GUIGetMsg() Case -3 Exit 0 Case $hButton GUISetState($hG2, @SW_SHOW) EndSwitch WEnd EndFunc Func G2() $hG2 = GUICreate("GUI2") GUISetState(@SW_HIDE, $hG2) While GUIGetMsg() <> -3 WEnd EndFunc
Der richtige Weg ist es die GUIs zu erzeugen, sie zu verstecken ohne Eingaben zu verwerten und dann erst sie anzuzeigen bzw. zu verstecken:
AutoIt
Alles anzeigenGlobal $hG1, $hG2, $hButton, $hButton2 ;Initalisiere GUIs, blockiere nicht G1() G2() GUISetState(@SW_SHOW, $hG1) While Sleep(10) Switch GUIGetMsg() Case -3 Exit Case $hButton MsgBox(64, "Button", "Es wurde $hButton auf der GUI1 gedrückt." & @CRLF & "GUI1 wird nun versteckt und GUI2 wird angezeigt.") GUISetState(@SW_HIDE, $hG1) GUISetState(@SW_SHOW, $hG2) Case $hButton2 MsgBox(64, "Button", "Es wurde $hButton2 auf der GUI2 gedrückt." & @CRLF & "GUI2 wird nun versteckt und GUI2 wird angezeigt.") GUISetState(@SW_HIDE, $hG2) GUISetState(@SW_SHOW, $hG1) EndSwitch WEnd Func G1() $hG1 = GUICreate("GUI1") $hButton = GUICtrlCreateButton("Zeige GUI2", 20, 20) ;Keine Msg-Schleife EndFunc Func G2() $hG2 = GUICreate("GUI2") $hButton2 = GUICtrlCreateButton("Zeige GUI1", 20, 20) ;Keine Msg-Schleife EndFunc
Die elegantere Variante wäre es GUIOnEventMode zu verwenden, dann fallen die Msg-Schleifen komplett weg.
-
Okay, habe es verstanden. Dankeschön! Für heute reichts mir, aber morgen werde ich mal meinen Update hier reinposten. Kann ich mich irgendwie für deine Hilfe erkenntlich zeigen?
-
Kann ich mich irgendwie für deine Hilfe erkenntlich zeigen?
Was schwebt dir denn vor?
-
Keine Ahnung, ne 10 euro giftcard für irgendwas oder so. kann ich ja morgen beim einkaufen mitnehmen
-
Ich hab dir mal ne PN geschrieben (u.a. wegen anderen Sachen).
Wegen der Giftcard (so stehts auch in der PN):
Du kannst mir gerne einen 10er Steamguthaben mitbringen oder an das Forum spenden per PayPal, oder keins von beiden.
Immerhin helfen wir hier ehrenamtlich und wenn du nach dem Thread schlauer bist, sind wir auch zufrieden
-
Wahnsinn. Richtig nostalgisches Gefühl. Verdammt
-