Dynamische Erstellung von Funktionen ... wie geht das?

  • Hallo,

    in meinem Code nutze ich folgendes:

    [autoit]

    $search = FileFindFirstFile('Skripte\*.bat')
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    If $file <> '' Then
    $tmp = StringReplace($file, '.bat', '')
    _TrayCreateItem(-1, $tmp, $tray_ipskripte)
    _TrayItemSetIcon(-1, "cmd.exe", 0)
    ;GUICtrlSetOnEvent($tmp, 'funktion')
    EndIf
    WEnd
    FileClose($search)

    [/autoit]

    Dieser Code durchsucht den Ordner Skripte und schreibt mir die Namen in mein Traymenü. Das klappt ja auch. Jetzt soll bei Klick auf den enstprechenden Eintrag aber auch die entsprechende Batch-Datei gestartet werden. Ich hab ein wenig rumprobiert, weiss aber nicht wie ich das lösen soll. Ich nehme an das ich ein Array brauch um bei jedem Durchgang der Schleife einen anderen Namen zu haben. Wie kann ich aber auch die Funktionen entsprechend anlegen lassen?

    Ich hoffe es ist ein wenig verständlich was ich mein und euch reicht dieser Codeabschnitt (der ganze wäre 800 Zeilen und das tut ja auch eigentlich nichts zu Sache ^^).


    In der Hoffnung auf Unterstützung

    Gruß

    nasgul

    Einmal editiert, zuletzt von nasgul (3. August 2008 um 18:24)

  • Ja, wo fragt man bei Modern menu nochmal den Klick ab? Ganz normal, oder ?
    dann beim erstellen:

    [autoit]

    ReDim $TrayItemArray[Ubound($TrayItemArray)+1]
    $TrayItemArray[Ubound($TrayItemArray)-1] = _TrayCreateItem(

    [/autoit]


    zum Abfragen dann eine Schleife:

    [autoit]

    $msg = TrayGetMsg()
    For $i = 0 To $Ubound($TrayItemArray)-1
    If $msg = $TrayItemArray[$i] then
    ; Was machen :)
    EndIf
    Next

    [/autoit]
  • Wie sieht das denn im GUIOnEventMode mit der Abfrage aus? Steh irgendwie auf dem Schlauch, sry ...

  • hab jetzt mal ein ähnliches Skript geschrieben

    Spoiler anzeigen
    [autoit]


    #include <File.au3>

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

    $batfiles = _FileListToArray(@ScriptDir & "\Skripte", "*.bat", 1)
    If IsArray($batfiles) Then

    For $x = 1 To UBound($batfiles) - 1

    TrayCreateItem(StringReplace($batfiles[$x], ".bat", ""))
    TrayItemSetOnEvent(-1, "_runbat")

    Next
    EndIf

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

    Func _runbat()

    ShellExecute(@ScriptDir & "\Skripte\" & TrayItemGetText(@TRAY_ID))

    EndFunc

    [/autoit]
  • Hab mir die ModernMenu UDF noch mal angeschaut... Da werden keine rayMenus erstellt, sondern GUICtrlCreateMenu(Item) Also ist das Traymenu mit GUIOnEventMode im Event-Modus und ein Ereignis wird mit GUICtrlSetOnEvent erstellt :)

  • danke, ihr habt mir wie immer sehr geholfen. was mir gefehlt hat war die abfrage des geklickten elements aus dem tray. das habt ihr in einem anderen beitrag aber schon gelöst:

    _GetMenuText(@GUI_CtrlId)

    das war der teil der mir die ganze zeit gefehlt hat!!!

    danke euch allen!

    gruß
    nasgul