array an func übergeben

  • hallo,

    seit ein paar stunden kämpfe ich schon wieder mit einem (wahrscheinlich) anfängerproblem:

    array an func übergeben und mit den werten des arrays in der func arbeiten


    das hab ich vor:

    hab ein array mit acht werten eingelesen.

    mit diesen werten erzeuge ich in einem gui menü-punkte


    $menue_punkte=GUICtrlCreateContextMenu()

    FOR $I=1 TO 8
    GUICtrlCreateMenuitem ($my_array[$I],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    NEXT


    beim clicken auf die einzelnen menüpunkte soll das script in die func machwas springen und dann mit den einzelnen werten des array weiter arbeiten:

    func machwas()
    msgbox(0,'info',$my_array[$I])
    endfunc

    so ähnlich hab ich mir das gedacht, aber irgendwie fehlt im die zuordnung der einzelnen werte des arrays.

    ich hoffe, ich hab einigermassen verständlich erklärt, was mein problem ist. mein eigentliches script ist noch etwas komplizierter.


    wo liegt mein fehler?

    danke

    so long

    sam

  • ma nen beispiel...

    [autoit]

    #include
    Global $array[5]
    For $i = 0 To UBound($array)-1
    $array[$i] = Random(1,100)
    Next
    _123($array)

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

    Func _123($array)
    _ArrayDisplay($array)
    EndFunc

    [/autoit]


    </array.au3>

    • Offizieller Beitrag

    Hab nicht ganz verstanden, was du willst. Aber du brauchst ein Handle für die Items um sie anzusprechen. Also nimm sie mit in das Array auf.
    Hier ein Muster:

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    Opt("GUIOnEventMode", 1)
    Dim $my_array[8][2] ;[0]-ID , [1]-Titel
    For $i = 0 To UBound($my_array) -1
    $my_array[$I][1] = 'Item ' & $I+1
    Next
    GUICreate('test')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $menue_punkte=GUICtrlCreateContextMenu()
    GUISetState()

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

    FOR $I=0 TO 7
    $my_array[$I][0] = GUICtrlCreateMenuitem ($my_array[$I][1],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas'& $I)
    NEXT

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

    While 1
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    func machwas0()
    msgbox(0,'info', 0)
    endfunc
    func machwas1()
    msgbox(0,'info', 1)
    endfunc
    func machwas2()
    msgbox(0,'info', 2)
    endfunc
    func machwas3()
    msgbox(0,'info', 3)
    endfunc
    func machwas4()
    msgbox(0,'info', 4)
    endfunc
    func machwas5()
    msgbox(0,'info', 5)
    endfunc
    func machwas6()
    msgbox(0,'info', 6)
    endfunc
    func machwas7()
    msgbox(0,'info', 7)
    endfunc

    [/autoit]
  • Bin mir nicht ganz sicher was du meinst aber ich rate mal:
    Du willst die Werte eines Arrays in einer Funktion bearbeiten in dem das Array als Parameter übergeben wird?

    Wenn ja dann heißt das Zauberwort "ByRef".
    Normalerweise wird bei einer Parameterübergabe an eine Funktion eine Kopie der Variable erstellt mit der dann die Funktion arbeitet.
    Das heißt aber das die eigentliche Ursprungsvariable von der der Wert ja kommt von der Funktion nicht verändert werden kann.
    Will man das muss man die Variable in der Funktiondefinition als "ByRef" deklarieren - dabei wird direkt ein Verweis auf die Originalvariable übergeben.

    Mal als Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    Dim $array[5] = [1,2,3,4,5]

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

    _ArrayDisplay($array)
    _123($array)
    _ArrayDisplay($array)

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

    Func _123(ByRef $array)
    For $i = 0 To UBound($array) - 1
    $array[$i] += 1
    Next
    EndFunc

    [/autoit]
  • hallo leute,

    danke für die schnellen antworten. leider noch nicht das dabei, was ich brauche bzw. für mich umsetzen kann. und nachdem zwei von euch gesagt haben, dass ihr noch nicht so recht wisst, was ich eigentlich will, hier einfach mein script und nochmal der versuch zu erkären, was es macht bzw nicht:


    Spoiler anzeigen

    AUTOITSETOPTION('TRAYICONHIDE', 0)
    AUTOITSETOPTION('TRAYMENUMODE', 1)
    AUTOITSETOPTION('TRAYONEVENTMODE',1)
    AUTOITSETOPTION('GUIONEVENTMODE', 1)

    #INCLUDE<FILE.AU3>
    #INCLUDE<ARRAY.AU3>
    #INCLUDE<CONSTANTS.AU3>
    #INCLUDE<GUICONSTANTS.AU3>

    TRAYSETTOOLTIP('COMPARE')

    TRAYSETCLICK( ' 8') ; die acht steht hier nur in hochkomma, weil hier sonst ein smiley draus wird
    TRAYSETSTATE( )

    $FILELIST=_FILELISTTOARRAY(@SCRIPTDIR&'\XX','SESSION.BCSE.*',1)
    _ARRAYSORT($FILELIST, 0,1)
    $NAMELIST=_ARRAYTRIM($FILELIST,13,0)

    $L=GUICREATE('L',1,1,@DESKTOPWIDTH+1,@DESKTOPHEIGHT+1,$WS_POPUP,$WS_EX_TRANSPARENT+$WS_EX_TOOLWINDOW)
    $X=GUICTRLCREATECONTEXTMENU()
    FOR $I=2 TO $FILELIST[0]
    GUICTRLCREATEMENUITEM($NAMELIST[$I],$X)
    GUICTRLSETONEVENT(-1,'Y')
    NEXT
    GUISETSTATE()

    TRAYSETONEVENT($TRAY_EVENT_PRIMARYDOWN,'L')
    TRAYCREATEITEM('EXIT')
    TRAYITEMSETONEVENT(-1, 'R')

    WHILE 1
    SLEEP(100)
    WEND

    FUNC L()
    CONTROLCLICK($L,'','','RIGHT')
    ENDFUNC

    FUNC Y(ByRef $I)

    msgbox(0,'',$FILELIST[$I])

    ;FILESETATTRIB(@SCRIPTDIR&'\SESSION.BCSE','-RA')
    ; FILECOPY(@SCRIPTDIR&'\XX\'&$FILELIST[$I],@SCRIPTDIR&'\SESSION.BCSE',1)
    ; RUNWAIT(@SCRIPTDIR&'\BC2.EXE')
    ;FILESETATTRIB(@SCRIPTDIR&'\SESSION.BCSE','-RA')
    ; FILECOPY(@SCRIPTDIR&'\XX\SESSION.BCSE.000',@SCRIPTDIR&'\SESSION.BCSE',1)

    ENDFUNC

    FUNC R()
    EXIT
    ENDFUNC


    das script liesst aus einem unterverzeichnis xx dateinamen ein, als da wären

    SESSION.BCSE.000

    SESSION.BCSE.BIN

    SESSION.BCSE.CRC

    SESSION.BCSE.STD

    usw.

    diese namen kürzt es zu

    000

    BIN

    CRC

    STD

    usw.


    daraus enstehen menüpunkte für ein trayicon.


    je nachdem, welchen menüpunkt man wählt, sollen die dazugehörigen dateien üder die func y kopiert werden.

    aber hier scheitert die zuordnung.


    jetzt etwas klarer, was ich mach bzw. vor hab?


    so long


    sam

    • Offizieller Beitrag

    Das ist genau das, was ich in meinem Bsp. gezeigt habe.
    Nur habe ich einfach Werte erfunden.
    Grundprinzip ist ein Array das an Array[0] das Handle des Items führt und an Array[1] die Bezeichnung des Items.
    Bei der Erstellung des Items mußt du das dabei zurückgegebene Handle an das Array übergeben und dafür das Event erstellen.

    Siehe mein Bsp. oben, ist ausführbar und funktioniert.

    Edit: Ahh, jetzt versteh ich, was du meinst. Du möchtest nur eine Funktion verwenden und den Itemnamen als Parameter übergeben.
    Das geht leider so nicht. MIt GUIControlSetOnEvent() kannst du keine parameterhaltigen Funktionen erstellen.
    Mal sehen, vielleicht fällt mir noch was ein.

  • Vielleicht so etwas in der Art ...

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>

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

    Opt('GUIOnEventMode', 1)

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

    Dim $my_array[8]
    $my_array[0] = 'eins'
    $my_array[1] = 'zwei'
    $my_array[2] = 'drei'
    $my_array[3] = 'vier'
    $my_array[4] = 'fünf'
    $my_array[5] = 'sechs'
    $my_array[6] = 'sieben'
    $my_array[7] = 'acht'

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

    GUICreate('test')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $menue_punkte=GUICtrlCreateContextMenu()
    GUISetState()

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

    For $i = 0 To UBound($my_array) -1
    Switch $i
    Case 0
    $hItem1 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 1
    $hItem2 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 2
    $hItem3 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 3
    $hItem4 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 4
    $hItem5 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 5
    $hItem6 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 6
    $hItem7 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    Case 7
    $hItem8 = GUICtrlCreateMenuitem ($my_array[$i],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    EndSwitch

    Next


    While 1
    Sleep(10)
    Wend

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

    Func machwas()

    $idItemX = @GUI_CTRLID

    Switch $idItemX
    Case 4
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "eins" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 5
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "zwei" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 6
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "drei" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 7
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "vier" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 8
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "fünf" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 9
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "sechs" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 10
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "sieben" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    Case 11
    MsgBox(64, 'Menuitem clicked ...', 'Menuitem "acht" wurde angeklickt !' & @CRLF & 'Control ID = ' & $idItemX)
    EndSwitch

    EndFunc

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

    Func _End()

    Exit

    EndFunc

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


    Gruß
    Greenhorn

    Edit: Die Anzeige des Quellcodes ist komisch formatiert, seit dem neuen Board ... Ich meine die Abstände der Tabs.


    2 Mal editiert, zuletzt von Greenhorn (6. Dezember 2007 um 02:03)

  • hi bugfix,

    sorry, hab beim ersten probieren deines scripts nicht gleich geschnallt, was es macht. funktioniert soweit natuerlich.

    aber: wenn ich es bei mir so mache, wie in deinem beispiel, muss ich im script soviele func erzeugen, wie ich dateien einlese. der witz an meinem script sollte sein, dass ich das script gar nicht mehr anfassen muss, sondern das ganze durch hinzufügen neuer dateien SESSION.BCSE.123 im verzeichnis xx erweitert wird.


    PS: jetzt warst du schneller ...

    • Offizieller Beitrag

    Mit der Control-ID ist der richtige Weg.
    Dazu brauchst du dann noch meine _Array2DSearch-Funktion (Signatur).

    Hier alles komplett:

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    Opt("GUIOnEventMode", 1)
    Dim $my_array[8][2] ;[0]-ID , [1]-Titel
    For $i = 0 To UBound($my_array) -1
    $my_array[$I][1] = 'Item ' & $I+1
    Next
    GUICreate('test')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $menue_punkte=GUICtrlCreateContextMenu()
    GUISetState()

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

    FOR $I=0 TO 7
    $my_array[$I][0] = GUICtrlCreateMenuitem ($my_array[$I][1],$menue_punkte)
    GUICtrlSetOnEvent (-1,'machwas')
    NEXT

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

    While 1
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    func machwas()
    $found = _Array2DSearch($my_array, @GUI_CtrlId, 0, 0, 0, 1, False, True)
    If $found[0] <> -1 Then
    $found = StringSplit($found[0], '|')
    msgbox(0,'info',$my_array[$found[1]][1])
    EndIf
    endfunc

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

    ;----------------------------------------------------------------------------------------------------------------------
    ;
    ; Function _Array2DSearch(ByRef $avArray, $vWhat2Find [, $iDim=-1 [, $iStart=0 [, $iEnd=0 [, $iCaseSense=0 [, $fPartialSearch=False [, $1stFound=False]]]]]])
    ;
    ; Description Finds all Entry's like $vWhat2Find in an 1D/2D Array
    ; Works with all occurences in 2nd Dimension
    ; Search in all occurences or only in a given column
    ; To set numeric values for default, you can use -1
    ;
    ; Parameter $avArray The array to search
    ; $vWhat2Find What to search $avArray for
    ; optional $iDim Index of Dimension to search; default -1 (all)
    ; optional $iStart Start array index for search; default 0
    ; optional $iEnd End array index for search; default 0
    ; optional $iCaseSense If set to 1 then search is case sensitive; default 0
    ; optional $fPartialSearch If set to True then executes a partial search. default False
    ; optional $1stFound If set to True, only one match will be searched; default False
    ;
    ; Return Succes Array with Index of matches, Array[0] includes the count of matches
    ; In an 2D Array you got for every match [iRow|iCol]
    ; Array[0] = 0 if no element found
    ; If option 1stFound is set, Array[0] = FoundIndex; if no element found Array[0] = -1
    ; Failure 0 and set @error
    ; @error = 1 given array is not array
    ; @error = 2 given dim is out of range
    ; @error = 4 $iStart is out of range
    ; @error = 8 $iEnd is out of range
    ;
    ; Author BugFix ([email='bugfix@autoit.de'][/email])
    ;----------------------------------------------------------------------------------------------------------------------
    Func _Array2DSearch(ByRef $avArray, $vWhat2Find, $iDim=-1, $iStart=0, $iEnd=0, $iCaseSense=0, $fPartialSearch=False, $1stFound=False)
    Local $error = 0, $1D, $arFound[1]=[0]
    If $1stFound Then $arFound[0] = -1
    If ( Not IsArray($avArray) ) Then
    SetError(1)
    Return 0
    EndIf
    Local $UBound2nd = UBound($avArray,2)
    If @error = 2 Then $1D = True
    If ( $iEnd = 0 ) Or ( $iEnd = -1 ) Then $iEnd = UBound($avArray)-1
    If $iStart = -1 Then $iStart = 0
    If $iCaseSense = -1 Then $iCaseSense = 0
    If $iCaseSense <> 0 Then $iCaseSense = 1
    Select
    Case ( $iDim > $UBound2nd ) Or ( $iDim < -1 )
    $error += 2
    Case ( $iStart < 0 ) Or ( $iStart > UBound($avArray)-1 )
    $error += 4
    Case ( $iEnd < $iStart ) Or ( $iEnd > UBound($avArray)-1 )
    $error += 8
    EndSelect
    If $error <> 0 Then
    SetError($error)
    Return 0
    EndIf
    If $fPartialSearch <> True Then $fPartialSearch = False
    If $1D Then
    For $i = $iStart To $iEnd
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    Next
    Else
    For $i = $iStart To $iEnd
    If $iDim = -1 Then
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd-1
    If $avArray[$i][$k] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    For $k = 0 To $UBound2nd-1
    If $avArray[$i][$k] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 0 And $fPartialSearch
    For $k = 0 To $UBound2nd-1
    If StringInStr($avArray[$i][$k], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    Case $iCaseSense = 1 And $fPartialSearch
    For $k = 0 To $UBound2nd-1
    If StringInStr($avArray[$i][$k], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $k
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $k
    $arFound[0] += 1
    EndIf
    EndIf
    Next
    EndSelect
    Else
    Select
    Case $iCaseSense = 0 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] = $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And (Not $fPartialSearch)
    If $avArray[$i][$iDim] == $vWhat2Find Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 0 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    Case $iCaseSense = 1 And $fPartialSearch
    If StringInStr($avArray[$i][$iDim], $vWhat2Find, 1) Then
    If $1stFound Then
    $arFound[0] = $i & '|' & $iDim
    Return $arFound
    Else
    ReDim $arFound[UBound($arFound)+1]
    $arFound[UBound($arFound)-1] = $i & '|' & $iDim
    $arFound[0] += 1
    EndIf
    EndIf
    EndSelect
    EndIf
    Next
    EndIf
    Return $arFound
    EndFunc ;==>_Array2DSearch

    [/autoit]
  • Irgendwie scheint der Editor zu spinnen ..., beim Editieren wird der geänderte AutoIt Code nicht mehr angezeigt ... 8|

    Egal ..., hier nochmal die editierte Version von mir ...

    Spoiler anzeigen


    • Offizieller Beitrag

    Greenhorn:
    Deine Lösung funktioniert zwar, aber es ist wenig vorteilhaft für evtl. ..zig Einträge einzeln die ID zu speichern und das dann auch noch einzeln in einer Case-Struktur auszuwerten.
    Hier empfiehlt sich immer ein Array.

    sam ghost:
    Da du das alles für ein Tray-Menü machen möchtest, habe ich das Muster mal umgestellt. Die GUI da drin kannst du dir natürlich schenken, war nur zu faul sie rauszunehmen :D.
    Die Suchfunktion aus meinem vorigen Post bzw. Signatur.

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    Opt("GUIOnEventMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt("TrayAutoPause", 0)
    Opt("TrayMenuMode",1)

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

    Dim $my_array[8][2] ;[0]-ID , [1]-Titel

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

    For $i = 0 To UBound($my_array) -1
    $my_array[$I][1] = 'Item ' & $I+1 ; Traymenü - Itemeinträge festlegen
    Next

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

    $GUI = GUICreate('test')
    GUISetOnEvent($GUI_EVENT_CLOSE, '_End')
    $menue_punkte=TrayCreateMenu('Test-Menü')
    GUISetState()

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

    FOR $I=0 TO 7 ; Traymenü - Itemeinträge erstellen, ID speichern
    $my_array[$I][0] = TrayCreateItem ($my_array[$I][1],$menue_punkte)
    TrayItemSetOnEvent (-1, 'machwas')
    NEXT

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

    While 1
    Sleep(100)
    WEnd

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

    Func _End()
    Exit
    EndFunc

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

    func machwas()
    $found = _Array2DSearch($my_array, @TRAY_ID, 0, 0, 0, 1, False, True)
    If $found[0] <> -1 Then
    $found = StringSplit($found[0], '|')
    msgbox(0,'info',$my_array[$found[1]][1]) ; gibt geklickten Tray-Eintrag zurück
    EndIf
    endfunc

    [/autoit]
  • hi bugfix,


    vielen dank für die ausführliche hilfe. freut mich sehr.

    wenn ich deine beispiele laufen lasse, dann machen die schon das, was ich prinzipiell will. doch wenn ich versuche, das auf mein script zu 'übertragen' dann happerts doch noch ein bischen mit meinen fähigkeiten.

    ich lese mir ja eine liste mit dateinamen ein, die ich dann in abgekürzter form als menüpunkte für einen 'nicht wirklich sichtbaren gui' verwende. das mit dem nicht sichtbaren gui ist ein kunstgriff, den ich auch hier aus dem

    forum habe, um bei meinem trayicon auf der linken und rechten mouse-taste unterschiedliche menues zu erhalten. mit der linken mouse-taste erscheint das menue des gui's bestehend aus der abgekürzten file-liste, mit der rechten mouse-taste kommt ein trayicon-standard-menue mit nur einem punkt (exit). das funktioniert soweit einwandfrei.

    ich krieg aber immer noch nicht die übergabe 'meiner array-informationen' an die func hin, was aber ja doch funktioniert. du hast es ja bewiesen. es kann also nur noch an irgendwelchen syntax-feinheiten liegen, die ich einfach ums verrecken nicht schnalle. :wacko:


    aber jetzt mach ich hier erstmal feierabend, geh nach haus, drink ein zwei bierchen :D ... und vielleicht klappts dann besser. :rock:

    danke nochmal.

    bis später


    so long


    sam


    ps: thx auch an greenhorn ...