Basics? GUI > Array erstellen, Werte sortieren, danach Wert wieder an richtige Stelle...

  • Hallo ihr Lieben,

    Ich bin noch nicht so lange dabei und versuche mich aktuell ein wenig an den "Basics"...ich hoffe ihr könnt mir ein wenig Hilfestellung leisten.

    Mein Vorhaben ist eigentlich ein relativ einfaches....
    Ich habe 6 Zahlenwerte, die ein Benutzer in ein Input-Feld in einer Gui eingibt. Jedes Input-Feld trägt einen Namen. Zum Beispiel "Ausdauer", "Geschwindigkeit" und so weiter. Ziel ist es, die beiden Input-Felder mit den beiden höchsten Werten zu finden, und dazu einen "Bonus" zu addieren. Die anderen 4 Inputs, sollen bleiben wie sie sind. Das ganze wird einfach eine Art "Rechner", der mir einfach ein Ergebnis zeigen soll, was erreicht wird, wenn das oder jenes gemacht wird.

    Meine Idee war es alle 6 Inputs in ein Array einzutragen, das Array absteigend zu sortieren....Index 0 und Indes 1 des Array wären damit die beiden "höchsten Werte".....Das addieren dazu ist auch nicht das Problem....nun zur Schwierigkeit.
    Ich möchte gerne die 6 Zahlenwerte wieder "zurückschreiben" in ihrer Ursprungs-Felder, dies aber mit aktualisierten Werten....
    Ich finde nun einfach keinen Wert den Parameter "Tempo" wieder in sein Ursprungs-Input-Feld zurückzugeben....

    Mein Code bisher:

    [autoit]


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

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

    Case $Button1
    ;Inputs auslesen
    $Ausdauer1 = GUICtrlRead($Input1)
    $Tempo1 = GUICtrlRead($Input2)
    $Dressur1 = GUICtrlRead($Input3)
    $Gallopp1 = GUICtrlRead($Input4)
    $Trab1 = GUICtrlRead($Input5)
    $Springen1 = GUICtrlRead($Input6)

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

    Dim $Array[6]

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

    $Array[0]= $Ausdauer1
    $Array[1]= $Tempo1
    $Array[2]= $Dressur1
    $Array[3]= $Gallopp1
    $Array[4]= $Trab1
    $Array[5]= $Springen1

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

    _Arraysort($Array,1)

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

    $HoechstWert1 = $Array[0]
    $HoechstWert2 = $Array[1]
    $ArrayWert3 = $Array[2]
    $ArrayWert4 = $Array[3]
    $ArrayWert5 = $Array[4]
    $ArrayWert6 = $Array[5]

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

    ; Bonus addieren
    $Bonus1 = $Hoechstwert1 + 6*0.25
    $Bonus2 = $Hoechstwert2 + 6*0.25

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

    ....

    [/autoit]

    So und nun möchte ich gerne alle 6 Werte wieder in ihre ursprünglichen Inputs "zurückschreiben, nur das die beiden Besten Werte, dort "aktualisiert" eingetragen werden.
    Genau da hänge ich fest.

    Sollte meine Idee mit dem Array grundsätzlich zu kompliziert sein, bitte helft mir eine einfacherer Lösung zu finden.
    Ich steh wahrscheinlich nur auf dem schlauch....
    Ich bin ziemlicher Anfänger im Programmieren, Also bitte einfach erklären :)

    Danke schonmal.
    LG
    Rahl

    Einmal editiert, zuletzt von Rahl (4. Juni 2013 um 10:01)

  • Ich hoffe das Skript ist selbsterklärend. Ansonsten kannst du gerne nachfragen :)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Global $hGUI, $idInput1, $idInput2, $idInput3, $idInput4, _
    $idInput5, $idInput6, $idButton

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    $hGUI = GUICreate('Example', 220, 220)
    $idInput1 = GUICtrlCreateInput('', 10, 10, 200, 20) ; Ausdauer
    $idInput2 = GUICtrlCreateInput('', 10, 40, 200, 20) ; Tempo
    $idInput3 = GUICtrlCreateInput('', 10, 70, 200, 20) ; Dressur
    $idInput4 = GUICtrlCreateInput('', 10, 100, 200, 20) ; Gallopp
    $idInput5 = GUICtrlCreateInput('', 10, 130, 200, 20) ; Trab
    $idInput6 = GUICtrlCreateInput('', 10, 160, 200, 20) ; Springen
    $idButton = GUICtrlCreateButton('', 10, 190, 200, 20)
    GUISetState()

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While True
    Switch GUIGetMsg()
    Case $idButton
    _Bonus()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func _Bonus()
    Local $aiArray[6][2], $aiHoechstwert[2][2], $i
    Local Enum $Ausdauer, $Tempo, $Dressur, $Gallopp, $Trab, _
    $Springen
    Local Enum $Id, $Wert

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

    ; ID's speichern
    $aiArray[$Ausdauer][$Id] = $idInput1
    $aiArray[$Tempo ][$Id] = $idInput2
    $aiArray[$Dressur ][$Id] = $idInput3
    $aiArray[$Gallopp ][$Id] = $idInput4
    $aiArray[$Trab ][$Id] = $idInput5
    $aiArray[$Springen][$Id] = $idInput6

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

    ; Werte speichern
    $aiArray[$Ausdauer][$Wert] = Number(GUICtrlRead($idInput1))
    $aiArray[$Tempo ][$Wert] = Number(GUICtrlRead($idInput2))
    $aiArray[$Dressur ][$Wert] = Number(GUICtrlRead($idInput3))
    $aiArray[$Gallopp ][$Wert] = Number(GUICtrlRead($idInput4))
    $aiArray[$Trab ][$Wert] = Number(GUICtrlRead($idInput5))
    $aiArray[$Springen][$Wert] = Number(GUICtrlRead($idInput6))

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

    ; Alle Attribute durchgehen
    For $i = $Ausdauer To $Springen
    If $aiArray[$i][$Wert] > $aiHoechstwert[0][$Wert] Then
    $aiHoechstwert[1][$Id ] = $aiHoechstwert[0][$Id ]
    $aiHoechstwert[1][$Wert] = $aiHoechstwert[0][$Wert]
    $aiHoechstwert[0][$Id ] = $aiArray[$i][$Id ]
    $aiHoechstwert[0][$Wert] = $aiArray[$i][$Wert]
    ElseIf $aiArray[$i][$Wert] > $aiHoechstwert[1][$Wert] Then
    $aiHoechstwert[1][$Id ] = $aiArray[$i][$Id ]
    $aiHoechstwert[1][$Wert] = $aiArray[$i][$Wert]
    EndIf
    Next

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

    ; Die beiden Höchstwerte sind nun im Array gespeichert.
    ; Mit der ID des entsprechenden Input Controls.
    GUICtrlSetData($aiHoechstwert[0][$Id], $aiHoechstwert[0][$Wert] + 6 * .25)
    GUICtrlSetData($aiHoechstwert[1][$Id], $aiHoechstwert[1][$Wert] + 6 * .25)
    EndFunc

    [/autoit]

    Habe es für bessere lesbarkeit mit Enum Variablen geschrieben.

    €dit:
    Kleine Skriptkorrektur...
    Danke Greek für den Hinweis mit Number!
    Hatte ich nicht mehr dran gedacht. :P

    Einmal editiert, zuletzt von Yjuq (1. Juni 2013 um 19:18)

  • Oder du veränderst einfach die Reihenfolge von deinem array nicht, also kein arraysort benutzen.

    Beispiel wenn ein Wert einen Bonus bekommen soll:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form0 = GUICreate("Rahl Beispiel", 141, 201, -1, -1)
    $Input_0 = GUICtrlCreateInput("5", 8, 8, 121, 21)
    $Input_1 = GUICtrlCreateInput("10", 8, 40, 121, 21)
    $Input_2 = GUICtrlCreateInput("8", 8, 72, 121, 21)
    $Input_3 = GUICtrlCreateInput("1", 8, 104, 121, 21)
    $Input_4 = GUICtrlCreateInput("2", 8, 136, 121, 21)
    $Input_5 = GUICtrlCreateInput("6", 8, 168, 121, 21)
    GUISetState(@SW_SHOW)

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

    Sleep(2000)

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

    Global $container[6] ; Array geht von 0 - 5
    Global $maximum = 0

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

    ;// Auslesen
    For $i=0 To 5 Step +1
    $container[$i] = Number(GUICtrlRead(Eval("Input" & "_" &$i))) ;// Er ließt es als Text aus, müssen ihm sagen das es eine Zahl ist
    Next

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

    ;// Den besten finden
    For $i=0 To 5 Step +1
    If ($container[$i] > $maximum) Then
    $maximum = $container[$i]
    EndIf
    Next

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

    ;// Dein Bonus addieren
    For $i=0 To 5 Step +1
    If ($container[$i] = $maximum) Then
    $container[$i] += 100;
    ExitLoop ; Nur einer darf maximum sein
    EndIf
    Next

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

    ;// Zurueck schreiben
    For $i=0 To 5 Step +1
    GUICtrlSetData(Eval("Input" & "_" &$i),$container[$i])
    Next

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

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

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

    EndSwitch
    WEnd

    [/autoit]
  • Danke :) da habt ihr mir schonmal sehr geholfen....Danke auch für die "Einfachheit".

    Ich würde gernen nun nicht mehr nur die beiden höchsten Werte aktualisiert eintragen, sondern gerne alle 6 Werte in 6 neue Inputs (wieder aktualisiert) speichern, d.h. 2 Spalten mit je 6 Inputs....Spalte 1 alte Werte....Spalte 2 neue aktualisierte Werte.

    Wie ich die beiden "Hoechstwerte in neue Imput-Felder übertrage ist klar, nur wie bekomme ich die restlichen Werte wieder in "ihre" neuen Felder?

    Danke nochmals für jeden Ansatz :)

  • Alternativ 1x 2D-Array, Spalte 1 Wertkennzifferung, Spalte 2 Wert. Sortieren nach zweiter Spalte um deine Rechnungen zu machen, und nach der ersten um die alte Reihenfolge zu haben ...

    Aber bietet sich bei sowas kein Hash an? Schlüssel-Wert Paare ;)

    So Far

    Grüße Yaerox

    Grüne Hölle

  • Wie gesagt wenn du das Array nicht sortierst hast du das Problem nicht, das wär dann so:

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    $Form0 = GUICreate("Rahl Beispiel", 280, 200, -1, -1)
    For $i=0 to 5 Step +1
    Assign("Input" & "_" &$i, GUICtrlCreateInput($i, 5, $i*30, 120, 21))
    Next
    For $i=0 to 5 Step +1
    Assign("Input" & "_" &$i+6, GUICtrlCreateInput($i+6, 150, $i*30, 121, 21))
    Next
    GUISetState(@SW_SHOW)

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

    Sleep(2000)

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

    Global $container[6] ; Array geht von 0 - 5
    Global $maximum = 0

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

    ;// Auslesen
    For $i=0 To 5 Step +1
    $container[$i] = Number(GUICtrlRead(Eval("Input" & "_" &$i))) ;// Er ließt es als Text aus, müssen ihm sagen das es eine Zahl ist
    Next

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

    ;// Den besten finden
    For $i=0 To 5 Step +1
    If ($container[$i] > $maximum) Then
    $maximum = $container[$i]
    EndIf
    Next

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

    ;// Dein Bonus addieren
    For $i=0 To 5 Step +1
    If ($container[$i] = $maximum) Then
    $container[$i] += 100;
    ExitLoop ; Nur einer darf maximum sein
    EndIf
    Next

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

    ;// Zurueck schreiben
    For $i=0 To 5 Step +1
    GUICtrlSetData(Eval("Input" & "_" &$i+6),$container[$i])
    Next

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

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

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

    EndSwitch
    WEnd

    [/autoit]

    ( Sorry ich mag Assign/Eval sehr gerne ^^ )

    Aber ich mach dir mal ein Beispiel mit Hash maps dann ist das doch schon wesentlich einfacher zu verstehen :), ich editiere dann nach.

    Edit: So hier nochmal ganz einfach, dann musst du keine blöden arrays mehr benutzen ;)

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form= ;// Mit Koda generiert, zu faul atm
    $Form1 = GUICreate("Form1", 390, 101, -1, -1)
    $Label_0 = GUICtrlCreateLabel("Ausdauer", 8, 8, 49, 17)
    $Label_1 = GUICtrlCreateLabel("Tempo", 8, 40, 37, 17)
    $Label_2 = GUICtrlCreateLabel("Galopp", 8, 72, 38, 17)
    $Input_0 = GUICtrlCreateInput("50", 64, 8, 121, 21)
    $Input_1 = GUICtrlCreateInput("20", 64, 40, 121, 21)
    $Input_2 = GUICtrlCreateInput("60", 64, 72, 121, 21)
    $Label_3 = GUICtrlCreateLabel("Ausdauer", 200, 8, 49, 17)
    $Label_4 = GUICtrlCreateLabel("Tempo", 200, 40, 37, 17)
    $Label_5 = GUICtrlCreateLabel("Galopp", 200, 72, 38, 17)
    $Input_3 = GUICtrlCreateInput("", 256, 8, 121, 21)
    $Input_4 = GUICtrlCreateInput("", 256, 40, 121, 21)
    $Input_5 = GUICtrlCreateInput("", 256, 72, 121, 21)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $hash = ObjCreate("System.Collections.Hashtable") ;// Alternative zu Array, wesentlich einfacher

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

    ;// Einlesen
    For $i=0 To 2 Step +1
    $hash.add(GUICtrlRead(Eval("Label" & "_" &$i)),Number(GUICtrlRead(Eval("Input" & "_" &$i))))
    Next

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

    ;// Nun kannst du ganz einfach drauf zu greifen ! :)
    MsgBox(0,"Ausdauer Anzeige", $hash("Ausdauer"))

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

    ;// In die 2 Spalte
    For $i=0 To 2 Step +1
    GUICtrlSetData(Eval("Input" & "_" &$i+3),$hash(GUICtrlRead(Eval("Label" & "_" &$i))))
    Next

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

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

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

    EndSwitch
    WEnd

    [/autoit]

    https://autoit.de/index.php?page…24276#post24276

    Hier bei Hash-Tabelle kannst du mehr drüber lesen, AspirinJunkie hat hier sehr schön die array alternativen gezeigt.

    Gruß Greek

    Einmal editiert, zuletzt von Greek (3. Juni 2013 um 15:09)

  • [autoit]

    For $i=0 To 5 Step +1
    GUICtrlSetData(Eval("Input" & "_" &$i+6),$container[$i])
    Next

    [/autoit]

    ....Genau da hängts.... das $i+6....ich dachte auch dass es so einfach wäre, aber er verwechselt mir leider hier das "LabelX" (ich hab meine Zeilen noch mit Namen betitelt) mit dem "InputX" und schreibt mir den aktualisierten Werten ins Label, und nicht ins Input-Feld.

    Ich hab Gafik-Makers Code aufgegriffen (war etwas einfacher verständlich für mich)....und da sieht das so aus:

    [autoit]


    GUICtrlSetData($aiHoechstwert[0][$Id]+12, $aiHoechstwert[0][$Wert] + 6 * .25)
    GUICtrlSetData($aiHoechstwert[1][$Id]+12, $aiHoechstwert[1][$Wert] + 6 * .25)

    [/autoit]

    ...aber wie gesagt...es klappt nicht....er schreibt die Werte ins Label, nicht ins Input-Feld.
    Hat da jemand noch eine Idee?
    die anderen 4 nicht aktualisierten Werte klappen mit der $i + x - Methode....bei den 2 aktualisierten Werten klappts ais irgendwelchen Gründen nicht.

  • Alles in allem sieht aktuell so aus:
    Bitte Spalte 2 erstmal nicht beachten....mein Ziel ist es erstmal Spalte A auszulesen, die höchsten 2 Werte zu aktualisieren und in die Dritte Spalte wieder "einzutragen".

    Sicher ist das alles keine elegante Lösung...aber brauchts auch nicht zu sein....das ist alles mehr oder minder Übung für mich.
    2D-Arrays und Hash-Werte sind mir neu also bitte alles möglichst einfach halten :)

    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>

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

    $Form1 = GUICreate("Pimp-End-FK-Rechner", 673, 349, 151, 73)

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

    $Label1 = GUICtrlCreateLabel("Fohlen-AF", 88, 64, 61, 17)
    GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")

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

    $Label2 = GUICtrlCreateLabel("Ausdauer", 8, 90, 49, 17)
    $Label3 = GUICtrlCreateLabel("Tempo", 8, 114, 37, 17)
    $Label4 = GUICtrlCreateLabel("Dresur", 8, 140, 35, 17)
    $Input1 = GUICtrlCreateInput("", 88, 88, 121, 21)
    $Input2 = GUICtrlCreateInput("", 88, 112, 121, 21)
    $Input3 = GUICtrlCreateInput("", 88, 136, 121, 21)
    $Label5 = GUICtrlCreateLabel("Gallopp", 8, 184, 40, 17)
    $Label6 = GUICtrlCreateLabel("Trab", 8, 212, 26, 17)
    $Label7 = GUICtrlCreateLabel("Springen", 8, 240, 46, 17)
    $Input4 = GUICtrlCreateInput("", 88, 184, 121, 21)
    $Input5 = GUICtrlCreateInput("", 88, 208, 121, 21)
    $Input6 = GUICtrlCreateInput("", 88, 232, 121, 21)
    $Input7 = GUICtrlCreateInput("", 216, 88, 121, 21)
    $Input8 = GUICtrlCreateInput("", 216, 112, 121, 21)
    $Input9 = GUICtrlCreateInput("", 216, 136, 121, 21)
    $Input10 = GUICtrlCreateInput("", 216, 184, 121, 21)
    $Input11 = GUICtrlCreateInput("", 216, 208, 121, 21)
    $Input12 = GUICtrlCreateInput("", 216, 232, 121, 21)

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

    $Label8 = GUICtrlCreateLabel("Fohlen-GP", 216, 64, 63, 17)
    GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")

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

    $Label9 = GUICtrlCreateLabel("Pimp-Fohlen > Werte", 8, 16, 172, 24)
    GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)

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

    $Label17 = GUICtrlCreateLabel("Pimp-End-FK", 409, 16, 109, 24)
    GUICtrlSetFont(-1, 12, 800, 4, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xFF0000)

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

    $Label10 = GUICtrlCreateLabel("Pimp-End-FK", 489, 65, 76, 17)
    GUICtrlSetFont(-1, 8, 800, 4, "MS Sans Serif")

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

    $Label11 = GUICtrlCreateLabel("Ausdauer", 409, 90, 49, 17)
    $Label12 = GUICtrlCreateLabel("Tempo", 409, 114, 37, 17)
    $Label13 = GUICtrlCreateLabel("Dresur", 409, 140, 35, 17)
    $Input13 = GUICtrlCreateInput("", 489, 88, 121, 21)
    $Input14 = GUICtrlCreateInput("", 489, 112, 121, 21)
    $Input15 = GUICtrlCreateInput("", 489, 136, 121, 21)
    $Label14 = GUICtrlCreateLabel("Gallopp", 409, 184, 40, 17)
    $Label15 = GUICtrlCreateLabel("Trab", 409, 212, 26, 17)
    $Label16 = GUICtrlCreateLabel("Springen", 409, 240, 46, 17)
    $Input16 = GUICtrlCreateInput("", 489, 184, 121, 21)
    $Input17 = GUICtrlCreateInput("", 489, 208, 121, 21)
    $Input18 = GUICtrlCreateInput("", 489, 232, 121, 21)

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

    $idButton = GUICtrlCreateButton("Berechne Pimp-FK!", 408, 272, 203, 49)

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

    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    Global $hGUI, $idInput1, $idInput2, $idInput3, $idInput4, _
    $idInput5, $idInput6, $idButton

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    While True
    Switch GUIGetMsg()
    Case $idButton
    _Bonus()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

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

    ; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +

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

    Func _Bonus()
    Local $aiArray[6][2], $aiHoechstwert[2][2], $i
    Local Enum $Ausdauer, $Tempo, $Dressur, $Gallopp, $Trab, _
    $Springen
    Local Enum $Id, $Wert

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

    ; ID's speichern
    $aiArray[$Ausdauer][$Id] = $Input1
    $aiArray[$Tempo ][$Id] = $Input2
    $aiArray[$Dressur ][$Id] = $Input3
    $aiArray[$Gallopp ][$Id] = $Input4
    $aiArray[$Trab ][$Id] = $Input5
    $aiArray[$Springen][$Id] = $Input6

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

    ; Werte speichern
    $aiArray[$Ausdauer][$Wert] = Number(GUICtrlRead($Input1))
    $aiArray[$Tempo ][$Wert] = Number(GUICtrlRead($Input2))
    $aiArray[$Dressur ][$Wert] = Number(GUICtrlRead($Input3))
    $aiArray[$Gallopp ][$Wert] = Number(GUICtrlRead($Input4))
    $aiArray[$Trab ][$Wert] = Number(GUICtrlRead($Input5))
    $aiArray[$Springen][$Wert] = Number(GUICtrlRead($Input6))

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

    ; Alle Attribute durchgehen
    For $i = $Ausdauer To $Springen
    If $aiArray[$i][$Wert] > $aiHoechstwert[0][$Wert] Then
    $aiHoechstwert[1][$Id ] = $aiHoechstwert[0][$Id ]
    $aiHoechstwert[1][$Wert] = $aiHoechstwert[0][$Wert]
    $aiHoechstwert[0][$Id ] = $aiArray[$i][$Id ]
    $aiHoechstwert[0][$Wert] = $aiArray[$i][$Wert]
    ElseIf $aiArray[$i][$Wert] > $aiHoechstwert[1][$Wert] Then
    $aiHoechstwert[1][$Id ] = $aiArray[$i][$Id ]
    $aiHoechstwert[1][$Wert] = $aiArray[$i][$Wert]
    EndIf
    Next

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

    ; Die beiden Höchstwerte sind nun im Array gespeichert.
    ; Mit der ID des entsprechenden Input Controls.
    GUICtrlSetData($aiHoechstwert[0][$Id]+12, $aiHoechstwert[0][$Wert] + 6 * .25)
    GUICtrlSetData($aiHoechstwert[1][$Id]+12, $aiHoechstwert[1][$Wert] + 6 * .25)

    For $i = $Ausdauer To $Springen
    If $aiArray[$i][$Wert] < $aiHoechstwert[1][$Wert] AND $aiHoechstwert[1][$Wert] Then
    If $aiArray[$i][$Wert] == $aiArray[$Ausdauer][$Wert] Then GUICtrlSetData($Input13, $aiArray[$Ausdauer][$Wert])
    If $aiArray[$i][$Wert] == $aiArray[$Tempo][$Wert] Then GUICtrlSetData($Input14, $aiArray[$Tempo][$Wert])
    If $aiArray[$i][$Wert] == $aiArray[$Dressur][$Wert] Then GUICtrlSetData($Input15, $aiArray[$Dressur][$Wert])
    If $aiArray[$i][$Wert] == $aiArray[$Gallopp][$Wert] Then GUICtrlSetData($Input16, $aiArray[$Gallopp][$Wert])
    If $aiArray[$i][$Wert] == $aiArray[$Trab][$Wert] Then GUICtrlSetData($Input17, $aiArray[$Trab][$Wert])
    If $aiArray[$i][$Wert] == $aiArray[$Springen][$Wert] Then GUICtrlSetData($Input18, $aiArray[$Springen][$Wert])

    EndIf
    Next

    EndFunc

    [/autoit]
  • Verstehst du das was in Bonus passiert? Die eigne Lösung ist immer besser.

    Mach es lieber mit Hashs, die sind viiiiiiiiiel einfacher als Arrays, schaus dir nochmal und probier es umzusetzen ohne das ich es schreibe :)

    Spoiler anzeigen
    [autoit]

    ;----------------------------------------------------------------------
    ;------------------------Hash-Table------------------------------------
    ;----------------------------------------------------------------------
    ; http://msdn.microsoft.com/de-de/library/….hashtable.aspx

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

    ;////Hash-Table Erstellen///////////
    $hash = ObjCreate("System.Collections.Hashtable")

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

    ;////Einträge hinzufügen///////////
    $hash.add ("Berlin", 3395189)
    $hash.add ("Hamburg", 1743627)
    $hash.add ("München", 1259677)
    $hash.add ("Köln", 983347)
    $hash.add ("Dresden", 504795)
    ;Beispiel hier: Einwohnerzahl wird der jeweiligen Stadt zugeordnet.

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

    ;////Anzahl der Elemente bestimmen///////////
    $Count = $hash.Count

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

    ;////Überprüft ob ein Element vorhanden ist///////////
    If $hash.Contains ("Bonn") Then MsgBox(0, "", "Bonn ist eingetragen") ;Bonn ist im Bsp. nicht enthalten

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

    ;////Löscht ein Element aus der Hash-Table///////////
    $hash.remove ("München")

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

    ;////Elemente aufrufen///////////
    ConsoleWrite("Einwohner(Berlin): " & $hash("Berlin") & @CRLF)
    ConsoleWrite("Einwohner(Dresden): " & $hash("Dresden") & @CRLF)

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

    ;////Leert die Hash-Table///////////
    $hash.Clear

    [/autoit]

    Kannst dir mal Internet mal anschauen was Hashs überhaupt sind.

    Und benutz

    Spoiler anzeigen

    bitte, sonst sieht man vor lauter Code kaum etwas :)

    Gruß Greek

  • Fehler im o.g. Script gefunden.
    meine $i+12 war zu niedrig gegriffen. nun funktioniert wenigstens das schreiben in die richtigen Inputs.
    Die überflüssigen Variablen hab ich auch entfernt....

    Ich hätt das gern mehr "selbstgeschrieben"....aber auch so lernt man....1D-Array waren mir ein Begriff, 2Ds aber bisher nicht.
    Und mein Ansatzpunkt oben war ja leider auch ein wenig kompliziert...

    In die Hashes werde ich mich auf jeden Fall mal einlesen. :thumbup: Die Variante scheint um einiges elegenater und vor allem kompakter.