Labels in zufälliger X-Position erstellen Probleme

  • Hallo,

    ich schreibe gerade einen Script, mit der man Feedback senden kann. Bin gerade dabei, einen Captcha dafür zu programmieren, doch irgendwie bleibt mein Script an der Schleife (siehe makierung) hängen. Ich versuche es schon die ganze Zeit, aber irgendwie...funzt es nicht. Es soll ein Array mit zufälligen Positionen erstellt werden.

    Script:

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

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

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

    Global $CHECK_NUMBER = Random(1000000, 9999999, 1)
    Global $CHECK_LABELS[7]

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

    $Form1 = GUICreate("Form1", 474, 434)
    $Label2 = GUICtrlCreateLabel("Hier können Sie ihren Feedback an mich senden.", 8, 8, 238, 17)
    $Label1 = GUICtrlCreateLabel("Name:", 8, 40, 35, 17)
    $Input1 = GUICtrlCreateInput("", 48, 32, 417, 21)
    $Label3 = GUICtrlCreateLabel("Email:", 8, 64, 32, 17)
    $Input2 = GUICtrlCreateInput("", 48, 56, 417, 21)
    $Label4 = GUICtrlCreateLabel("Betreff:", 8, 88, 38, 17)
    $Input3 = GUICtrlCreateInput("", 48, 80, 417, 21)
    $Edit1 = GUICtrlCreateEdit("", 48, 104, 417, 209)
    GUICtrlSetData(-1, "Edit1")
    $Label5 = GUICtrlCreateLabel("Alle Informationen, die Sie hier angeben, werden nicht Veröffentlicht oder weitergegeben.", 8, 320, 423, 17)
    $Button1 = GUICtrlCreateButton("Feedback senden", 8, 400, 107, 25, $WS_GROUP)
    $Label7 = GUICtrlCreateLabel("Geben Sie bitte die Zahl ein:", 8, 376, 138, 17)
    $Input4 = GUICtrlCreateInput("", 152, 376, 121, 21)

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

    $Code = _GenLabelCode()

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

    GUISetState(@SW_SHOW)

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

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

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

    Case $Button1

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

    EndSwitch
    WEnd

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

    Func _GenLabelCode($Stellen = 7)
    Local $Positions[$Stellen]
    ;Geordnete Positionen
    For $i = 0 To $Stellen - 1
    $Positions[$i] = 8 + ($i + 1) * 13
    Next

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

    Local $RandomPositions[$Stellen]
    Local $Random[$Stellen]
    Local $Numbers

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

    ;Problemzone

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

    For $i = 0 To $Stellen - 1
    $Ran = Random(0, $Stellen -1, 1)
    If Not _Search($Random, $Ran) Then
    $RandomPositions[$i] = $Positions[$Ran]
    $Random[$i] = $Ran
    Else
    $i -= 1
    EndIf
    Next

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

    _ArrayDisplay($Random)

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

    Exit

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

    ;Problemzone ende

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

    Local $Split = StringSplit($CHECK_NUMBER, "")
    Local $String = ""
    Local $Counter = 0
    For $i = 1 To 7
    $Ran = Random(1, 7, 1)
    If Not StringInStr($String, $Ran) Then
    $CHECK_LABELS[$i - 1] = GUICtrlCreateLabel($Ran, $RandomPositions[$Counter], 344, 15, 26)
    GUICtrlSetFont(-1, 14, 800, 0, "Arial")
    $String &= $Ran
    $Counter += 1
    Else
    $i -= 1
    EndIf
    Next
    $Split = ""
    Return $String
    EndFunc ;==>_GenLabelCode

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

    Func _Search($i_a, $i_Str)
    For $a = 0 To UBound($i_a) - 1
    If $i_a[$a] = $i_Str Then Return 1
    Next
    Return 0
    EndFunc ;==>_Search

    [/autoit]
  • Hi,
    nur ein Ansatz zur Lösung. Wenn Du ein Arraydisplay in der Funktion _Search hinzufügst, erkennst Du vielleicht Deinen Fehler.
    Der läuft da nämlich ziemlich lange durch.......

    [autoit]

    Func _Search($i_a, $i_Str)
    _ArrayDisplay ($i_a, "Funktion")
    For $a = 0 To UBound($i_a) - 1
    If $i_a[$a] = $i_Str Then Return 1
    Next
    Return 0
    EndFunc ;==>_Search

    [/autoit]

    ;-))
    Stefan

    • Offizieller Beitrag

    @Deepred , ich blick nicht wirklich durch dein Script durch, hab aber 2 Fehler gefunden.

    In Zeile 70 benutz du folgendes:

    [autoit]

    $Ran = Random(0, $Stellen -1, 1)

    [/autoit]


    Du brauchst in deinem Weiteren Script aber auch die Zahl 0 , dein Code liefert aber nie die 0.
    2. Dein Code in Zeile 85 funzt so nicht

    [autoit]

    Local $Split = StringSplit($CHECK_NUMBER, "")

    [/autoit]


    Es wird kein Ergebnis geliefert.

    Hab das Exit überlesen. :D
    Edit hier mal ein funktionsfähiger Code :

    Spoiler anzeigen
    [autoit]

    #cs ----------------------------------------------------------------------------

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

    AutoIt Version: 3.3.0.0
    Author: myName

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

    Script Function:
    Template AutoIt script.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

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

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

    Global $CHECK_NUMBER = Random(1000000, 9999999, 1)
    Global $CHECK_LABELS[7]

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

    $Form1 = GUICreate("Form1", 474, 434)
    $Label2 = GUICtrlCreateLabel("Hier können Sie ihren Feedback an mich senden.", 8, 8, 238, 17)
    $Label1 = GUICtrlCreateLabel("Name:", 8, 40, 35, 17)
    $Input1 = GUICtrlCreateInput("", 48, 32, 417, 21)
    $Label3 = GUICtrlCreateLabel("Email:", 8, 64, 32, 17)
    $Input2 = GUICtrlCreateInput("", 48, 56, 417, 21)
    $Label4 = GUICtrlCreateLabel("Betreff:", 8, 88, 38, 17)
    $Input3 = GUICtrlCreateInput("", 48, 80, 417, 21)
    $Edit1 = GUICtrlCreateEdit("", 48, 104, 417, 209)
    GUICtrlSetData(-1, "Edit1")
    $Label5 = GUICtrlCreateLabel("Alle Informationen, die Sie hier angeben, werden nicht Veröffentlicht oder weitergegeben.", 8, 320, 423, 17)
    $Button1 = GUICtrlCreateButton("Feedback senden", 8, 400, 107, 25, $WS_GROUP)
    $Label7 = GUICtrlCreateLabel("Geben Sie bitte die Zahl ein:", 8, 376, 138, 17)
    $Input4 = GUICtrlCreateInput("", 152, 376, 121, 21)

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

    $Code = _GenLabelCode()

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

    GUISetState(@SW_SHOW)

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

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

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

    Case $Button1

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

    EndSwitch
    WEnd

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

    Func _GenLabelCode($Stellen = 7)
    Local $Positions[$Stellen]
    ;Geordnete Positionen
    For $i = 0 To $Stellen - 1
    $Positions[$i] = 8 + ($i + 1) * 13
    Next

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

    Local $RandomPositions[$Stellen]
    Local $Random[$Stellen]
    Local $Numbers

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

    ;Problemzone

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

    For $i = 0 To $Stellen - 1
    $Ran = Random(1, $Stellen , 1)
    If Not _Search($Random, $Ran ) Then
    $RandomPositions[$i] = $Positions[$Ran - 1]
    $Random[$i] = $Ran
    consolewrite ($Random[$i]&";"& $i &@crlf)
    Else
    $i -= 1
    EndIf
    Next

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

    ;Problemzone ende

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

    Local $Split = StringSplit($CHECK_NUMBER, "")
    Local $String = ""
    Local $Counter = 0
    For $i = 1 To 7
    $Ran = Random(1, 7, 1)
    If Not StringInStr($String, $Ran) Then
    $CHECK_LABELS[$i - 1] = GUICtrlCreateLabel($Ran, $RandomPositions[$Counter], 344, 15, 26)
    GUICtrlSetFont(-1, 14, 800, 0, "Arial")
    $String &= $Ran
    $Counter += 1
    Else
    $i -= 1
    EndIf
    Next
    $Split = ""
    Return $String
    EndFunc ;==>_GenLabelCode

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

    Func _Search($i_a, $i_Str)
    For $a = 0 To UBound($i_a) - 1
    If $i_a[$a] = $i_Str Then Return 1
    Next
    Return 0
    EndFunc ;==>_Search

    [/autoit]

    Edit: Der Code läuft zwar, aber der zurückgegebene String ist nicht korrekt.