Buttons aus Variablen

  • Hey,

    ich suche eine Lösung dafür, dass wenn ich eine Variable erstelle (bsp. $i = 10)
    das mir dann 10 Buttons erstellt werden, die ich alle auch Abfragen kann.

    Beispiel dafür: Ich hab ein GUI mit 10 Buttons und einem Input.
    Wenn ich auf den Button mit der Nummer 3 Klicke soll im Input eine 3 erscheinen.
    Also es soll auch die jeweilige Zahl die der Button hat als sein Inhalt dargestellt werden.

    Der 3. Button sollte also so aussehen: [3]

    Im gesammten dann z.B. so:

    [1] [2] [3] [4] [5]
    [6][7][8][9][10]

    Eingabe: [____________]

    So hoffe das ist einigermaßen erkenntlich was ich will^^

  • Etwa so:?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("T", 120, 190)
    $Button1 = GUICtrlCreateButton("1", 0, 0, 40, 40, 0)
    $Button2 = GUICtrlCreateButton("2", 40, 0, 40, 40, 0)
    $Button3 = GUICtrlCreateButton("3", 80, 0, 40, 40, 0)
    $Button4 = GUICtrlCreateButton("4", 0, 40, 40, 40, 0)
    $Button5 = GUICtrlCreateButton("5", 40, 40, 40, 40, 0)
    $Button6 = GUICtrlCreateButton("6", 80, 40, 40, 40, 0)
    $Button7 = GUICtrlCreateButton("7", 0, 80, 40, 40, 0)
    $Button8 = GUICtrlCreateButton("8", 40, 80, 40, 40, 0)
    $Button9 = GUICtrlCreateButton("9", 80, 80, 40, 40, 0)
    $Button0 = GUICtrlCreateButton("0", 40, 120, 40, 40, 0)
    $sternbutton = GUICtrlCreateButton("*", 0, 120, 40, 40, 0)
    $rautbutton = GUICtrlCreateButton("#", 80, 120, 40, 40, 0)
    $Input1 = GUICtrlCreateInput("", 5, 165,110,20)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _add(1)
    Case $Button2
    _add(2)
    Case $Button3
    _add(3)
    Case $Button4
    _add(4)
    Case $Button5
    _add(5)
    Case $Button6
    _add(6)
    Case $Button7
    _add(7)
    Case $Button8
    _add(8)
    Case $Button9
    _add(9)
    Case $Button0
    _add(0)
    Case $sternbutton
    _add("*")
    Case $rautbutton
    _add("#")
    EndSwitch
    WEnd
    Func _add($content)
    GUICtrlSetData($Input1,GUICtrlRead($Input1) & $content)
    EndFunc

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    2 Mal editiert, zuletzt von L3viathan2142 (7. Mai 2009 um 15:14)

    • Offizieller Beitrag

    Das hört sich für mich nach einer "virtuellen" Zehnertastatur an:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    Opt('GUIOnEventMode', 1)

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

    GUICreate('Test', 130, 200)
    GUISetOnEvent($GUI_EVENT_CLOSE, 'Ende')

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

    Dim $aButtons[10], $x, $y
    For $i = 0 To 9
    $x = 10 + Mod($i, 3) * 40
    If $i = 9 Then $x += 40
    $y = 10 + Int($i / 3) * 40
    $aButtons[$i] = GUICtrlCreateButton(9-$i, $x, $y, 32, 32)
    GUICtrlSetOnEvent(-1, 'ButtonKlick')
    Next

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

    $hInput = GUICtrlCreateInput('', 10, 170, 110, 20)
    GUISetState()

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

    While True
    Sleep(50)
    WEnd

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

    Func Ende()
    Exit
    EndFunc ;==>Ende

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

    Func ButtonKlick()
    Local $iButton = 9 - (@GUI_CtrlId - $aButtons[0])
    GUICtrlSetData($hInput, $iButton, 1)
    EndFunc ;==>ButtonKlick

    [/autoit]
  • So das mit der Virtuellen Zehnertastatur war tatsächlich sowas in der Art.
    Danke schonmal!

    So jetzt hab ich aber ein anderes Problem.

    Hab mich im ersten Post ein wenig vertan.

    Die Ausgabe sollte nicht so [_____________ ] sein, sondern eher so: [__][__][__][__][__] also so dass man mehrere Buttons drücken kann und als Ausgabe halt der zuerst gedrückte im ersten, der zweite im zweiten Feld usw. steht.

    Sollte an sich nicht so schwer sein, ich hab aber keine ahnung wie ich das realisieren soll^^

    MfG
    Alex

  • bau eine globale zählervariable in dein script ein, die du nach jedem mal drücken eines buttons erhöhst... über den wert der zählervariable füllst du dein entsprechendes control

  • Sollen einfache Inputs sein.
    Das mit der Variablen ist schonmal gut.
    Aber macht mal ruhig weiter^^

    Koda hab ich nicht installiert und bilder Upload geht auch net so toll hier^^

  • Hallo L0c4lh0sT,

    Zitat

    Sollen einfache Inputs sein.
    Das mit der Variablen ist schonmal gut.
    Aber macht mal ruhig weiter

    wie wäre es wenn du einmal selber die Hilfe bemühst, ich empfehle dir ganz vorne anzufangen und besonders auch die Stichpunkte, die ich in diesem Beitrag schon mal erwähnt habe durchzulesen,

    mfg (Auto)Bert

  • Der Tipp hat ware Wunder bewirkt....klappt jetzt viel besser....

    Eine frage hab ich aber noch:

    Wie bekomme ich es hin, das eine Funktion die in 6 Inputs jeweils eine Zufallszahl mit Random reinschreibt die Inputs auf gleiche Zahlen kontrolliert und dann sich selbst aufruft bis alle Zahlen unterschiedlich sind. Bzw. die schon "gezogenen" Zahlen nicht mehr auswählt?

    Hier mal mein Ansatz:

    [autoit]


    Func _zufall()
    $a = 300
    $b = 300
    $zufall = 1
    Dim $Random[6]

    For $zufall = 1 To 6
    $Random[5] = GUICtrlCreateInput(Random(1,49,1), $a, $b, 30, 30)
    $a = $a + 30
    Next
    If $Random[] = $Random[] Then
    _zufall()
    EndIf
    EndFunc

    [/autoit]

    klappt so leider nicht...was müsste ich ändern?

    • Offizieller Beitrag

    Das gab's hier schon öfter (Stichwort: Lottozahlen).
    Aber ich will mal nicht so sein:

    Spoiler anzeigen
    [autoit]


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

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

    Dim $aZahlen[50], $hInput[6]
    For $i = 1 To 49
    $aZahlen[$i] = $i
    Next

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

    $hGui = GUICreate('test', 400, 300)
    For $i = 0 To 5
    $hInput[$i] = GUICtrlCreateInput('', 10 + $i * 40, 20, 35, 20, $ES_CENTER)
    Next
    $hStart = GUICtrlCreateButton('Start', 10, 60, 60, 20)
    GUISetState()

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

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $hStart
    _RandomNumber()
    EndSwitch
    WEnd

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

    Func _RandomNumber()
    Local $aTmp = $aZahlen
    For $i = 0 To 5
    $ran = Random(1, 49 - $i, 1)
    GUICtrlSetData($hInput[$i], $aTmp[$ran])
    $aTmp[$ran] = $aTmp[49 - $i]
    Next
    EndFunc

    [/autoit]
  • So alles klar....
    Hab jetzt die ganze Zeit versucht und bei jedem bisschen neugeschrieben...habe jetzt knapp 15 unterschiedliche Versionen aufm Desktop.

    Poste jetzt mal den Code und vll. kann mir einer sagen was ich noch verbessern könnte...ausser die kommentierung :D

    Ich verstehe nicht warum er wenn er meine beiden Array's vergleicht nicht die richtigen Zahlen findet...

    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=C:\Documents and Settings\buhralex.WOB\Desktop\lotto.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <GuiConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <Array.au3>
    #include <WindowsConstants.au3>

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

    ;Arrays
    Dim $ZahlenButtons[50], $Random[6], $Array[6] ;Legt 2 Arrays fest: $ZahlenButtons wird für die Zahlen 1-49 sein und Das Array $Random für die Lotto Zahlen
    Global $x = 10, $y = 10 ;Globale Konstanten für das Arrangemont der Buttons
    $AList = ObjCreate("System.Collections.ArrayList")

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

    ;Gui Optionen
    Opt('GUIOnEventMode', 1) ;Setzt das GUI auf den OnEvent Modus
    $Progname = "Lottomat" ;So heisst das Programm
    $guihoehe = 400 ;Legt eine Höhe von 400 Pixeln für das GUI fest
    $guibreite = 600 ;Hier wird eine Breite von 600 Pixel für das GUI festgelegt

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

    ;Informationen
    $Autor = "~ by Alexander Buhr" ;ist für die Spätere Info Datei im Tray Icon
    $Version = 1 ;Hauptversion des Programms
    $SubVersion = 0 ;Subversion des Programms

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

    ;Programm Variablen
    $StartPreis = 0 ;Legt den Preis beim Start des Programms Fest
    $Preis = 8 ;Legt den Preis für spätere Spiele fest
    $hoch = 1 ;Prüft die Anzahl der eingetippten Zahlen

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

    ;Ini Abfrage
    $Path = @ScriptDir & "\Data\Config\Jackpot.ini" ;Legt den Pfad der Ini fest
    $iniReadJackpot = IniRead($Path , "Jackpot", "Gewinn", "default") ;Hier wird der Jackpot aus der Ini eingelesen
    $IniWriteJackpot = IniWrite($Path , "Jackpot", "Gewinn", "default") ;Und hier wird er reingeschrieben

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

    If Not FileExists($path) Then ;Prüfung ob Ini Datei existiert
    MsgBox(0, "Installation", "Die benötigten Ordner werden erstellt")
    _install() ;Falls nicht wird die Funktion aufgerufen
    EndIf ;If Ende

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

    GUICreate($Progname & " " & $Version & "." & $SubVersion & " " & $Autor, $guibreite, $guihoehe)
    $start = GUICtrlCreateButton("LOTTO!", 450, 350, 100, 30)
    GuiCtrlSetOnEvent(-1, "_zufall")

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

    GUICtrlCreateLabel("Ausgaben:", 450, 180, 100,30)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("Heute:", 400, 215, 50,30)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateInput($Preis & " €", 450, 210, 100, 30)
    GUICtrlCreateLabel("Jackpot:", 400, 245, 50,30)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateInput($iniReadJackpot & " €", 450 ,240, 100,30)

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

    GUISetState(@SW_SHOW)

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

    ;Erstellen der 49 Buttons
    For $i = 1 to 49
    If $x >= 210 Then
    $x = 10
    $y += 30
    EndIf
    GUICtrlCreateButton($i, $x , $y,30,30)
    GuiCtrlSetOnEvent(-1, "_func")
    $x += 30
    Next

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

    GUICtrlCreatePic (@ScriptDir & "\Data\Pics\hg_lotto.JPG", 0, 0, $guibreite, $guihoehe)

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

    While 1
    Sleep(10)
    WEnd

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

    ; Function Name: _install()
    ; Erstellt die für das Programm nötigen Verzeichnisse falls diese nicht vorhanden sind
    ; und Installiert die benötigten Dateien gleich mit
    Func _install()
    DirCreate( @ScriptDir & "\Data\Config\")
    DirCreate(@ScriptDir & "\Data\Pics\")
    FileInstall("D:\buhralex\Data\Pics\hg_lotto.JPG", @ScriptDir & "\Data\Pics\hg_lotto.JPG",1)
    EndFunc

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

    Func _func()
    Switch @GUI_CtrlId
    Case $hoch = 1
    GUICtrlCreateInput(@Gui_CtrlID-8, 10, 300, 30, 30)
    GUICtrlDelete(@GUI_CtrlId)
    $AList.add (@GUI_CtrlId -8)
    $hoch = $hoch + 1
    Case $hoch = 2
    GUICtrlCreateInput(@Gui_CtrlID-8, 40, 300, 30, 30)
    GUICtrlDelete(@GUI_CtrlId)
    $AList.add (@GUI_CtrlId -8)
    $hoch = $hoch + 1
    Case $hoch = 3
    GUICtrlCreateInput(@Gui_CtrlID-8, 70, 300, 30, 30)
    GUICtrlDelete(@GUI_CtrlId)
    $AList.add (@GUI_CtrlId -8)
    $hoch = $hoch + 1
    Case $hoch = 4
    GUICtrlCreateInput(@Gui_CtrlID-8, 100, 300, 30, 30)
    GUICtrlDelete(@GUI_CtrlId)
    $AList.add (@GUI_CtrlId -8)
    $hoch = $hoch + 1
    Case $hoch = 5
    GUICtrlCreateInput(@Gui_CtrlID-8, 130, 300, 30, 30)
    GUICtrlDelete(@GUI_CtrlId)
    $AList.add (@GUI_CtrlId -8)
    $hoch = $hoch + 1
    Case $hoch = 6
    GUICtrlCreateInput(@Gui_CtrlID-8, 160, 300, 30, 30)
    GUICtrlDelete(@GUI_CtrlId)
    $AList.add (@GUI_CtrlId -8)
    $hoch = $hoch + 1
    Case Else
    MsgBox(0,"Error", "Sie können nicht mehr als 6 Zahlen auswählen.")
    EndSwitch
    $Array = $AList.ToArray ;kopiert Werte in ein Array (Liste ist immer noch vorhanden)
    EndFunc

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

    Func _zufall()
    $a = 300
    $b = 300
    $Preis = $Preis + 8
    GUICtrlCreateInput($Preis & " €", 450, 210, 100, 30)
    GUICtrlCreateInput($iniReadJackpot + $Preis & " €", 450 ,240, 100,30)
    For $zufall = 0 To 5
    $r = Random(1, UBound($ZahlenButtons)-1, 1)
    $Random[$zufall] = $r
    GUICtrlCreateInput($r, $a, $b, 30, 30)
    $a = $a + 30
    Next
    _vergleich()
    EndFunc

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

    Func _vergleich()
    _ArraySearch($Array, $Random)
    If @error Then
    MsgBox(0, "Nicht gefunden", $Array & " wurde in dem Array nicht gefunden.")
    Else
    MsgBox(0, "Gefunden", $Array & " wurde in dem Array an Stelle gefunden.")
    EndIf

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

    _ArrayDisplay($Random, "Random Array")
    _ArrayDisplay($Array, "Array Array")
    ;_ArrayDisplay($Array, "Array Array")

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

    EndFunc

    [/autoit]