Klich auf Icons abfragen

  • Als Einsteiger ist mir klar, wie ich "normalen" Icons abfrage ob sie angeklickt wurden. Aber wie kann ich Icons abfragen die in einer Schleife erstellt wurden? In meinen Programm geht es ungefähr so:

    $Icons[$GesamtIcons] = GUICtrlCreateIcon($Icon, -1, .........
    $GesamtIcons = $GesamtIcons + 1

    und später dann wieder:
    $Icons[$GesamtIcons] = GUICtrlCreateIcon($Icon, -1, .........

    Wie kann ich abfragen auf welches von diesen Icons geklickt wird

    Vielen Dank dem der sich zu einer Antwort aufraffen kann
    V206

    2 Mal editiert, zuletzt von v206 (25. Juli 2012 um 18:36)

  • Case $Icons[0] To $Icons[n]

    Und dann halt genauer mit If $iMsg prüfen in einer For-Schleife

    Also so:
    Icons erstellen

    [autoit]

    For $i = 0 To UBound($Icons) - 1
    $Icons[$i] = GUICtrlCreateIcon($Icon, -1, .........
    Next

    [/autoit]

    Icons abfragen

    [autoit]

    Case $Icons[0] to $Icons[UBound($Icons) - 1]
    For $i = 0 To UBound($Icons) - 1
    If $iMsg = $Icons[$i] Then
    ....
    EndIf
    Next

    [/autoit]
  • [autoit]

    ; Gui, Icons, etc...

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

    Global $i_Msg
    While True
    $i_Msg = GUIGetMsg ()
    Switch $i_Msg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

    For $i = 0 To UBound ($Icons) - 1
    If $i_Msg = $Icons[$i] Then ExitLoop MsgBox (0, '', 'Sie haben auf Icon Nr.' & $i + 1 & ' geklickt')
    Next
    WEnd

    [/autoit]

    So in der Art würde ich es machen...

  • Die Art würde mir schon gefallen und auch wenn's noch nicht so recht will schon mal ein Danke im Voraus.

    Ich habe es so wie var vorgeschlagen eingebaut. Aber wenn ich jetzt das Programm starte bekomme ich sofort die Meldung, dass ich auf ein Icon geklickt habe. Das mach er von 0 bis zur der Anzahl die ich die variable dimensioniert habe und dann beginnt er wieder von neuem. ;(

  • Weil deine Variablen keine Handles enthalten.
    GUIGetMsg gibt 0 zurück, wenn nichts angeklickt wird... Somit stimmen die Events überein und du bekommst eine MsgBox.

  • Wenn die Icons in einer Schleife fortlaufend erzeugt wurden wird bei der Abfrage welches gedrückt wurde keine For-Schleife benötigt, eine simple Rechnung tut es auch: IconId = MsgId-Id des ersten Icons.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <File.au3>
    #include <Array.au3>

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

    $aFiles = _FileListToArray(@WindowsDir & "\cursors\", "*.ani", 1)
    _ArrayDelete($aFiles,0)

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

    Global $aIcons[10]

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

    GUICreate("Meine GUI Icons", 250, 450)
    For $i = 0 To UBound($aIcons) - 1
    $aIcons[$i] = GUICtrlCreateIcon(@WindowsDir & "\cursors\" & $aFiles[$i], -1, 10, 5 + $i * 40, 32, 32)
    Next

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $aIcons[0] To $aIcons[UBound($aIcons) - 1]
    $iIconId = $msg - $aIcons[0]
    MsgBox(0, "Icon-Klick", "ID = " & $aIcons[$iIconId] & " Name: " & $aFiles[$iIconId])
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert

  • Dann an die beiden Helfer. Der Grund warum es beim ersten mal nicht ging war ein reiner Anfängerfehler und hatte nichts mit eurer Lösung zu tun.

    Nochmal danke

  • Um keine unnötigen Einträge zu erzeugen habe ich den alten Thread nochmal geöffnet.

    Darf ich die geduldigen Helfer noch einmal um Rat fragen?

    Wenn ich nun mehrer dieser Icons erzeugt habe, wie kann ich sie so abspeichern, dass ich sie später wieder laden und auf meiner GUI mit dem selben Bild am gleichen Ort wieder zu finde?