Kontextmenü funktioniert nicht!!

  • Kann mir jemand sagen, warum mein Kontextmenü nicht funktioniert?
    Es erscheint zwar, aber wenn ich einen Menüpunkt anklicke, geschieht nichts. Fehlermeldungen in Scite gibt es auch nicht.

    Spoiler anzeigen


    $kontext = GUICtrlCreateContextMenu($l1)
    $kon_start = GUICtrlCreateMenuItem("Upload starten", $kontext)
    $kon_anhalten = GUICtrlCreateMenuItem("Upload anhalten", $kontext)
    $kon_fortsetzen = GUICtrlCreateMenuItem("Upload fortsetzen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_del = GUICtrlCreateMenuItem("Datei entfernen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_liste_speichern = GUICtrlCreateMenuItem("Liste speichern", $kontext)
    $kon_liste_laden = GUICtrlCreateMenuItem("Liste laden", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_archiv = GUICtrlCreateMenuItem("Archiv erstellen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_info = GUICtrlCreateMenuItem("Info", $kontext)

    Das ganze bezieht sich auf ein Listview($l1).
    Abfrage erläuft über:
    $msg = GUIGetMsg() -> If $msg = ...

    Im Normalfall klappt das wunderbar. Geht das bei einem Kontextmenü nicht, oder mache ich irgendwas falsch?

    Einmal editiert, zuletzt von penta.phoenix (11. September 2008 um 20:06)

    • Offizieller Beitrag

    Läuft doch:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    $gui = GUICreate('')
    $l1 = GUICtrlCreateListView('col1|col2', 10, 10, 300, 200)
    $kontext = GUICtrlCreateContextMenu($l1)
    $kon_start = GUICtrlCreateMenuItem("Upload starten", $kontext)
    $kon_anhalten = GUICtrlCreateMenuItem("Upload anhalten", $kontext)
    $kon_fortsetzen = GUICtrlCreateMenuItem("Upload fortsetzen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_del = GUICtrlCreateMenuItem("Datei entfernen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_liste_speichern = GUICtrlCreateMenuItem("Liste speichern", $kontext)
    $kon_liste_laden = GUICtrlCreateMenuItem("Liste laden", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_archiv = GUICtrlCreateMenuItem("Archiv erstellen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_info = GUICtrlCreateMenuItem("Info", $kontext)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Switch $msg
    Case $kon_start
    MsgBox(0, '', 'start')
    Case $kon_anhalten
    MsgBox(0, '', 'anhalten')
    Case $kon_fortsetzen
    MsgBox(0, '', 'fortsetzen')
    ; usw.
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]
  • Ich hab mir dein Beispiel gerade angesehen und es mit meinem Code verglichen. Allzu große Unterschiede sehe ich nicht.
    Wärst Du oder sonst jemand so freundlich, mal meinen Code

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIListView.au3>
    #include <IE.au3>
    #include <String.au3>
    #include <INet.au3>
    #include <Array.au3>
    #include <GUIButton.au3>

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

    Global $ie, $dl, $ll, $error, $containername, $size_error

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

    update_check()

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

    Opt("WinTitleMatchMode", 2)

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

    $gui = GUICreate(" ", 500, 360)

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

    $t = GUICtrlCreateTab(0, 0, 500, 360)
    $t1 = GUICtrlCreateTabItem("Tab")
    $l1 = GUICtrlCreateListView("1|2|3|4", 0, 22, 500, 250)

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

    $kontext = GUICtrlCreateContextMenu($l1)
    $kon_start = GUICtrlCreateMenuItem("Upload starten", $kontext)
    $kon_anhalten = GUICtrlCreateMenuItem("Upload anhalten", $kontext)
    $kon_fortsetzen = GUICtrlCreateMenuItem("Upload fortsetzen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_del = GUICtrlCreateMenuItem("Datei entfernen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_liste_speichern = GUICtrlCreateMenuItem("Liste speichern", $kontext)
    $kon_liste_laden = GUICtrlCreateMenuItem("Liste laden", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_archiv = GUICtrlCreateMenuItem("Archiv erstellen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_info = GUICtrlCreateMenuItem("Info", $kontext)

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

    _GUICtrlListView_SetColumnWidth($l1, 0, 150)
    _GUICtrlListView_SetColumnWidth($l1, 1, 150)
    _GUICtrlListView_SetColumnWidth($l1, 2, 100)
    _GUICtrlListView_SetColumnWidth($l1, 3, 100)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then
    If WinActivate("Info") Then
    WinClose("Info")
    Else
    _IEQuit($ie)
    If ProcessExists("iexplore.exe") Then
    $a = MsgBox(4, "1", "2")
    If $a = 6 Then
    ProcessClose("iexplore.exe")
    EndIf
    EndIf
    Exit
    EndIf
    ElseIf $msg = $kon_info Then
    MsgBox(64, "1", "2")
    ElseIf $msg = $kon_fortsetzen Then
    fortsetzen()
    ElseIf $msg = $kon_anhalten Then
    anhalten()
    ElseIf $msg = $kon_archiv Then
    If Not FileExists(@ScriptDir & "\ini\winrar.ini") Then
    $rar = FileOpenDialog("1", "C:\", "RAR.exe (RAR.exe)")
    IniWrite(@ScriptDir & "\ini\winrar.ini", "WinRAR", "Pfad", $rar)
    EndIf
    ElseIf $msg = $kon_del Then
    _GUICtrlListView_DeleteItemsSelected($l1)
    ElseIf $msg = $kon_liste_speichern Then
    For $i = 0 To _GUICtrlListView_GetItemCount($l1) -1
    $liste_datei = _GUICtrlListView_GetItemText($l1, $i)
    $liste_groesse = _GUICtrlListView_GetItemText($l1, $i, 1)
    $liste_hoster = _GUICtrlListView_GetItemText($l1, $i, 2)
    FileWrite(@ScriptDir & "\och_liste.txt", $liste_datei & ";" & $liste_groesse & ";" & $liste_hoster & @CRLF)
    Next
    MsgBox(64, "1", "2")
    ElseIf $msg = $kon_liste_laden Then
    For $i = 1 To 999
    If Not @error Then
    $a = FileReadLine(@ScriptDir & "\och_liste.txt", $i)
    If Not $a = "" Then
    $a = StringSplit($a, ";")
    GUICtrlCreateListViewItem($a[1] & "|" & $a[2] & "|" & $a[3] & "|---", $l1)
    EndIf
    EndIf
    Next
    EndIf

    WEnd

    [/autoit]


    anschauen und evtl. ausprobieren? Ich hab ihn zwar ein wenig "zensiert", er sollte aber trotzdem gehen.
    Wenn ihn jemand testen könnte wäre das natürlich klasse. Dann wüsste ich wenigstens, ob es an mir(bzw. meinem PC) liegt.

  • Nein, bei mir gehen alle nicht. Aber ich hab mir fast gedacht, dass es geht, da Scite keine Fehler bringt.
    Das Kontextmenü wird wie gesagt angezeigt, aber ein Klick auf die einzelnen Punkte bewirkt nichts.

  • Habe nur eine Idee was dein Problem auslösen könnte. Vielleicht hast du das eingeschaltet:

    [autoit]

    Opt("GUIOnEventMode",1)

    [/autoit]

    Dann funktioniert das mit der GuiGetMsg-Schleife natürlich nicht, aber dann ließe sich ohne entsprechende Funktion die GUI nicht einmal mehr schließen.

  • Nein, hab ich nicht. Es liegt eindeutig am Kontextmenü bzw. meinem PC. Alles andere in meinem Programm geht, aich ein normale Menü(GUICtrlCreateMenu). Hab mal kurz eine Kopie des Kontextmenüs als normales Menü erstellt und die Variablen angepasst. Hier wird jede Funktion angesprochen und korrekt ausgeführt.

    Die Frage ist also: Warum reagiert mein Kontextmenü nicht auf meine Eingaben?

    Edit:
    Die Antwort lautet: Weil AutoIt manchmal doof ist. :rofl:
    Ich habe den Kontextmenü-Block mal aus Spaß hinter den GUISetState-Befehl verschoben. Jetzt geht es problemlos. Es geht auch, wenn ich den Block irgendwo bei dem Zeug für den ersten Tab meines Tabviews unterbringe. :!:
    Ich nehme mal an, dass AutoIt da irgendwie Probleme macht, wenn ich per Kontextmenü auf Sachen in Tab1 zugreifen will, das Kontextmenü selber aber in Tab2 platziere.
    Warum es allerdings bei euch ohne Änderung lief, verstehe ich trotzdem nicht. ?(

    Einmal editiert, zuletzt von penta.phoenix (11. September 2008 um 20:06)

  • Hallo.

    Habe mal versucht das man das Kontextmenü im ganzen GUI anwenden kann, aber so möchte es nicht:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    $gui = GUICreate('', 100, 100, 300, 200)
    $kontext = GUICtrlCreateContextMenu($gui) ; <---- ohne Tabs sondern Kontextmenü fürs ganze GUI. Geht aber nicht.
    $kon_start = GUICtrlCreateMenuItem("Upload starten", $kontext)
    $kon_anhalten = GUICtrlCreateMenuItem("Upload anhalten", $kontext)
    $kon_fortsetzen = GUICtrlCreateMenuItem("Upload fortsetzen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_del = GUICtrlCreateMenuItem("Datei entfernen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_liste_speichern = GUICtrlCreateMenuItem("Liste speichern", $kontext)
    $kon_liste_laden = GUICtrlCreateMenuItem("Liste laden", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_archiv = GUICtrlCreateMenuItem("Archiv erstellen", $kontext)
    GUICtrlCreateMenuItem("", $kontext)
    $kon_info = GUICtrlCreateMenuItem("Info", $kontext)
    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    Switch $msg
    Case $kon_start
    MsgBox(0, '', 'start')
    Case $kon_anhalten
    MsgBox(0, '', 'anhalten')
    Case $kon_fortsetzen
    MsgBox(0, '', 'fortsetzen')
    ; usw.
    EndSwitch
    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    Kann mir jemand sagen wieso dieses so ist? Es wird immer gleich die "Star-MsgBox" automatisch ausgewählt.

    LG, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Oscar .

    Doof, wenn man vergißt, das Minus mit zu tippen.
    Aber jetzt klappt es ja.

    Danke.

    LG, Crazy-A.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr