Subscript used with non-array variable

  • Hallo,

    ich versuche zur Zeit mir AutoIT anzueignen (Da ich bereits ähnliche Programmiersprachen beherrsche geht es etwas leichter).

    Nun hatte ich in meinem Testprogramm einen Fehler. Ich habe ihn letzten Endes auf eine Funktion begrenzt und in der Funktion sogar den Teil gefunden, der den Fehler verursacht. Sehr geholfen hat mir dabei auch Andy mit seinem tollen Post.

    Aber nun komme ich nicht mehr weiter.
    Der Code-Auszug:

    [autoit]


    $xwert=Number($coords[0])
    $ywert=Number($coords[1])
    $fund=0
    $coords=PixelSearch(0,0,1024,768,"14072361",1)
    if not @error=1 Then
    MouseMove($xwert,$ywert)
    MouseClick("left",$xwert,$ywert)
    $fund=1
    EndIf

    [/autoit]

    Die Variablen sind deklariert durch:

    [autoit]


    Dim $coords[2]
    Dim $xwert, $ywert

    [/autoit]

    Meine Gedanke war, dass vlt. was mit der $coords net stimmt, aber da hab ich nichts gefunden.

    Weiß vielleicht jemand, woran das liegt?

    Danke im Voraus
    mfg Mokuba01

  • $coords=PixelSearch(0,0,1024,768,"14072361",1)
    Diese Zeile muss vor allem anderen stehen und muss auch nicht extra durch dim deklariert werden!

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Mein Deklarierungsteil sieht jetzt so aus:

    [autoit]

    Dim $xwert, $ywert

    [/autoit]

    Und in der Funktion verwende ich:

    [autoit]


    $coords=PixelSearch(0,0,1024,768,"14072361",1)
    $xwert=Number($coords[0])
    $ywert=Number($coords[1])
    $fund=0
    if not @error=1 Then
    MouseMove($xwert,$ywert)
    MouseClick("left",$xwert,$ywert)
    $fund=1
    EndIf

    [/autoit]

    Aber leider kommt immer noch die selbe Fehlermeldung an der selben Stelle.
    Das ist doch eig. die Umsetzung, wie du mir geraten hast, oder?

  • [autoit]

    $coords=PixelSearch(0,0,1024,768,"14072361",1)
    If IsArray($coords) Then
    $xwert=Number($coords[0])
    $ywert=Number($coords[1])
    $fund=0
    ;if not @error=1 Then ;diese Zeile ist überflüssig!
    MouseMove($xwert,$ywert)
    MouseClick("left",$xwert,$ywert)
    $fund=1
    EndIf

    [/autoit]

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • Guten Mittag,

    Danke, nun klappt es tatsächlich. Könntest du mir bitte meinen Fehler erklären, damit ich ihn nicht nochmal mache?

    Also du hast die Errorabfrage raus genommen, weil sie sinnlose ist, Gut. Aber das kann ja nicht den Fehler verursacht haben. Außerdem prüfst du ob das Array Inhalt hat (das macht doch die Funktion, oder?). Aber du veränderst ja keine Werte.

    Daher versteh ich nicht ganz, was ich falsch gemacht hab.

    Könntest du es mir bitte erklären

    Danke im Voraus
    mfg Mokuba01

  • Naja im Prinzip ganz simpel:
    PixelSearch gibt nicht immer ein Array zurück, nämlich dann wenn die Funktion den Pixel nicht findet.
    Das war eigendlich schon der ganze Grund du hast dann zwar die Funktion nach oben genommen aber die If abfrage nicht.
    Du kannst anstatt IsArray auch @error nehmen das ist völlig egal dein Script muss nur wissen wann ein Array da ist und wann nicht.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D