Kleines Problem bei Funktionsaufruf

  • Hey Leute,
    ich hab leider gerade ein Problem mit einer Funktion, die einen Optionalen Parameter haben soll.
    ich möchte sie über eine Eventfunktion (also GUICtrlSetOnEvent) aufrufen.
    Gleichzeitig soll es aber auch möglich sein, sie von einer anderen Funktion aus mit dem parameter aufrufen. Hierzu hab ich mal ein kleines Beispielscript gemacht (unten), der relevante teil ist aber in Zeile 12 und 13:

    [autoit]

    Func _ButtonPressed($i_ID = -1)
    If $i_ID = -1 Then $i_ID = @GUI_CtrlId

    [/autoit]

    hier kommt als Fehler immer "Variable used without being declared" (bei zeile 13)
    eigentlich müsste aber doch im Funktionsaufruf die Variable deklariert werden oder?

    Ich bitte um schnelle Hilfe
    mit freundlichen Grüßen

    Beep

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    GUICreate("", 700)
    GUISetOnEvent(-3, "_exit")
    $hbutton1 = GUICtrlCreateButton("Button, der sich rot färben soll", 100, 100, 200, 200)
    GUICtrlSetOnEvent(-1, "_ButtonPressed");Event setzen
    $hbutton2 = GUICtrlCreateButton("Button, der sich rot färben soll", 400, 100, 200, 200)
    GUICtrlSetOnEvent(-1, "_ButtonPressed");Event setzen
    GUISetState()
    HotKeySet("{F1}", "_Funktion_die_die_Andere_Mit_Parameter_Aufruft")

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

    Func _ButtonPressed($i_ID = -1)
    If $i_ID = -1 Then $i_ID = @GUI_CtrlId
    GUICtrlSetBkColor($i_ID, 0xff0000)
    ;...
    EndFunc

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

    Func _Funktion_die_die_Andere_Mit_Parameter_Aufruft()
    ;...
    _ButtonPressed($hbutton1)
    EndFunc

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

    Func _exit()
    Exit
    EndFunc

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

    While True
    Sleep(10)
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Beep (1000 1000) (20. Mai 2012 um 15:25) aus folgendem Grund: halbwegs gelöst :D ...

  • du musst sie oben trotzdem noch mit dim,local oder global deklarieren

    ist sowieso "ordenlicher" wenn man Variablen extra Deklariert, obs nun in AutoIt nötig ist, oder nicht

    MFG inventor

    wenn's weitere Fragen gibt -> PN
    wenn da keine Antwort kommt, überdenk deine Frage noch mal

  • ersmal danke für die (sehr) schnellen Antworten :D

    inventor
    leider kommt wenn ich die Variable danach mit dim / local deklariere (also in zeile 13) der fehler "$i_ID already declared as parameter", also wurde sie schon irgendwie deklariert

    BugFix
    dass man mit einer eventfunktion keine Parameter haben kannn ist mir klar, desshlab wollte ich ja den parameter optional machen, damit ich ihn bei der Eventfunktion weglassen kann und trotsdem bei der anderen angeben kann. Oder geht das auch nicht? ?( (wäre schade...)

    Beep

    • Offizieller Beitrag

    Das kannst du so lösen:

    [autoit]

    $bt1= GUICtrlCreateButton(..)
    GUICtrlSetOnEvent(-1, 'EventHandler')
    $bt2= GUICtrlCreateButton(..)
    GUICtrlSetOnEvent(-1, 'EventHandler')
    $bt3= GUICtrlCreateButton(..)
    GUICtrlSetOnEvent(-1, 'EventHandler')
    $bt4= GUICtrlCreateButton(..)
    GUICtrlSetOnEvent(-1, 'EventHandler')

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

    ;......

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

    Func EventHandler()
    Switch @GUI_CtrlId
    Case $bt1
    ;..
    Case $bt2
    ;..
    Case $bt3
    ;..
    Case $bt4
    ;..
    EndSwitch
    EndFunc

    [/autoit]
  • Das löst leider noch nicht das problem, dass ich ne funktion über event (natürlich ohne Parameter) und über einen "normalen" Funktionsaufruf mit Parameter aufrufen will...
    (Außerdem gibt es noch das Problemchen, dass es sich in dem "echten" Script eher um 24-150 oder mehr buttons handelt :D )

    Danke trotzdem, aber ich werde es jetzt wohl so machen müssen:

    [autoit]

    GUICtrlSetOnEvent(-1, "_ButtonPressed_Event")

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

    Func _ButtonPressed_Event();oder halt EventHandler :D
    _ButtonPressed(@GUI_CtrlId)
    EndFunc

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

    Func _ButtonPressed($i_ID)
    GUICtrlSetBkColor($i_ID, 0xff0000)
    ;...
    EndFunc

    [/autoit]

    wenn ich dann die func direkt aufrufen will (also mit Parametern), kann ich ja einfach _ButtonPressed($i_ID) aufrufen

    naja, dann hab ich halt ne func mehr im script...

    Mfg
    Beep

  • jaja ich weiß (obwohl, ... 150 einzelne globale variabeln verschnellern das script bestimmt gaaanz doll ;) )
    hab auch ein Array (mit 4 dimensionen :P) dabei verwendet....
    insofern ginge es schon, die ID in vielen forschleifen inneinander abzufragen, was ich an anderen stellen im script auch mache, aber es würde das problem halt nicht lösen, da ich die funktion nicht auch aufrufen kann, und dabei einen bestimmten button angeben kann...
    Aber das löse ich ja jetzt mit der 2. func...