_GUICtrlListView_SetItemDropHilited funktioniert nicht mit false?!

  • Ich will das jeweile Element der ListView während der aktualisierung markieren.

    Bin dabei nun auf "_GUICtrlListView_SetItemDropHilited" gestoßen.

    _GUICtrlListView_SetItemDropHilited ($listview, $i)
    markiert auch wie gewollt den jeweiligen eintrag,

    _GUICtrlListView_SetItemDropHilited ($listview, $i, False)
    jedoch nimmt die markierung nicht zurück?!

    danke für jede Hilfe

    Einmal editiert, zuletzt von LilProgger208 (4. September 2008 um 18:53)

  • Ach, ja. Das Problem hatte ich auch... Ist ein Bug in der Funktion, da werden beim Setzen die Parameter falsch verwendet :P
    Hab grad die Funkt5ion nicht, kann also nicht verbessern... Aber wenn du willst, kannst du sie mal posten und ich geb dir Die Änderungen dann :)

  • [autoit]

    Func _GUICtrlListView_SetItemDropHilited($hWnd, $iIndex, $fEnabled = True)
    Local $iStateMask = 0

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

    If $fEnabled Then $iStateMask = $LVIS_DROPHILITED
    Return _GUICtrlListView_SetItemState($hWnd, $iIndex, $LVIS_DROPHILITED, $iStateMask)
    EndFunc ;==>_GUICtrlListView_SetItemDropHilited

    [/autoit]

    sind dann die anderen funktionen, die _GUICtrlListView_SetItemState verwenden nicht ebenfalls defekt? haben ja zT den gleichen aufbau?!

    Einmal editiert, zuletzt von LilProgger208 (4. September 2008 um 14:05)

  • Meiner Meinung nach muss das so sein:

    Spoiler anzeigen
    [autoit]

    Func _GUICtrlListView_SetItemDropHilited($hWnd, $iIndex, $fEnabled = True)
    Local $iStateMask = 0

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

    If $fEnabled Then $iStateMask = $LVIS_DROPHILITED
    Return _GUICtrlListView_SetItemState($hWnd, $iIndex, $iStateMask, $LVIS_DROPHILITED)
    EndFunc ;==>_GUICtrlListView_SetItemDropHilited

    [/autoit]


    /Edit: oder es war die _GUICtrlListView_SetItemState, die Falsch ist ...

  • also der dokumentation nach ist alles schlüssig in der UDF denke ich, aber funktionieren tuts erst wenn man es umdreht wie du gesagt hast....

    focused scheint garnicht zu funktionieren (kein rectangle zu sehen), selected hingegegen mit true als auch false....

    edit: ok, selected hat nen ganz anderen aufbau....

    2 Mal editiert, zuletzt von LilProgger208 (4. September 2008 um 14:24)

  • Die Doku ist falsch...
    Man muss nur bei MSDN richtig lesen :)
    Die Funktion verwendet eine DLLStruct. Diese hat unter anderem 2 Parameter:
    $iState und $iStateMask

    $iStateMask gibt an, welcher State geändert werden soll
    $iState gibt an, ob der Style aktiviert oder deaktiviert ist :)
    Schreib am besten einen Bugreport :D

  • ok habe ich gemacht:

    http://svn.autoitscript.com/trac/ticket/555

    gleich die korrigierte Version angehängt, zumindest mit drophiled läufts jetzt wies soll: (die 3 geänderten zeilen sind gekennzeichnet)

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: _GUICtrlListView_SetItemState
    ; Description ...: Changes the state of an item in the control
    ; Syntax.........: _GUICtrlListView_SetItemState($hWnd, $iIndex, $iState, $iStateMask)
    ; Parameters ....: $hWnd - Handle to the control
    ; $iIndex - Zero based index of the item
    change: ; $iStateMask - Item state to be changed
    change: ; $iState - Bits that determine whether state is active or inactive
    ; Return values .: Success - True
    ; Failure - False
    ; Author ........: Paul Campbell (PaulIA)
    ; Modified.......:
    ; Remarks .......:
    ; Related .......: _GUICtrlListView_GetItemState
    ; Link ..........;
    ; Example .......; Yes
    ; ===============================================================================================================================
    change: Func _GUICtrlListView_SetItemState($hWnd, $iIndex, $iStateMask, $iState)
    Local $tItem

    $tItem = DllStructCreate($tagLVITEM)
    DllStructSetData($tItem, "Mask", $LVIF_STATE)
    DllStructSetData($tItem, "Item", $iIndex)
    DllStructSetData($tItem, "StateMask", $iStateMask)
    DllStructSetData($tItem, "State", $iState)

    Return _GUICtrlListView_SetItemEx($hWnd, $tItem) <> 0
    EndFunc ;==>_GUICtrlListView_SetItemState

  • Übrigens ist der Bug immernoch drin ;) Das das noch nicht geändert wurde...ne ne ne...*kopfschüttel*.

  • Das ist kein Bug mehr, sondern nur noch ein Dokumentationsfehler. _GUICtrlListView_SetItemDropHilited sollte jetzt funktionieren.