Probleme mit variablen

  • Hi leute ich brauch mal wieder euren rat

    Ich wollte mal fragen wie ich es schaffen kann dass eine Variable die in einer Switch while for oder func declariert wiert nach dem ende der Schleife noch immer verfügbar ist???

    Hab schon länger danach gesucht und rausgefunden das das mit global $Var funktionieren soll tuts aber nich

    bitte helft mir

  • Script?
    Aber naja:

    [autoit]


    For $x=0 to 5
    $var=5
    Next
    ; $var ist im ganzen Script verfügbar

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

    Func bla()
    For $x=0 to 5
    $var=5
    Next
    EndFunc
    ; $var ist nur in der Funktion verfügbar

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

    Global $var
    Func bla()
    For $x=0 to 5
    $var=5
    Next
    EndFunc
    ; $var ist im gesamten Script verfügbar

    [/autoit]
  • Spoiler anzeigen
    [autoit]

    Global $NUMMER=0...Func SetColor()
    AutoItSetOption("MouseCoordMode", 1)
    $X_COORD = MouseGetPos(0)
    $FARBE="ROT"
    Switch $X_COORD
    Case $X_COORD<-352 Or $X_COORD>352
    Sleep(500)
    Case -352 To -260
    $NUMMER = 0
    Case -250 To -158
    $NUMMER = 1
    Case -148 To 56
    $NUMMER = 2
    Case -46 To 46
    $NUMMER = 3
    Case 56 To 148
    $NUMMER = 4
    Case 158 To 250
    $NUMMER = 5
    Case 260 To 352
    $NUMMER = 6
    EndSwitch

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

    If $Zeile[$NUMMER]= -1 Then
    MsgBox(16,"ERROR","blablabla")
    $Zeile[$NUMMER]=0
    Else
    _SetImagefromResource($Spielstein[$NUMMER][$Zeile[$NUMMER]],$FARBE, @ScriptDir & "\PIC.dll", $RT_RCDATA)
    $Zeile[$NUMMER]-=1
    EndIf

    [/autoit]

    so dass is mein script, leider ändert sich der wert in der switchschleife nicht für das gesamte script warum weiß ich nicht

  • ich weiß dass er es müsste tut er aber leider nicht, ich hab mal ne msgbox drangehängt und dort den wert getestet Ergebnis $NUMMER ist immer 0

    ps ja die case abfragen stimmen 100%ig soweit war ich auch schon, nur selbst wenn nicht müsste sich der wert trotzdem ändern oder

  • Statt der Variable einen Wert zu geben, tu mal eine MsgBox dran, in der der Wert steht. Wenn die richtige MsgBox erscheint, stimmen die Case Abfragen, sonst nicht.

  • ich weiß dass er es müsste tut er aber leider nicht, ich hab mal ne msgbox drangehängt und dort den wert getestet Ergebnis $NUMMER ist immer 0

    ps ja die case abfragen stimmen 100%ig soweit war ich auch schon, nur selbst wenn nicht müsste sich der wert trotzdem ändern oder


    hab ich doch falls dus nicht gemerkt hast s.o.

  • ps du weißt aber schon, dass das prog nur die position der maus mit zwei werten vergleicht, was soll bitte daran nichtb stimmen???

  • ich verstehe nicht was der unterscghied sein sollte der wert müsste so doch überall verfügbar sein (GLOBAL) s.o. allerdings ist er selbst innerhalb der funktion nicht verfügbar

  • Du sollst damit einfach nur prüfen, ob die Case Abfrage überhaupt funktioniert -.-
    Aber der Feher liegt zu 100% bei dir, bei mir funktioniert das hier nämlich:

    Spoiler anzeigen
    [autoit]

    Global $NUMMER=0
    SetColor()
    Func SetColor()
    Opt("MouseCoordMode", 1)
    $X_COORD = MouseGetPos(0)
    $FARBE="ROT"
    Switch $X_COORD
    Case $X_COORD<-352 Or $X_COORD>352
    Sleep(500)
    Case -352 To -260
    $NUMMER = 0
    Case -250 To -158
    $NUMMER = 1
    Case -148 To 56
    $NUMMER = 2
    Case -46 To 46
    $NUMMER = 3
    Case 56 To 148
    $NUMMER = 4
    Case 158 To 250
    $NUMMER = 5
    Case 260 To 352
    $NUMMER = 6
    EndSwitch

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

    MsgBox(0, "", $NUMMER)
    EndFunc

    [/autoit]
  • ja habs jetzt auch hingekriegt, der fehler war, das ich die vollversion von Scite hatte und das script damit nicht läuft, aber noch ne andere Frage warum gehjt das nicht

    Spoiler anzeigen
    [autoit]

    DIM array mit VAR[7][6]...$Zahl=5$ID[0]=1$ID[1]=2$ID[2]=3$ID[3]=4$ID[4]=5$ID[5]=6Var[$Zahl][$ID[Zahl]]warum geht eine Arrayzuweisung(ID[$Zahl] nicht aber eine Variable in dem Array Schon($Zahl)

    [/autoit]
    Spoiler anzeigen
    [autoit]

    FehlercodeC:\Users\Alex\Desktop\....au3 (113) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    _SetImagefromResource($Spielstein[$NUMMER][$Zeile[$NUMMER]],$FARBE, @ScriptDir & "\PIC.dll", $RT_RCDATA)
    _SetImagefromResource(^ ERROR

    [/autoit]
    [autoit][/autoit]
  • 1. Es kann unmöglich daran liegen, dass du die Vollversion von SciTE hast, denn ich ahb diese ebenfalls und die Version von SciTE hat NICHTS mti dem Code zu tun.
    2. Bitte poste das mal vernünftig und nicht alles in nur 3 Reihen.

  • Spoiler anzeigen
    [autoit]

    #include
    #include
    #include
    #include
    #include
    #include
    Dim $Zeile[7]
    $Zeile[0] = 6
    $Zeile[1] = 6
    $Zeile[2] = 6
    $Zeile[3] = 6
    $Zeile[4] = 6
    $Zeile[5] = 6
    $Zeile[6] = 6

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

    Global $NUMMER = 0

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

    Opt("GUIOnEventMode", 1)
    GUICreate("4 Gewinnt", 724, 620, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN,"SetColor")
    GUISetBkColor(0xFFFFFF)
    GUICtrlCreatePic("", 0, 0)
    _SetImagefromResource(-1, "SPIELFELD", @ScriptDir & "\PIC.dll", $RT_RCDATA)
    DIM $Spielstein[6][7]

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

    ;1. Reihe
    $Spielstein[0][0]=GUICtrlCreatePic("",20,18,66,66)
    $Spielstein[0][1]=GUICtrlCreatePic("",20,121,66,66)
    $Spielstein[0][2]=GUICtrlCreatePic("",20,224,66,66)
    $Spielstein[0][3]=GUICtrlCreatePic("",20,327,66,66)
    $Spielstein[0][4]=GUICtrlCreatePic("",20,430,66,66)
    $Spielstein[0][5]=GUICtrlCreatePic("",20,533,66,66)
    $Spielstein[0][6]=GUICtrlCreatePic("",20,636,66,66)

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

    ;2. Reihe
    $Spielstein[1][0]=GUICtrlCreatePic("",123,18,66,66)
    $Spielstein[1][1]=GUICtrlCreatePic("",123,121,66,66)
    $Spielstein[1][2]=GUICtrlCreatePic("",123,224,66,66)
    $Spielstein[1][3]=GUICtrlCreatePic("",123,327,66,66)
    $Spielstein[1][4]=GUICtrlCreatePic("",123,430,66,66)
    $Spielstein[1][5]=GUICtrlCreatePic("",123,533,66,66)
    $Spielstein[1][6]=GUICtrlCreatePic("",123,636,66,66)

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

    ;3. Reihe
    $Spielstein[2][0]=GUICtrlCreatePic("",226,18,66,66)
    $Spielstein[2][1]=GUICtrlCreatePic("",226,121,66,66)
    $Spielstein[2][2]=GUICtrlCreatePic("",226,224,66,66)
    $Spielstein[2][3]=GUICtrlCreatePic("",226,327,66,66)
    $Spielstein[2][4]=GUICtrlCreatePic("",226,430,66,66)
    $Spielstein[2][5]=GUICtrlCreatePic("",226,533,66,66)
    $Spielstein[2][6]=GUICtrlCreatePic("",226,636,66,66)

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

    ;4. Reihe
    $Spielstein[3][0]=GUICtrlCreatePic("",329,18,66,66)
    $Spielstein[3][1]=GUICtrlCreatePic("",329,121,66,66)
    $Spielstein[3][2]=GUICtrlCreatePic("",329,224,66,66)
    $Spielstein[3][3]=GUICtrlCreatePic("",329,327,66,66)
    $Spielstein[3][4]=GUICtrlCreatePic("",329,430,66,66)
    $Spielstein[3][5]=GUICtrlCreatePic("",329,533,66,66)
    $Spielstein[3][6]=GUICtrlCreatePic("",329,636,66,66)

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

    ;5. Reihe
    $Spielstein[4][0]=GUICtrlCreatePic("",432,18,66,66)
    $Spielstein[4][1]=GUICtrlCreatePic("",432,121,66,66)
    $Spielstein[4][2]=GUICtrlCreatePic("",432,224,66,66)
    $Spielstein[4][3]=GUICtrlCreatePic("",432,327,66,66)
    $Spielstein[4][4]=GUICtrlCreatePic("",432,430,66,66)
    $Spielstein[4][5]=GUICtrlCreatePic("",432,533,66,66)
    $Spielstein[4][6]=GUICtrlCreatePic("",432,636,66,66)

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

    ;6. Reihe
    $Spielstein[5][0]=GUICtrlCreatePic("",535,18,66,66)
    $Spielstein[5][1]=GUICtrlCreatePic("",535,121,66,66)
    $Spielstein[5][2]=GUICtrlCreatePic("",535,224,66,66)
    $Spielstein[5][3]=GUICtrlCreatePic("",535,327,66,66)
    $Spielstein[5][4]=GUICtrlCreatePic("",535,430,66,66)
    $Spielstein[5][5]=GUICtrlCreatePic("",535,533,66,66)
    $Spielstein[5][6]=GUICtrlCreatePic("",535,636,66,66)

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

    _Fade("4 Gewinnt", "", 3, 1)

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

    While 1
    Sleep(100)
    WEnd

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

    Func SetColor()
    $X_COORD = MouseGetPos(0)
    $FARBE="ROT"
    Switch $X_COORD
    Case $X_COORD<-352 Or $X_COORD>352
    Sleep(500)
    Case -352 To -260
    $NUMMER = 0
    Case -250 To -158
    $NUMMER = 1
    Case -148 To -56
    $NUMMER = 2
    Case -46 To 46
    $NUMMER = 3
    Case 56 To 148
    $NUMMER = 4
    Case 158 To 250
    $NUMMER = 5
    Case 260 To 352
    $NUMMER = 6
    EndSwitch
    MsgBox(0,"","$Nummer ist: "&$NUMMER)
    If $Zeile[$NUMMER]= -1 Then
    MsgBox(16,"ERROR","Die Spalte ist voll es kann kein weiterer Spielstein gesetzt werden")
    $Zeile[$NUMMER]=0
    Else
    _SetImagefromResource($Spielstein[$NUMMER][$Zeile[$NUMMER]],$FARBE, @ScriptDir & "\PIC.dll", $RT_RCDATA)
    $Zeile[$NUMMER]-=1
    EndIf

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

    EndFunc ;==>SetColor

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

    Func Close()
    _Fade("4 Gewinnt", "", 3, 2)
    Exit
    EndFunc ;==>Close

    [/autoit]


    dass is mein script aber es setzt den spielstein nicht immer und wenn dann ist die position meist falsch

  • und jetzt was is daran falsch bei mir geht das nich aso ihr braucht sicher noch die PIC.dll

    2 Mal editiert, zuletzt von alexanderschill (23. Juli 2010 um 20:05)

  • wie oben schon vermutet, scheinen die Case-Abfragen falsch zu sein-sie werden nie angesprochen.
    Siehe hier:

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <DllInclude.au3>
    #include <Fade.au3>
    #include <GuiConstants.au3>

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

    Dim $Zeile[7]
    $Zeile[0] = 6
    $Zeile[1] = 6
    $Zeile[2] = 6
    $Zeile[3] = 6
    $Zeile[4] = 6
    $Zeile[5] = 6
    $Zeile[6] = 6

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

    Global $NUMMER = 0

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

    Opt("GUIOnEventMode", 1)
    GUICreate("4 Gewinnt", 724, 620, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN,"SetColor")
    GUISetBkColor(0xFFFFFF)
    GUICtrlCreatePic("", 0, 0)
    _SetImagefromResource(-1, "SPIELFELD", @ScriptDir & "\PIC.dll", $RT_RCDATA)
    DIM $Spielstein[6][7]

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

    ;1. Reihe
    $Spielstein[0][0]=GUICtrlCreatePic("",20,18,66,66)
    $Spielstein[0][1]=GUICtrlCreatePic("",20,121,66,66)
    $Spielstein[0][2]=GUICtrlCreatePic("",20,224,66,66)
    $Spielstein[0][3]=GUICtrlCreatePic("",20,327,66,66)
    $Spielstein[0][4]=GUICtrlCreatePic("",20,430,66,66)
    $Spielstein[0][5]=GUICtrlCreatePic("",20,533,66,66)
    $Spielstein[0][6]=GUICtrlCreatePic("",20,636,66,66)

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

    ;2. Reihe
    $Spielstein[1][0]=GUICtrlCreatePic("",123,18,66,66)
    $Spielstein[1][1]=GUICtrlCreatePic("",123,121,66,66)
    $Spielstein[1][2]=GUICtrlCreatePic("",123,224,66,66)
    $Spielstein[1][3]=GUICtrlCreatePic("",123,327,66,66)
    $Spielstein[1][4]=GUICtrlCreatePic("",123,430,66,66)
    $Spielstein[1][5]=GUICtrlCreatePic("",123,533,66,66)
    $Spielstein[1][6]=GUICtrlCreatePic("",123,636,66,66)

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

    ;3. Reihe
    $Spielstein[2][0]=GUICtrlCreatePic("",226,18,66,66)
    $Spielstein[2][1]=GUICtrlCreatePic("",226,121,66,66)
    $Spielstein[2][2]=GUICtrlCreatePic("",226,224,66,66)
    $Spielstein[2][3]=GUICtrlCreatePic("",226,327,66,66)
    $Spielstein[2][4]=GUICtrlCreatePic("",226,430,66,66)
    $Spielstein[2][5]=GUICtrlCreatePic("",226,533,66,66)
    $Spielstein[2][6]=GUICtrlCreatePic("",226,636,66,66)

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

    ;4. Reihe
    $Spielstein[3][0]=GUICtrlCreatePic("",329,18,66,66)
    $Spielstein[3][1]=GUICtrlCreatePic("",329,121,66,66)
    $Spielstein[3][2]=GUICtrlCreatePic("",329,224,66,66)
    $Spielstein[3][3]=GUICtrlCreatePic("",329,327,66,66)
    $Spielstein[3][4]=GUICtrlCreatePic("",329,430,66,66)
    $Spielstein[3][5]=GUICtrlCreatePic("",329,533,66,66)
    $Spielstein[3][6]=GUICtrlCreatePic("",329,636,66,66)

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

    ;5. Reihe
    $Spielstein[4][0]=GUICtrlCreatePic("",432,18,66,66)
    $Spielstein[4][1]=GUICtrlCreatePic("",432,121,66,66)
    $Spielstein[4][2]=GUICtrlCreatePic("",432,224,66,66)
    $Spielstein[4][3]=GUICtrlCreatePic("",432,327,66,66)
    $Spielstein[4][4]=GUICtrlCreatePic("",432,430,66,66)
    $Spielstein[4][5]=GUICtrlCreatePic("",432,533,66,66)
    $Spielstein[4][6]=GUICtrlCreatePic("",432,636,66,66)

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

    ;6. Reihe
    $Spielstein[5][0]=GUICtrlCreatePic("",535,18,66,66)
    $Spielstein[5][1]=GUICtrlCreatePic("",535,121,66,66)
    $Spielstein[5][2]=GUICtrlCreatePic("",535,224,66,66)
    $Spielstein[5][3]=GUICtrlCreatePic("",535,327,66,66)
    $Spielstein[5][4]=GUICtrlCreatePic("",535,430,66,66)
    $Spielstein[5][5]=GUICtrlCreatePic("",535,533,66,66)
    $Spielstein[5][6]=GUICtrlCreatePic("",535,636,66,66)

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

    _Fade("4 Gewinnt", "", 3, 1)

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

    While 1
    Sleep(100)
    WEnd

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

    Func SetColor()
    $X_COORD = MouseGetPos(0)
    $FARBE="ROT"
    Switch $X_COORD
    Case $X_COORD<-352 Or $X_COORD>352
    Sleep(500)
    Case -352 To -260
    MsgBox(0, "hi", "tut")
    $NUMMER = 0
    Case -250 To -158
    MsgBox(0, "hi", "tut")
    $NUMMER = 1
    Case -148 To -56
    MsgBox(0, "hi", "tut")
    $NUMMER = 2
    Case -46 To 46
    MsgBox(0, "hi", "tut")
    $NUMMER = 3
    Case 56 To 148
    MsgBox(0, "hi", "tut")
    $NUMMER = 4
    Case 158 To 250
    MsgBox(0, "hi", "tut")
    $NUMMER = 5
    Case 260 To 352
    MsgBox(0, "hi", "tut")
    $NUMMER = 6
    EndSwitch
    MsgBox(0,"","$Nummer ist: "&$NUMMER)
    If $Zeile[$NUMMER]= -1 Then
    MsgBox(16,"ERROR","Die Spalte ist voll es kann kein weiterer Spielstein gesetzt werden")
    $Zeile[$NUMMER]=0
    Else
    _SetImagefromResource($Spielstein[$NUMMER][$Zeile[$NUMMER]],$FARBE, @ScriptDir & "\PIC.dll", $RT_RCDATA)
    $Zeile[$NUMMER]-=1
    EndIf

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

    EndFunc ;==>SetColor

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

    Func Close()
    _Fade("4 Gewinnt", "", 3, 2)
    Exit
    EndFunc ;==>Close

    [/autoit]

    Keine einzige meiner MsgBoxen (die "MsgBox(0, "hi", "tut")") wird angezeigt.
    Dass bedeutet, dass das Script nie zu dem Sector gelangt, bei dem der Varialbe ein neuer Wert zugewiesen wird