GUI erstellen Problem

  • Moin,

    ich bin neu bei AutoIT (habe bisher nur mit Delphi gearbeitet) und habe aktuell Probleme beim erstellen der GUI bzw. Zugriff auf dessen da ich bisher in Delphi dies eher in der "luxus Variante" erstellen konnte.

    Mein Problem dabei ist, das er immer sagt, das Variablen undefiniert seien wenn ich auf "Abbrechen" Klicke. Ich gehe davon aus, das dies $ExcelP, $ProgrammP und $InstallP betrifft. Was mache ich falsch?

    Nicht wundern: Aktuell wird nur die GUI erzeugt (das was schon drin ist) und nach 15 Sekunden das Programm beendet.

    Einmal editiert, zuletzt von Moombas (28. März 2018 um 11:59)

  • Hallo Moombas

    Wenn du Variablen innerhalb von Funktionen deklarierst, haben sie automatisch lokale Gültigkeit (Local).

    Wenn du auch außerhalb dieser Funktion auf die Variablen zugreifen möchtest, solltest du sie am Besten oben im Skript, vor den Funktionsaufrufen Global deklarieren.

    Grüße autoiter

  • Dim brauchst du eigentlich gar nicht nutzen. Du kannst dir merken, alles was du außerhalb von Funktionen deklarierst hat globale Gültigkeit (auch wenn du Local schreiben würdest).

    Du greifst in der Funktion "AbbrechenE" auf Controls zu, die du nicht global deklariert hast ($ExcelPfad, $ProgrammPfad, $InstallPfad)

    Kann es sein, dass du die Variablen zwischenzeitlich umbenannt hast und das oben vergessen hast anzupassen? ;)

    Grüße autoiter

  • XD Denkfehler, ich hätte auch die GUI-Elemente global deklarieren müssen. jetzt habe ich keine Fehlermeldung mehr :) Danke.

    Das war aber bestimmt nicht die letzte Frage^^

  • Das hast du mit $ExcelP gemacht aber nicht mit $ExcelPfad! Generell solltest du darauf verzichten in Funktionen globale Variablen zu deklarieren, da das zu Inkonsistenzen führen kann und du dann später sehr viel Zeit aufwenden musst diese zu lösen.

    Wenn du keine weiteren GUIs hast empfiehlt es sich lieber die GUI nicht in eine Funktion zu packen (ich nehme mal an du hast es von der Hilfe her so übernommen, dort werden nämlich alle GUI-Beispiele in eine Example()-Funktion gepackt).

    An deiner Codeformatierung solltest du auch noch ein wenig arbeiten, du hast alles eingerückt was zusammengehört (sehr schöne Idee für GUICtrlSetState und GUICtrlSetOnEvent...) aber es steht alles so nah beinander, dass man sich auf die schnelle verlesen könnte.

    Deine GUI bleibt auch nur wenn überhaupt 15 Sekunden offen ohne Buttons anklicken zu können (wenn sie sich überhaupt öffnen würde). Zudem solltest du den OnEventModus schon vor der GUI-Deklaration setzen und nicht danach, da es dort auch vielleicht zu Problemen kommen könnte.

    Variablen die du übrigens im globalen Scope deklarierst (also außerhalb von Funktionen) sind immer Global, egal ob du sie dort mit Local oder Dim erzeugst.

    Das Script habe ich mal ein wenig korrigiert, deine Formatierung habe ich weitestgehend gelassen aber die Struktur ein wenig verändert.