Function Reference


_GUICtrlListView_RegisterSortCallBack

Register the Simple Sort callback function

#include <GuiListView.au3>
_GUICtrlListView_RegisterSortCallBack ( $hWnd [, $vCompareType = 1 [, $bArrows = True [, $sPrivateCallBack = "__GUICtrlListView_Sort"]]] )

Parameters

$hWnd Handle of the control
$vCompareType [optional] Comparison type
    0 = String comparison ("1x" > "10x")
    1 = String treated as number ("1x" < "10x") (Default)
    2 = Use Windows API StrCmpLogical (better for "x1y" < "x10y")
$bArrows [optional] Draws a down-arrow/up-arrow on column selected
$sPrivateCallBack [optional] Name of a function to be called for files comparison. (see remarks)

Return Value

Success: True.
Failure: False.

Remarks

For each call to _GUICtrlListView_RegisterSortCallBack() there must be a call to _GUICtrlListView_UnRegisterSortCallBack() when done (before exit).

It is up to the user to call _GUICtrlListView_UnRegisterSortCallBack() for each _GUICtrlListView_RegisterSortCallBack() call made.

This is an alternative to the _GUICtrlListView_SimpleSort().

This function will sort listviews that have icons, checkboxes, sub-item icons.

The $sPrivateCallBack function will be called with 3 parameters ($nItem1, $nItem2, $hWnd).
    $nItem1        - Param of 1st item
    $nItem2        - Param of 2nd item
    $hWnd        - Handle of the control
The value of an item is retrieved with _GUICtrlListView_GetItemText ( $hWnd, $nItemX [, $iSubItem = 0] ).
The function must return 0 no change, -1 if item2 less than item2 or 1 depending the comparison result.

Related

_GUICtrlListView_SortItems, _GUICtrlListView_UnRegisterSortCallBack

Example

Example 1

#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

Example()

Func Example()
        Local $aIcons[3] = [0, 3, 6]
        Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
        Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)

        GUICreate("ListView Sort (v" & @AutoItVersion & ")", 300, 200)

        Local $idListView = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 280, 180, -1, $iExWindowStyle)
        _GUICtrlListView_SetExtendedListViewStyle($idListView, $iExListViewStyle)

        ; Set ANSI format
;~     _GUICtrlListView_SetUnicodeFormat($idListView, False)

        ; Load images
        Local $hImage = _GUIImageList_Create(18, 18, 5, 3)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
        _GUICtrlListView_SetImageList($idListView, $hImage, 1)

        _AddRow($idListView, "ABC|000666|10.05.2004", $aIcons)
        _AddRow($idListView, "DEF|444|11.05.2005", $aIcons, 1)
        _AddRow($idListView, "CDE|555|12.05.2004", $aIcons, 2)

        GUISetState(@SW_SHOW)

        _GUICtrlListView_RegisterSortCallBack($idListView)

        While 1
                Switch GUIGetMsg()
                        Case $GUI_EVENT_CLOSE
                                ExitLoop
                        Case $idListView
                                ; Kick off the sort callback
                                _GUICtrlListView_SortItems($idListView, GUICtrlGetState($idListView))
                EndSwitch
        WEnd

        _GUICtrlListView_UnRegisterSortCallBack($idListView)
        GUIDelete()
EndFunc   ;==>Example

Func _AddRow($hWnd, $sItem, $aIcons, $iPlus = 0)
        Local $aItem = StringSplit($sItem, "|")
        Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $aIcons[0] + $iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999)
        _GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER)

        For $x = 2 To $aItem[0]
                _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $aIcons[$x - 1] + $iPlus)
                _GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE)
        Next
EndFunc   ;==>_AddRow

Example 2

#include <GUIConstantsEx.au3>
#include <GuiImageList.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>

Global $g_idListView, $g_idListView2

Example()

