werte richtig an function übergeben

  • ich möchte folgendes

    [autoit]

    $hallo = ("servus") ;<--- ändert sich mehrfach

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

    $menue = traycreatemenu ("grußmenu")
    $item = traycreateitem ($hallo,msg ($hallo))

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

    while 1
    sleep (200)
    wend

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

    func msg (???) ;<--- wie kriege ich die funktion dazu den $hallo aus dem traycreateitem zu übernehmen?
    msgbox (0,"",$hallo)
    endfunc

    [/autoit]


    Jemand ne idee?

  • ich versteh das Problem nicht ganz, aber du definierst es normal so:

    [autoit]


    $hallo = "Hallo"

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

    _hallo($hallo)

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

    Func _hallo($text)

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

    MsgBox(0, "", $text)

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

    Endfunc

    [/autoit]


    verstanden?^^

  • dann müsste das hier funzen, tut es aber nicht, und ich versteh nicht warum?
    Das macht mich wahnsinnig :comp2:
    kann mir jemand weiterhelfen, dann bin ich auch nicht mehr lästig, schmeiß keine Mäuse und Monitore mehr durch die gegend, und foltere die Nachbarskatze auch nicht mehr ;)

    [autoit]

    ;~ Global $x=("")

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

    $soundmenue = TrayCreateMenu ("Konten")

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

    $search = FileFindFirstFile("*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item = TrayCreateItem($file,$soundmenue)
    TrayItemSetOnEvent(-1,_play($file)) ; <=== hier möchte ich den filenamen irgendwie mitgeben (funzt nat. nicht)
    WEnd

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

    func _play($x)
    SoundPlay($x)
    endfunc

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

    While 1
    sleep (300)
    wend

    [/autoit]

    Das ist die dazugehörige Fehlermeldung:
    C:\Dokumente und Einstellungen\x\Desktop\kontenmenue.au3 (11) : ==> Unknown function name.:
    TrayItemSetOnEvent(-1,play ($file))

    8 Mal editiert, zuletzt von Vollnoob (3. August 2007 um 14:14)

  • ???????????????????????????????????????????????????????????

    Beitrag editieren verursacht:

    SQL-DATABASE ERROR

    Database error in WoltLab Burning Board (2.3.4): Invalid SQL: REPLACE INTO bb1_wordmatch (wordid,postid,intopic) VALUES (11151,24342,0),(10184,24342,0),(11159,24342,0),(10382,24342,0),(10434,24342,0),(10281,24342,0),(10437,24342,0),(10274,24342,0),(10438,24342,0),(10356,24342,0),(10445,24342,0),(10266,24342,0),(10282,24342,0),(10604,24342,0),(10368,24342,0)
    mysql error: Table 'autoit-german.bb1_wordmatch' doesn't exist
    mysql error number: 1146
    mysql version: 5.0.26
    php version: 5.2.0
    Date: 03.08.2007 @ 14:14
    Script: /editpost.php
    Referer: http://www.autoit.de/editpost.php?postid=24342

    Edit GtaSpider: [03.08.2007 15:37]
    Ja, momentan kommt die neue Version von Suse auf unser Board. Desswegen gibt es noch ein Paar Probleme. Aber Gun-Food kümmert sich drum!

  • Deine Fehlermeldung stimmt nicht mit der entsprechenden Sourcecodezeile überein...

    [autoit]

    TrayItemSetOnEvent(-1,play ($file))
    TrayItemSetOnEvent(-1,_play($file))

    [/autoit]

    Daran wirds wohl liegen...

  • Das bedeutet also, ich kann auf diese weise zwar ein wunderschönes menü mit items erstellen, aber keine funktionen zuweisen?

  • Doch kannst du nur eben auf Umwegen.
    Eine lösung währe hier :

    Spoiler anzeigen
    [autoit]


    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

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

    $soundmenue = TrayCreateMenu("Konten")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $search = FileFindFirstFile("*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item[$i] = TrayCreateItem($file, $soundmenue)
    $files[$i] = $file
    ;~ TrayItemSetOnEvent($item[$i], "_play") ; <=== hier möchte ich den filenamen irgendwie mitgeben (funzt nat. nicht)
    $i = $i + 1
    WEnd

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

    Func _play($play)
    SoundPlay($play)
    EndFunc ;==>_play

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

    While 1
    $msg = TrayGetMsg()
    If $msg = $exit Then Exit
    For $i = 0 To $i
    If $msg = $item[$i] Then
    _play($files[$i])
    ExitLoop
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Nightraven (3. August 2007 um 14:55)

  • Doch kannst du - die Funktion darf aber keinen Parameter enthalten - musst das also entsprechend anders bauen.

    Hier mal als Beispiel wie ich vermute wie du dies gemeint hast (außerdem ein schönes Beispiel für die Verwendung einer Hash-Tabelle):

    Spoiler anzeigen
    [autoit]

    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)

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

    global $hash = ObjCreate("System.Collections.Hashtable")
    $soundmenue = TrayCreateMenu ("Konten")

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

    $Pfad = 'D:\Neu' ;hier deinen Ordner eintragen in welchem sich die mp3´s befinden

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

    TraySetState()

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

    $search = FileFindFirstFile($Pfad & "\*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item = TrayCreateItem($file,$soundmenue)
    TrayItemSetOnEvent(-1, "_play")

    $hash.add($item, $Pfad & "\" & $file) ;weißt einem Tray-Item die entsprechende Datei zu

    WEnd

    func _play()
    SoundPlay($hash(@TRAY_ID)) ;spielt die Datei ab welche zum entsprechenden Tray-Item gehört
    endfunc

    While 1
    sleep (100)
    wend

    [/autoit]
  • Hab jetzt ma auf dein Beispiel aufgebaut, und nu is wieder irgendein Bug drinnen, den ich nicht finde. :comp2:

    Spoiler anzeigen
    [autoit]


    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Sounds")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $search = FileFindFirstFile("*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item[$i] = TrayCreateItem($file, $soundmenue)
    $files[$i] = $file
    $i = $i + 1
    WEnd

    While 1
    $msg = TrayGetMsg()
    If $msg = $exit Then Exit
    For $i = 0 To 9998
    If $msg = $item[$i] Then
    MsgBox(0,"",$files[$i]) ;<=== zum testen eingefügt
    SoundPlay($files[$i])
    ExitLoop
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]

  • bei diesem script bekomme ich folgende meldung:
    C:\Dokumente und Einstellungen\x\Desktop\kontenmenue.au3 (18) : ==> Variable must be of type "Object".:
    $hash.add($item, $Pfad & "\" & $file)
    $hash^ ERROR


  • Das geht bei mir ohne probleme achja und tausch das 9998 mit $i aus, konnte ich nicht editen ...

  • Hast du das Skript so wie es ist, ohne irgendeine Veränderung getestet und ausgeführt?

    So wie es ist funktioniert es bei mir problemlos.

    Probiere es nochmal mit diesem und sag mal Bescheid ob eine Meldung kommt das die Hash nicht erstellt werden konnte:

    Spoiler anzeigen
    [autoit]

    Opt("TrayOnEventMode",1)
    Opt("TrayMenuMode",1)

    global $hash = ObjCreate("System.Collections.Hashtable")

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

    If Not IsObj($hash) Then
    MsgBox(0,"", "Konnte Hash nicht erstellen!")
    Exit
    EndIf

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

    $soundmenue = TrayCreateMenu ("Konten")
    $Exit = TrayCreateItem ("Exit")
    TrayItemSetOnEvent(-1, "raus")

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

    $Pfad = 'D:\Neu' ;hier deinen Ordner eintragen in welchem sich die mp3´s befinden

    TraySetState()

    $search = FileFindFirstFile($Pfad & "\*.mp3")
    If $search = -1 Then Exit

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

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item = TrayCreateItem($file,$soundmenue)
    TrayItemSetOnEvent(-1, "_play")

    $hash.add($item, $Pfad & "\" & $file) ;weißt einem Tray-Item die entsprechende Datei zu

    WEnd

    While 1
    sleep (100)
    wend

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

    func _play()
    SoundPlay($hash(@TRAY_ID)) ;spielt die Datei ab welche zum entsprechenden Tray-Item gehört
    endfunc

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

    Func raus()
    Exit
    EndFunc

    [/autoit]

    Ach und bitte keine Fullquotes - in der Regel weiß der Angesprochene was er geschrieben hat... ;)


    Edit: kleinen Bug gefixt

    Einmal editiert, zuletzt von AspirinJunkie (3. August 2007 um 16:09)

  • Zitat

    Original von Nightraven

    Das geht bei mir ohne probleme achja und tausch das 9998 mit $i aus, konnte ich nicht editen ...

    wenn ich das 9998 drin hab kommt bei mir 9998 mal die Msgbox, und wenn $1 drinnsteht passiert gar nichts

  • Wenn das editieren geklappt hätte... zumindest muss es so aussehen:

    for $1 = 0 to $i
    ...

    Einmal editiert, zuletzt von Nightraven (3. August 2007 um 16:08)

  • @Nightraven.
    Also, ich habs jetzt nochmal 1:1 Rauskopiert, die Änderung mit der 9998/$i vorgenommen.

    Wenn ich aufs menü klicke sehe ich meine MP3s, klicke ich aber auf ein entsprechendes Item, passiert gar nix. kein Sound und auch keine Box
    es ist zum durchdrehen, ich versteh die Welt nicht mehr :weinen:

  • Es muss so sein:

    Spoiler anzeigen
    [autoit]


    Opt("TrayMenuMode", 1)
    Dim $item[9999]
    Dim $files[9999]

    $soundmenue = TrayCreateMenu("Konten")
    $exit = TrayCreateItem("Exit")
    $i = 0
    $search = FileFindFirstFile("*.mp3")
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $item[$i] = TrayCreateItem($file, $soundmenue)
    $files[$i] = $file
    ;~ TrayItemSetOnEvent($item[$i], "_play") ; <=== hier möchte ich den filenamen irgendwie mitgeben (funzt nat. nicht)
    $i = $i + 1
    WEnd

    Func _play($play)
    SoundPlay($play)
    EndFunc ;==>_play

    While 1
    $msg = TrayGetMsg()
    If $msg = $exit Then Exit
    For $1 = 0 To $i
    If $msg = $item[$1] Then
    _play($files[$1])
    ExitLoop
    EndIf
    Next
    Sleep(1)
    WEnd

    [/autoit]