Dynamisches Icon-Menü überprüfen

  • Hallo liebe Leute,

    ich habe einen Skript (Progamm) geschrieben der es mir ermöglicht über eine .ini Datei mit bestimmten Parametern Icons in einem Menü zu erzeugen. Die Icons werden über die GUICtrlCreateIcon Funktion in einem Tab mit den Informationen aus der .ini Datei erzeugt. Mein Problem ist das ich wie beim russischen Roulett über die GUIGetMsg() Funktion versuche rauszufinden was der User gerade angeklickt hat um das Programm wofür das Icon gedacht wurde zu starten. Meine Daten liegen in einem Array der die ID des Icons beinhaltet.

    Vielleicht hat wer noch irgendeine Idee.

    So sieht momentan mein Interface aus:

    [Blockierte Grafik: http://s1.directupload.net/images/110621/r8vrs6x4.jpg]

    Einmal editiert, zuletzt von RedXIV (21. Juni 2011 um 16:15)

  • Poste doch mal bitte den Quellcode zu deiner GUI und am besten auch eine dazu passende ini Datei und sample icons als Anhang. Normalerweise geht man beim msgloop modus eben sämtliche im array gespeicherten controlids durch, falls du das mit russischem Roulette meintest wüsste ich nicht wie man das anders machen sollte. Es gibt aber auch noch den on event mode dort kann man das anders realisieren.

  • Versuchs mal über die OnEventMode Methode.

    [autoit]

    Opt ("GUIOnEventMode", 1)
    GuiCtrlSetOnEvent()

    [/autoit]
  • Du könntest dir auch überlegen, die Icons durch ein Listview zu ersetzen. Die Klickabfrage muss dann aber über GUIRegisterMsg mit $WM_NOTIFY erfolgen.

  • So das Problem hat sich jetzt dank der GuiCtrlSetOnEvent() Geschichte erledigt. Da er jetzt nicht mehr nach der passenden ID in einer Endlosschleife suchen muss sondern einen Trigger hat (nämlich in diesem Fall meine Funktion) kann ich die ID raussuchen und das Programm starten. Danke Jungs!

    2 Mal editiert, zuletzt von RedXIV (21. Juni 2011 um 16:10)

  • Du brauchst nur eine Event-Funktion

    Spoiler anzeigen
    [autoit]

    Opt("GUIOnEventMode", 1)

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

    GUICreate("test")
    GUISetOnEvent(-3, "_Exit")
    Global $b[2][2]
    $b[0][0] = GUICtrlCreateButton("1", 10, 10, 100, 20)
    $b[0][1] = "foo"
    GUICtrlSetOnEvent(-1, "_Click")
    $b[1][0] = GUICtrlCreateButton("2", 10, 100, 100, 20)
    $b[1][1] = "bar"
    GUICtrlSetOnEvent(-1, "_Click")

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

    GUISetState()

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

    While Sleep(100)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func _Click()
    For $i = 0 To UBound($b)-1
    If $b[$i][0] = @GUI_CtrlId Then
    MsgBox(0, '', $b[$i][1])
    Return
    EndIf
    Next
    EndFunc

    [/autoit]

    PS: Hatte die Listview auch den Icon-Style (wie der Desktop?)

  • hat sich schon erleidgt, hatte die Konstante in der Hilfe übersehen. Danke trotzdem nochmal.

    Überarbeite nochmal den Code und poste ihn dann mal, da er gerade seeeeeeehr unübersichtlich ist.