Func Example()
        Local $aIcons[3] = [0, 3, 6]
        Local $iExWindowStyle = BitOR($WS_EX_DLGMODALFRAME, $WS_EX_CLIENTEDGE)
        Local $iExListViewStyle = BitOR($LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES, $LVS_EX_GRIDLINES, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)

        GUICreate("ListView Sort Treat Numbers as Strings (v" & @AutoItVersion & ")", 400, 200, 100)

        $g_idListView = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 380, 180, -1, $iExWindowStyle)
        _GUICtrlListView_SetExtendedListViewStyle($g_idListView, $iExListViewStyle)

        ; Load images
        Local $hImage = _GUIImageList_Create(18, 18, 5, 3)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -7)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -12)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -3)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -4)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -5)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -6)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -9)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -10)
        _GUIImageList_AddIcon($hImage, @SystemDir & "\shell32.dll", -11)
        _GUICtrlListView_SetImageList($g_idListView, $hImage, 1)

        _AddRow($g_idListView, "ABC|000666|10.05.2004", $aIcons)
        _AddRow($g_idListView, "DEF|444|11.05.2005", $aIcons, 1)
        _AddRow($g_idListView, "CDE|555|12.05.2004", $aIcons, 2)

        GUISetState(@SW_SHOW)

        ; Set ANSI format
;~     _GUICtrlListView_SetUnicodeFormat($g_idListView, False)

        GUICreate("ListView Sort Treat Numbers as Numbers", 400, 200, 500)

        $g_idListView2 = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 380, 180, -1, $iExWindowStyle)
        _GUICtrlListView_SetExtendedListViewStyle($g_idListView2, $iExListViewStyle)
        _GUICtrlListView_SetImageList($g_idListView2, $hImage, 1)

        _AddRow($g_idListView2, "ABC|000666|10.05.2004", $aIcons)
        _AddRow($g_idListView2, "DEF|444|11.05.2005", $aIcons, 1)
        _AddRow($g_idListView2, "CDE|555|12.05.2004", $aIcons, 2)

        GUISetState(@SW_SHOW)

        ; Set ANSI format
;~     _GUICtrlListView_SetUnicodeFormat($g_idListView2, False)

        _GUICtrlListView_RegisterSortCallBack($g_idListView, 0)
        _GUICtrlListView_RegisterSortCallBack($g_idListView2)
        GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")

        While 1
                Switch GUIGetMsg()
                        Case $GUI_EVENT_CLOSE
                                ExitLoop
                EndSwitch
        WEnd

        _GUICtrlListView_UnRegisterSortCallBack($g_idListView)
        _GUICtrlListView_UnRegisterSortCallBack($g_idListView2)
        GUIRegisterMsg($WM_NOTIFY, "")
EndFunc   ;==>Example

Func _AddRow($hWnd, $sItem, $aIcons, $iPlus = 0)
        Local $aItem = StringSplit($sItem, "|")
        Local $iIndex = _GUICtrlListView_AddItem($hWnd, $aItem[1], $aIcons[0] + $iPlus, _GUICtrlListView_GetItemCount($hWnd) + 9999)
        _GUICtrlListView_SetColumnWidth($hWnd, 0, $LVSCW_AUTOSIZE_USEHEADER)

        For $x = 2 To $aItem[0]
                _GUICtrlListView_AddSubItem($hWnd, $iIndex, $aItem[$x], $x - 1, $aIcons[$x - 1] + $iPlus)
                _GUICtrlListView_SetColumnWidth($hWnd, $x - 1, $LVSCW_AUTOSIZE)
        Next
EndFunc   ;==>_AddRow

Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iCode, $tNMHDR, $hWndListView, $hWndListView2

        $hWndListView = $g_idListView
        $hWndListView2 = $g_idListView2
        If Not IsHWnd($g_idListView) Then $hWndListView = GUICtrlGetHandle($g_idListView)
        If Not IsHWnd($g_idListView2) Then $hWndListView2 = GUICtrlGetHandle($g_idListView2)

        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iCode = DllStructGetData($tNMHDR, "Code")

        Switch $hWndFrom
                Case $hWndListView, $hWndListView2
                        Switch $iCode
                                Case $LVN_COLUMNCLICK ; A column was clicked
                                        Local $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)

                                        ; Kick off the sort callback
                                        _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem"))
                                        ; No return value
                        EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_NOTIFY