Nach $GUI_EVENT_SECONDARYDOWN Fehler in Listview

    • Offizieller Beitrag

    Hi,
    ich habe
    hier meine HEX-Code Tabelle eingestellt.
    Dabei besteht noch folgendes Problem:
    Die Liste kann in drei verschiedenen Sortierfolgen angezeigt werden. Da kann ich auch beliebig zwischen wechseln - funktioniert.
    Wurde aber das Ereignis "$GUI_EVENT_SECONDARYDOWN" ausgewertet (Kontextmenü zum Kopieren) und ich will anschließend erneut eine andere Sortierung wählen, wird zwar die richtige Reihenfolge aufgelistet aber die Befehle für Setzen der Hintergrund- und Fontfarbe der Items werden nicht ausgeführt.

    Spoiler anzeigen
    [autoit]

    ;.....
    Dim $arColors[140][5] ; 0=Name, 1=Hex, 2=Sortier-Index Sättigung/Farbton, 3=Sortier-Index Helligkeit, 4= wenn 1 Schrift weiß
    ;.....
    $Form1 = GUICreate("HEX-Code Farbtabelle", 415, 683, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, "AForm1Close")
    GUISetOnEvent($GUI_EVENT_SECONDARYDOWN, "SpecialEvents")
    ;.....
    Func rNameClick()
    _GUICtrlListViewDeleteAllItems($ListView1)
    _SetData(0)
    EndFunc

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

    Func rSattClick()
    _GUICtrlListViewDeleteAllItems($ListView1)
    _SetData(2)
    EndFunc

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

    Func rHellClick()
    _GUICtrlListViewDeleteAllItems($ListView1)
    _SetData(3)
    EndFunc

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

    Func _SetData($SortIndx)
    _ArraySort($arColors, 0, 0, 0, 5, $SortIndx)
    For $i = 0 To UBound($arColors)-1
    $arItem[$i] = GUICtrlCreateListViewItem( "|" &$arColors[$i][0] & "|0x" & Hex($arColors[$i][1],6), $ListView1)
    If $arColors[$i][4] = 1 Then GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor(-1,$arColors[$i][1])
    Next
    EndFunc
    ;.....
    Func SpecialEvents()
    If @GUI_CTRLID = $GUI_EVENT_SECONDARYDOWN Then
    If ControlGetFocus($Form1, "HEX-Code Color Table") = "SysListView321" Then
    $ind = _GUICtrlListViewGetCurSel($ListView1)
    $col = _GUICtrlListViewGetItemText($ListView1, $ind, 1)
    $hex = _GUICtrlListViewGetItemText($ListView1, $ind, 2)
    If $arColors[$ind][4] = 1 Then
    GUISetBkColor($PaleGreen, $GUICopy)
    GUICtrlSetColor($lbShowColor, 0xFFFFFF)
    Else
    GUISetBkColor($Navy, $GUICopy)
    GUICtrlSetColor($lbShowColor, 0x000000)
    EndIf
    GUICtrlSetBkColor($lbShowColor, $arColors[$ind][1])
    GUICtrlSetData($lbShowColor, $arColors[$ind][0])
    GUISetState(@SW_SHOW, $GUICopy)
    EndIf
    EndIf
    EndFunc
    ;.....

    [/autoit]


    :hm:

    EDIT

    So, hab nun auch versucht mit "WM_NOTIFY event handler" über SingleClick, DoubleClick oder RightClick auszuwerten.
    Es ist völlig Banane, welches Ereignis ich auswerte - hinterher funktioniert die Farbsetzung nicht mehr. :weinen:

    EDIT2

    Ha, ich habs gefunden.
    Ist zwar für mich nicht erklärbar warum es so ist, aber hier liegt der Fehler:

    $arItem[$i] = GUICtrlCreateListViewItem( "|" &$arColors[$i][0] & "|0x" & Hex($arColors[$i][1],6), $ListView1)
    If $arColors[$i][4] = 1 Then GUICtrlSetColor(-1, 0xFFFFFF)
    GUICtrlSetBkColor(-1,$arColors[$i][1])

    Mit -1 beziehe ich mich auf das zuvor erstellte ListViewItem.
    Aber das versagt nach einem Event. Setze ich dafür $arItem[$i] ein, dann funktioniert es!

  • hi bugfix,
    hab grad noch ne andere lösung gefunden...

    [autoit]

    Func bCopyToClick()
    $strCopy = '$' & $col & " = " & $hex &";rot:"&$red&",gelb:"&$yellow&",blau:"&$blue
    ClipPut($strCopy)
    GUISetState(@SW_HIDE, $GUICopy)
    ToolTip("Es wurde:" & @CRLF & @CRLF & @TAB & StringReplace($strCopy,";",@CRLF&@TAB) & @CRLF & @CRLF & "in die Zwischenablage kopiert.", @DesktopWidth/2, @DesktopHeight/2, "Zwischenablage", 1, 1)
    Sleep(5000)
    ToolTip("")
    GUISetState(@SW_RESTORE,$Form1)
    EndFunc

    [/autoit]


    probier gleich mal deins...^^

    //edit
    eng forum hat mich auf die idee gebracht...ListView Problem (by BugFix) @ EngAutoIt-Forum

    • Offizieller Beitrag

    Ja, danke snoozer.
    Das ist der korrekte Weg. Der Teufel steckt,wie üblich, im Detail. :D

    Bitte auch in der Esc-Funktion ergänzen:

    Spoiler anzeigen
    [autoit]

    Func bCopyToClick()
    $strCopy = '$' & $col & " = " & $hex
    ClipPut($strCopy)
    GUISetState(@SW_HIDE, $GUICopy)
    ToolTip("Es wurde:" & @CRLF & @CRLF & @TAB & $strCopy & @CRLF & @CRLF & "in die Zwischenablage kopiert.", @DesktopWidth/2, @DesktopHeight/2, "Zwischenablage", 1, 1)
    Sleep(5000)
    ToolTip("")
    GUISetState(@SW_RESTORE,$Form1)
    EndFunc

    Func bEscCopyToClick()
    GUISetState(@SW_HIDE, $GUICopy)
    GUISetState(@SW_RESTORE,$Form1)
    EndFunc

    [/autoit]