GuiGetMsg() und ein Array

  • Hy,

    ich muss leider einen Thread erstellen, weil ich absolut nichts dazu finde (oder mir fällt der richtige Begriff nicht ein?).

    Folgendes:

    Ich erstelle mit einer For-Schleife einige Icons in einem Child-Window.

    [autoit]


    For $i = 1 To UBound($FileList) -1
    If $FileList[$i][0][0] = "" Then ExitLoop
    $array[$i] = GUICtrlCreateIcon($Sourcepath & "\" & $FileList[$i][0][0] & "\Icon.ico",-1,30,($i-1)*130,128,128)
    GUICtrlSetCursor(-1, 0)
    Next

    [/autoit]


    Jetzt will ich natürlich bei jedem einzelnem Icon, bzw Klick auf ein Icon eine andere Aktion haben(im 2. Fenster etwas laden), da sich der Inhalt ja ändern kann, jenachdem wieviel Ordner ich einlese.

    Die Frage ist, wie kann ich das Array bei GuiGetMsg() abfragen lassen? 90 Stück zu Schreiben wäre doch ein bisschen übertrieben :pinch:

    Gibt es irgendwie eine einfache Möglichkeit wie bei den Radio-Buttons?

    [autoit]


    Case $msg >= $radio_1 AND $msg <= $radio_3

    [/autoit]

    Ich hoffe die Frage hört sich nicht allzu bescheuert an. Ich bin für jeden Tip dankbar :)

    autoit.de/wcf/attachment/5947/

    Einmal editiert, zuletzt von Metzlmane (2. September 2009 um 17:07)

  • Hier ein Beispiel für den OnEvent-Modus:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <windowsconstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    $GUI = GUICreate("On-Event-Modus")
    GUISetOnEvent(-3, '_Exit')

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

    For $i = 0 To 18
    GUICtrlCreateButton('Button ' & $i + 1, 10, 10 + 20 * $i, 50, 18)
    GUICtrlSetOnEvent(-1, '_Button_Clicked')
    Next

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

    GUISetState()

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

    While True
    Sleep(10000)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func _Button_Clicked()
    MsgBox(0, "Button", GUICtrlRead(@GUI_CtrlId))
    EndFunc ;==>_Button_Clicked

    [/autoit]
  • Zitat

    Jetzt will ich natürlich bei jedem einzelnem Icon, bzw Klick auf ein Icon eine andere Aktion haben(im 2. Fenster etwas laden), da sich der Inhalt ja ändern kann, jenachdem wieviel Ordner ich einlese.

    Behebt dieses Problem aber nicht, irgendwie ist aber auch nicht klar nach welchem Muster die verschiedenen Aktionen den Icons zugeordnet werden sollen.

    • Offizieller Beitrag

    Hier mal ein Beispiel im MessageMode:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Dim $array[19]
    $GUI = GUICreate("On-Event-Modus")

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

    For $i = 0 To 18
    $array[$i] = GUICtrlCreateButton('Button ' & $i + 1, 10, 10 + 20 * $i, 50, 18)
    Next

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

    GUISetState()
    While 1
    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $array[0] To $array[18]
    $hTmp = $nMsg - $array[0] + 1
    MsgBox(0, "Info", "Button " & $hTmp & " wurde gedrückt")
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Damit werden die Buttons oder wenn du willst Icons abgefragt.

  • Raupi .

    Habe etwas mit Deinem o. g. Script ausprobiert. Hatte mir die Frage gestellt, was ist wenn man schon mal die 19 Buttons erstellt, aber nur 3 Davon belegt? Muß man dann ein "Case" für alle 19 Button schon schreiben, oder kann man ab dem ersten nicht belegten Button sich die ganzen unbelegten Button-"Case" durch nur ein "Case" ersparen???

    Hatte erst bisschen Probleme, aber dann bin ich folgender Lösung gekommen. Ich weiß, das viele jetzt denken das ist doch klar, aber ich denke da an die Anfänger/innen, die evtl. sich das auch gefragt haben.

    So, einfach schauen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>

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

    Dim $array[19]
    $GUI = GUICreate("On-Event-Modus")

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

    For $i = 0 To 18
    $array[$i] = GUICtrlCreateButton('Button ' & $i + 1, 10, 10 + 20 * $i, 50, 18)
    Next

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

    GUISetState()
    While 1
    $nMsg = GUIGetMsg()

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

    Switch $nMsg
    Case $array[0]; To $array[18]
    $hTmp = $nMsg - $array[0] + 1
    MsgBox(0, "Info", "Button " & $hTmp & " wurde belegt.")
    Case $array[1]; To $array[18]
    $hTmp = $nMsg - $array[1] + 2
    MsgBox(0, "Info", "Button " & $hTmp & " wurde auch belegt.")
    Case $array[2]; To $array[18]
    $hTmp = $nMsg - $array[2] + 3
    MsgBox(0, "Info", "Ich bin ein Button mit der Nummer: " & $hTmp)

    Case $array[0] To $array[18]
    $hTmp = $nMsg - $array[0] + 1
    MsgBox(0, "Info", "Funktion für Button " & $hTmp & " noch nicht belegt !!!" & @CRLF & @CRLF & "B-I-T-T-E H-A-B-E-N S-I-E G-E-D-U-L-D")

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

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

    • Offizieller Beitrag

    Alina

    Wenn du die Buttons 4 ($array[3]) bis Button 19($array[18]) auf einmal abfragen willst wäre das dann:

    [autoit]

    Case $array[3] To $array[18]
    $hTmp = $nMsg - $array[3] + 4
    MsgBox(0, "Info", "Funktion für Button " & $hTmp & " noch nicht belegt !!!" & @CRLF & @CRLF & "B-I-T-T-E H-A-B-E-N S-I-E G-E-D-U-L-D")

    [/autoit]

    Edit: Zur Berechnung ist folgendes zu erklären:

    Case $array[3] To $array[18] bedeutet ControlId von $array[3] bis $array[18] im Beispiel 6 bis 21
    Sagen wir mal du drückst Button4 ($array[3]) würde die $nMsg 6 sein.
    $hTmp = $nMsg - $array[3] + 4 = 6 - 6 + 4 =4

    Dein Codeteil:

    [autoit]

    Case $array[0] To $array[18]
    $hTmp = $nMsg - $array[0] + 1
    MsgBox(0, "Info", "Funktion für Button " & $hTmp & " noch nicht belegt !!!" & @CRLF & @CRLF & "B-I-T-T-E H-A-B-E-N S-I-E G-E-D-U-L-D")

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

    Funktioniert nur, weil $array[0] bis $array[2] vorher in deiner Case abfrage schon abgefangen wurden. Wenn du Sie vor die anderen Abfragen stellst, funzt das Scipt nicht mehr richtig. ;)