Funktionen Variablen Organisation

  • Hallo,

    muß jetzt doch mal ne Frage loswerden.
    Ich möchte gerne meinen komplexen Code neu organisieren, aufbauen, verbessern.
    Dazu will ich einfach Code-Teile in Funktionen ablegen.
    Aber jedesmal stolpere ich dabei über Fehlermeldungen...

    Vielleicht mal ein ganz einfaches Beispiel
    Ich möchte den Inhalt einer Gui als Funktion haben

    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    _MainGui(); meine Gui sollte hier aufgerufen werden

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $delete
    Case $Create
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _MainGui()
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 440, 520, 212)
    $Edit1 = GUICtrlCreateEdit("", 124, 28, 105, 57)
    GUICtrlSetData(-1, "Edit1")
    $delete = GUICtrlCreateButton("delete", 32, 108, 75, 25)
    $Create = GUICtrlCreateButton("Create", 128, 108, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 52, 160, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 52, 184, 97, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]

    Error: possibly used before declaration.
    ..habe ich soweit verstanden, aber die Frage zum Handling:

    Wie macht Ihr das? Müssen die Variablen alle nun herauskopiert und als Global deklariert werden?
    Oder gibt es da eine elegantere Methode ohne den Code nochmals kpl. zu bearbeiten?

    D.h. der nächste Abschnitt enthält nochmals weitere Variablen
    wie kann man das irgendwie sinnvoll lösen?

    Ich dachte Abschitt ausschneiden und in Funktion kopieren, Funktion aufrufen fertig!

    Gibt es da vielleicht einen Befehl, z.B. alle Variablen des Scriptes sollen Global behandelt werden.

    Grüße
    Ilse ;)

  • Hi,
    da AutoIt auch ein bichen Kapseln kann :D, musst du die Variablen, die du in der Funktion erzeugst, Global Definieren um sie auch außerhalb der Funktion benutzen zu können.

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $delete,$Create
    _MainGui(); meine Gui sollte hier aufgerufen werden

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    [/autoit] [autoit][/autoit] [autoit]

    Case $delete
    Case $Create
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _MainGui()
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 615, 440, 520, 212)
    $Edit1 = GUICtrlCreateEdit("", 124, 28, 105, 57)
    GUICtrlSetData(-1, "Edit1")
    $delete = GUICtrlCreateButton("delete", 32, 108, 75, 25)
    $Create = GUICtrlCreateButton("Create", 128, 108, 75, 25)
    $Checkbox1 = GUICtrlCreateCheckbox("Checkbox1", 52, 160, 97, 17)
    $Checkbox2 = GUICtrlCreateCheckbox("Checkbox2", 52, 184, 97, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit]
  • Hallo Sprenger120,

    ja, das wußte ich.
    Man muß also alles von Hand machen.

    Stell dir das ganze mal so vor:

    Es gibt ein ziemlich großes Script (sehr unübersichtlich)
    Das möchte ich im Grunde neu aufbauen.
    Gibt es da keine UDF die das Script
    nach Variablen prüft, diese dann Global an den Anfang setzt.
    Sodaß man dann problemlos Funktionen machen kann?

    Würde das generell gehen?

    Ilse ;)

  • Das möchte ich im Grunde neu aufbauen.


    Wenn du es neu aufbauen willst, dann musst du das selbst machen. Es gibt kein Skript, das dir diese Arbeit abnimmt.

  • Hi,
    es geht leider nicht anders, außer du verlegst die GetMsg While in die Funktion mit rein, dann brauchst du nichts zu Globalisieren.


    Naja auch nicht ganz richtig, denn neben der GUI gibt es ja sicher noch andere Funktionen die auf Controls der GUI zugreifen können sollen. Will man also die GUI Variablen nicht global deklarieren, so muss man jeder Funktion alle Controlids die sie benötigt übergeben, was vermutlich weitaus aufwendiger wäre als die Variablen global zu deklarieren.

  • @ alle

    nur mal so ein Gedanke!

    Wenn ich den Code z.B. mit regEx bearbeiten würde.
    Alle Variablen in ein Array übergeben
    Global $Var1, Var2....
    und ich würde das dann an den Anfang setzen

    könnte das klappen?