Non-accessible variable, was mache ich falsch?

06/22/2016 06:30 O-Drop#1
Moin Leute,

zu Testzwecken habe ich dieses Script welches nicht so funktioniert wie ich das möchte. Was mache ich falsch?
$p1&$p2&$p3 Gibt 3 mal False zurück, was an sich kein Problem ist, wurde halt nichts gefunden. Hab ein bischen was entfernt. $handle ist gesetzt

Console:

Script:
06/22/2016 10:16 Devsome#2
So wie ich das sehe, müsstest du deine $p variablen so definieren.
Code:
global $p1[2] =[0,0]
global $p2[2] =[0,0]
global $p3[2] =[0,0]
Das Leerzeichen müsste weg, da AutoIt sonst nicht erkennt, dass die $p1 variable ein Array ist. (Nicht getestet)
06/22/2016 11:18 O-Drop#3
Wars leider nicht. Hatte aber auch schon den Gedanken das es mit Array erkennen zusammenhängt.
06/22/2016 11:26 warfley#4
Dumme Frage, warum and if und nicht nur and?
06/22/2016 12:11 alpines#5
Quote:
Originally Posted by Devsome View Post
So wie ich das sehe, müsstest du deine $p variablen so definieren.
Code:
global $p1[2] =[0,0]
global $p2[2] =[0,0]
global $p3[2] =[0,0]
Das Leerzeichen müsste weg, da AutoIt sonst nicht erkennt, dass die $p1 variable ein Array ist. (Nicht getestet)
AutoIt erkennt die Leerzeichen zwischen dem Variablenbezeichner und der Dimensionsgröße, das ist das Problem nicht.

Das Problem ist das er in der If-Abfrage unten "and if" schreibt obwohl er die Bedingungen nur mit "and" verketten sollte.
06/22/2016 12:20 Devsome#6
War irgendwie auf dem Schlauch.
Sprich könnte man es so machen:

Code:
; Methode 1

If $p1[0] = $p2[0]+10 Then
  If $p1[1] = $p2[1]-8 Then
    If $p2[0] = $p3[0]-16 Then
      If $p2[1] = $p3[1]+5 Then
        If $p3[0] = $p1[0]+6 Then
          If $p3[1] = $p1[1]+3 Then
            MsgBox (0,"","")
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndIf

; Methode 2

If ($p1[0] = $p2[0]+10 And $p1[1] = $p2[1]-8 And $p2[0] = $p3[0]-16) & _
  ($p2[1] = $p3[1]+5 And $p3[0] = $p1[0]+6 And $p3[1] = $p1[1]+3) Then
    MsgBox (0,"","")
EndIf
06/22/2016 12:32 alpines#7
Quote:
Originally Posted by Devsome View Post
War irgendwie auf dem Schlauch.
Sprich könnte man es so machen:

Code:
; Methode 1

If $p1[0] = $p2[0]+10 Then
  If $p1[1] = $p2[1]-8 Then
    If $p2[0] = $p3[0]-16 Then
      If $p2[1] = $p3[1]+5 Then
        If $p3[0] = $p1[0]+6 Then
          If $p3[1] = $p1[1]+3 Then
            MsgBox (0,"","")
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndIf

; Methode 2

If ($p1[0] = $p2[0]+10 And $p1[1] = $p2[1]-8 And $p2[0] = $p3[0]-16) & _
  ($p2[1] = $p3[1]+5 And $p3[0] = $p1[0]+6 And $p3[1] = $p1[1]+3) Then
    MsgBox (0,"","")
EndIf
Lieber nicht, das ist kein guter Stil. Ich hätte alles relevante in ein Array gesteckt, es iteriert und nur eine Sache verglichen. Sollte einer der If-Abfragen nicht true sein dann setz ich einen Flag und kann schon ExitLoopen. Das sieht nicht nur sauberer aus sondern spart auch Platz.
06/23/2016 00:57 O-Drop#8
Funktioniert beides nicht, Ich habe extra schon die Arrays 0 gesetzt und sie nicht direkt mit NearestPixel iniziert. funktioniert auch nicht weil eh im zweifel False gesetzt wird. Am "And if" statt "and" liegts nicht.

Kann es sein das mit "False" nicht gerechnet werden kann, da ein String? Obwohl das eine andere Fehlermeldung verursachen müsste oder?

@ alpines
Den Trick hab ich mir schon vom letztem Thread mit dir mitgenommen :)
Schön wirds später, für den Anfang und beim Coden ist es für mich verständlicher. Mit der Zeit schaffe ich das bestimmt auch direkt. :D

"scriptpfad" : ==> Subscript used on non-accessible variable.:
If $p1[0] = $p2[0]+10 Then
If $p1^ ERROR
Code:
; Methode 1

If $p1[0] = $p2[0]+10 Then
  If $p1[1] = $p2[1]-8 Then
    If $p2[0] = $p3[0]-16 Then
      If $p2[1] = $p3[1]+5 Then
        If $p3[0] = $p1[0]+6 Then
          If $p3[1] = $p1[1]+3 Then
            MsgBox (0,"","")
          EndIf
        EndIf
      EndIf
    EndIf
  EndIf
EndIf
"Scriptpfad" : ==> Subscript used on non-accessible variable.:
If ($p1[0] = $p2[0]+10 And $p1[1] = $p2[1]-8 And $p2[0] = $p3[0]-16) & ($p2[1] = $p3[1]+5 And $p3[0] = $p1[0]+6 And $p3[1] = $p1[1]+3) Then
If ($p1^ ERROR


Code:
; Methode 2

If ($p1[0] = $p2[0]+10 And $p1[1] = $p2[1]-8 And $p2[0] = $p3[0]-16) & _
  ($p2[1] = $p3[1]+5 And $p3[0] = $p1[0]+6 And $p3[1] = $p1[1]+3) Then
    MsgBox (0,"","")
EndIf
für erweiterte Analyse mal den gesamten Code:
06/23/2016 02:05 alpines#9
Der Fehler kommt 100%ig von der FFNearestPixel Funktion, schau mal nach was die returnt wenn er nichts finden kann.
06/23/2016 08:33 O-Drop#10
Zu dem Zweck hatte ich mir p123 in der Msgbox anzeigen lassen. Drei mal "False".

Hier die Func:

"Return Values: If unsuccessful, returns 0 and sets @Error."
"False" = "0"? Oder wird False zurückgegeben @ERROR?
06/23/2016 11:44 alpines#11
Ja, drei mal false bedeutet er hat drei mal null returnt, die schreibt er in die $p-Variablen rein und somit hast du kein Array mehr.

Entweder du fängst den Error mit
Code:
$p = FFNearestPixel()
If UBound($p) Then ;erfolgreich
ab oder mit
Code:
$p = FFNearesPixel()
If Not @error Then ;erfolgreich
06/23/2016 12:45 O-Drop#12
Funktioniert! Vielen Dank nochmal. :)
06/27/2016 09:36 Lawliet#13
#closed