_Array2DSearch wohl mal was für den KING OF ARRAY :D

  • Hiho also ich bin immer noch bei meinem Programm das eig, vieeel zu viele Inputs hat aber naja gut ^^

    Also es geht um ControlGetFocus der ja leider nur den Classname rausgibt
    Also hab ich mir quasi ein zweites 2D-Array gemacht:

    Spoiler anzeigen
    [autoit]

    $i = 1
    $input_farbe = True
    Global $array_inputs[300][14], $class_edit[40][14]
    $edit = 1
    $class0 = 6
    $class1 = 7
    $class2 = 8
    $class3 = 9
    $class4 = 10
    $class5 = 11
    $class6 = 12
    $class7 = 13
    $class8 = 14
    $class9 = 15
    $class10 = 16
    $class11 = 17
    $class12 = 18
    $class13 = 19
    For $f = 1 To 20
    $array_inputs[$i][0] = GUICtrlCreateInput("", $lb_leiste_left2, $top, $lb_leiste_width1, 20) ;Kennzeichen
    $class_edit[$edit][0] = "Edit"&$class0
    $array_inputs[$i][1] = GUICtrlCreateInput("", $lb_leiste_left3, $top, $lb_leiste_width2, 20) ;Flugzeugtyp
    $class_edit[$edit][1] = "Edit"&$class1
    $array_inputs[$i][2] = GUICtrlCreateInput("", $lb_leiste_left4, $top, $lb_leiste_width3, 20) ;Pilot
    $class_edit[$edit][2] = "Edit"&$class2
    $array_inputs[$i][3] = GUICtrlCreateInput("", $lb_leiste_left5, $top, $lb_leiste_width4, 20) ;Co-Pilot
    $class_edit[$edit][3] = "Edit"&$class3
    $array_inputs[$i][4] = GUICtrlCreateInput("", $lb_leiste_left6, $top, $lb_leiste_width5, 20) ;Startart
    $class_edit[$edit][4] = "Edit"&$class4
    $array_inputs[$i][5] = GUICtrlCreateInput("", $lb_leiste_left7, $top, $lb_leiste_width6, 20) ;Startplatz
    $class_edit[$edit][5] = "Edit"&$class5
    $array_inputs[$i][6] = GUICtrlCreateInput("", $lb_leiste_left8, $top, $lb_leiste_width7, 20) ;Landeplatz
    $class_edit[$edit][6] = "Edit"&$class6
    $array_inputs[$i][7] = GUICtrlCreateInput("", $lb_leiste_left9+3, $top, $lb_leiste_width8, 20, $ES_NUMBER) ;Startzeit H
    $class_edit[$edit][7] = "Edit"&$class7
    $array_inputs[$i][8] = GUICtrlCreateInput("", $lb_leiste_left9+38, $top, $lb_leiste_width8, 20, $ES_NUMBER) ;Startzeit M
    $class_edit[$edit][8] = "Edit"&$class8
    $array_inputs[$i][9] = GUICtrlCreateInput("", $lb_leiste_left10+3, $top, $lb_leiste_width9, 20, $ES_NUMBER) ;Landezeit H
    $class_edit[$edit][9] = "Edit"&$class9
    $array_inputs[$i][10] = GUICtrlCreateInput("", $lb_leiste_left10+38, $top, $lb_leiste_width9, 20, $ES_NUMBER) ;Landezeit M
    $class_edit[$edit][10] = "Edit"&$class10
    $array_inputs[$i][11] = GUICtrlCreateInput("", $lb_leiste_left11+3, $top, $lb_leiste_width10, 20, $ES_NUMBER) ;Flugzeit H
    $class_edit[$edit][11] = "Edit"&$class11
    $array_inputs[$i][12] = GUICtrlCreateInput("", $lb_leiste_left11+38, $top, $lb_leiste_width10, 20, $ES_NUMBER) ;Flugzeit M
    $class_edit[$edit][12] = "Edit"&$class12
    $array_inputs[$i][13] = GUICtrlCreateInput("", $lb_leiste_left12, $top, $lb_leiste_width11, 20) ;Bemerkungen
    $class_edit[$edit][13] = "Edit"&$class13
    $top = $top + 25
    $i += 1
    $class1 += 14
    $edit += 1
    Next

    [/autoit]

    So die Edit&Zahl stimmen das geht auch in anderen Funktionen
    Nun will ich quasi das man mit HotKeySet Pfeilrechts dann in das nächste Feld reinkommt:
    genau so wie nach unten nach oben und nach links ;)

    mein ansatz:

    Spoiler anzeigen
    [autoit]

    Func go_right()
    Select
    Case WinActive($opts_namepgr[2]&" - Seite 1")
    $window = $opts_namepgr[2]&" - Seite 1"
    $state = ControlGetFocus($seite1)
    Case WinActive($opts_namepgr[2]&" - Seite 2")
    $window = $opts_namepgr[2]&" - Seite 2"
    $state = ControlGetFocus($seite2)
    Case WinActive($opts_namepgr[2]&" - Seite 3")
    $window = $opts_namepgr[2]&" - Seite 3"
    $state = ControlGetFocus($seite3)
    Case WinActive($opts_namepgr[2]&" - Seite 4")
    $window = $opts_namepgr[2]&" - Seite 4"
    $state = ControlGetFocus($seite4)
    Case Else
    $state = 0
    EndSelect
    $posarray = _Array2DSearch($class_edit, $state, -1, 0, 20, False, True)
    If $posarray[0] <> 0 Or $posarray[0] <> -1 Then
    MsgBox(0, "lol", $state)
    _ArrayDisplay($posarray)
    ;ControlFocus($window, "",
    EndIf
    EndFunc

    [/autoit]


    So nur wie werte ich das ganze jetzt mit dem _Array2DSearch aus???
    Also es muss dann quasi nur ControlFocus($window, "", $array_inputs[$pos1][$pos2+1] sein damit es dann das rechte Feld von dem jetzigen focused^^

    THX wieder mal für alle die sich mühe geben mich zu verstehn :P

    MFG FireFlyer

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

    Einmal editiert, zuletzt von FireFlyer (9. März 2008 um 01:12)

  • Nimm doch das [ offen ] "markiertes" input rausfinden^^
    Oder mach mal ein gescheites Array :P Nein, Scherz. Nimm Handles statt Classname. Die ClassnameNN könnten sich ja ändern.
    Bin mal so nett und schreib die Func :)

    [autoit]

    $inputCount = 10 ;Anzahl Inputs
    Dim $InputArray[21][$inputCount]
    Dim $InputHandles[21][$inputCount]
    ...
    $InputArray[$i][0]= GUICtrlCreateInput("", $lb_leiste_left2, $top, $lb_leiste_width1, 20) ;Kennzeichen
    $InputHandles[$i][0] = GUICtrlGetHandle($InputArray[$i][0][0])
    ...

    [/autoit]


    Abfrage dann mit:

    [autoit]


    Func _FocusedID()
    $focusedhandle = ControlGetHandle($GUI, '', ControlGetFocus($GUI)) ;!!!!! $GUI musst du die Variable von GUICreate angeben :)
    For $i = 1 To 20
    For $k = 0 To $InputCount-1
    If $InputHandles[$i][$k] = $focusedhandle Then Return $InputArray[$i][$k]
    Next
    Next
    Return -1
    EndFunc

    [/autoit]


    Das nächste dann auswählen geht mit GUICtrlSetState( _FocusedID()+1,$GUI_FOCUS)

  • Du kannst von einem ClassNameNN das Handle holen :)

    [autoit]

    ControlGetHandle($GUI, '', ControlGetFocus($GUI))

    [/autoit]