Button automatisch einen Befehl zuweisen!

  • Hi Leute

    hier erstmal mein skript:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****#AutoIt3Wrapper_Icon=Pixture-Board-Game-Dice-1.ico#AutoIt3Wrapper_Outfile=Spielewürfel.exe#AutoIt3Wrapper_Res_Fileversion=1.0#AutoIt3Wrapper_Res_Language=1031#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****#cs ----------------------------------------------------------------------------
    AutoIt Version: 3.3.12.0 Author: Idea: Rorco Hawis Scriptings: Marbert Hawis
    Script Function: Random Game choice!
    #ce ----------------------------------------------------------------------------#include <MsgBoxConstants.au3>#include <File.au3>#include <Array.au3>#include <StringConstants.au3>#include <Constants.au3>#include <GUIConstantsEx.au3>#include <WindowsConstants.au3>#include <GuiButton.au3>

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

    #cs Pfad Selection--------------------------------------------------------------------------------#ce$Fileex = FileExists(@ScriptDir&"\Creul.txt")if $Fileex=0 Then $Dir1 = FileSelectFolder("Bitte Ordner Wählen.",@scriptdir) _FileCreate(@ScriptDir&"\Creul.txt")FileWrite(@ScriptDir&"\Creul.txt",$Dir1)EndIf$Dir = FileReadLine(@ScriptDir&"\Creul.txt")#cs Pfad Selection--------------------------------------------------------------------------------#ceAutoItSetOption("GUIResizeMode",802)Global $Gamewuerfel = GUICreate("Gamewürfel")$buttonR= GUICtrlCreateButton("Random",10,10)Dim $ButtonArray[0]$Pos1=10$Pos2=60$zaehler=0$z=_FileListToArray($Dir)for $o = 1 to UBound($z)-1 _ArrayAdd($ButtonArray, GUICtrlCreateButton($z[$o],$Pos1,$Pos2)) $zaehler+=1 $Pos2+=45 If $zaehler =7 Then $Pos1 += 250 $Pos2 = 60 $zaehler = 0 WinMove($Gamewuerfel,"",Default,Default,$Pos1+200,410)$size=WinGetClientSize($Gamewuerfel) EndIfNextGUICtrlSetPos($buttonR,$size[0]/2)GUISetState(@SW_SHOW)

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

    While 1 Switch GUIGetMsg() Case $buttonR $answer = MsgBox(3,"Multiplayer?","Willst du ein Multiplayerspiel spielen?") if $answer = 2 Then stop() ElseIf $answer = 6 Then DiceingMS() ElseIf $answer = 7 Then DiceingNoMS() EndIf stop()
    Case $GUI_EVENT_CLOSE ExitLoop EndSwitchWEnd
    Func DiceingNoMS() $Spiel = _FileListToArray($Dir) $Wen = Random(1,UBound($Spiel),1) ShellExecute($Dir&""&$Spiel[$Wen])EndFunc

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

    Func DiceingMS() $a = _FileListToArray($Dir)
    Dim $Spielms[1] for $i = 0 to UBound($a)-1 If StringRegExp($a[$i],"ms1") Then _ArrayAdd($Spielms,$a[$i])
    EndIf Next$Wenms = Random(1,Ubound($Spielms)-1,1)ConsoleWrite(UBound($Spielms))ShellExecute($Dir&""&$Spielms[$Wenms])
    EndFunc

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

    Func stop() ExitEndFunc

    [/autoit]




    Habe nun folgendes Problem, in dem Ordner den ich am Anfang angebe sind nur Verknüpfungen von Spielen. Die GUI wird erstellt und es werden soviele Buttons erstellt und angeordnet wie es Verknüpfungen gibt, denen wird auch der Name der in dem Array ist passend zugeordnet. Hat jemand eine Idee wie ich diesen Buttons dann automatisch die richtige Funktion zum ausführen der Verknüpfung zuweisen kann?


    Danke im Vorraus
    Gruß Flair

    2 Mal editiert, zuletzt von FlairSecret (24. August 2014 um 15:32)

  • Ich weiß jetzt nicht genau, wie dein Quelltext aussieht (nächstes mal am besten die au3 anhängen), aber:
    Trag die Pfade in ein Array ein. Dann erstellst du die Buttons nach diesem Array in einer for-Schleife und trägst auch die in ein Array ein.
    Beim erstellen der Buttons setzt du das guictrlsetonevent(-1,"_buttonPressed") für alle Buttons.
    In der genannten Funktion nutzt du _ArraySearch($buttons,@GUI_CtrlId,0,0,0,0,1,[SubItem]) mit SubItem als die Zahl, wo die Buttons stehen. Die Funktion gibt dir den Index-Wert zurück. Mit diesem fragst du dann in dem Array das andere SubItem ab und dort hast du dann ja den Pfad zur Verknüpfung :)

    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <string.au3>
    #include <GUIConstantsEx.au3>
    Opt("GUIOnEventMode", 1)

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

    $Folder="D:\Desktop\programme\Spiele";FileSelectFolder("Öffne Ordner",@DesktopDir)
    $search=FileFindFirstFile($Folder&"\*.lnk")
    $files=@crlf
    while @error<>1
    $path=FileFindNextFile($search)
    $files&=$path&@crlf
    WEnd
    $arFiles=_StringBetween($files,@crlf,@crlf)
    global $arPaths[UBound($arFiles)-1][3]
    $gui=GUICreate("test",420,(UBound($arFiles)-1)*25+20)
    for $i=0 to UBound($arPaths)-1 step 1
    $arData=FileGetShortcut($Folder&""&$arFiles[$i])
    $arPaths[$i][0]=$arData[0]
    $arPaths[$i][1]=StringReplace($arFiles[$i],".lnk","")
    $arPaths[$i][2]=GUICtrlCreateButton($arPaths[$i][1],10,10+$i*25,400)
    GUICtrlSetOnEvent(-1,"_ButtonPressed")
    next
    GUISetOnEvent($GUI_EVENT_CLOSE,"_Close")
    GUISetState(@SW_SHOW)

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

    while sleep(100)
    WEnd

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

    Func _ButtonPressed()
    $ID=@GUI_CtrlId
    $index=_ArraySearch($arPaths,$ID,0,0,0,0,1,2)
    msgbox(48,"",$arPaths[$index][0])
    Run($arPaths[$index][0])
    EndFunc

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

    Func _Close()
    exit
    EndFunc

    [/autoit]
  • Ich weiß jetzt nicht genau, wie dein Quelltext aussieht (nächstes mal am besten die au3 anhängen), aber:
    Trag die Pfade in ein Array ein. Dann erstellst du die Buttons nach diesem Array in einer for-Schleife und trägst auch die in ein Array ein.
    Beim erstellen der Buttons setzt du das guictrlsetonevent(-1,"_buttonPressed") für alle Buttons.
    In der genannten Funktion nutzt du _ArraySearch($buttons,@GUI_CtrlId,0,0,0,0,1,[SubItem]) mit SubItem als die Zahl, wo die Buttons stehen. Die Funktion gibt dir den Index-Wert zurück. Mit diesem fragst du dann in dem Array das andere SubItem ab und dort hast du dann ja den Pfad zur Verknüpfung :)


    Habe die Datei mal angehängt, verstehe nicht ganz wie du das meintest die Buttons werden schon mit einem array und einer Schleife generiert das Passt fehlt nur noch die Funktion für die Buttons.