Jump to content
Sign in to follow this  
MikahS

ListView sorting using sort callback and $LVN_COLUMNCLICK

Recommended Posts

Hello all,

Back again it seems. I've hit a snag in the below script. I use this on win 7 and XP machines frequently and have just realized that sorting using column headers is not 'working' (is not updating listview; it looks like something is going on behind the scenes..) when clicked. Also this does not show the sorting arrow when using the callback sort functionality.

So, to sum up, I am not seeing the arrow keys when clicking the column header to sort. And, it is not sorting the values in the $List1 ListView box on a win XP machine.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <GUIListBox.au3>
#include <GUIEdit.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ScrollBarConstants.au3>
#include <GuiScrollBars.au3>

Local $List1, $List2, $List3, $List4, $GUIhandle
Local $Button19, $Button91, $ButtonAZ, $ButtonZA
Local $hChild_1, $cLabel_1, $cLabel_2, $cLabel_3


GUI()
Repaint()

Local $bSysMsg = False

Local $aRect = _GUICtrlListView_GetItemRect($List1, 0)
$iDeltaY = $aRect[3] - $aRect[1]

_GUIScrollBars_EnableScrollBar(ControlGetHandle("", "", $List2), $SB_BOTH, $ESB_DISABLE_BOTH)
_GUIScrollBars_EnableScrollBar(ControlGetHandle("", "", $List3), $SB_BOTH, $ESB_DISABLE_BOTH)

_GUICtrlListView_RegisterSortCallBack($List1)
_GUICtrlListView_RegisterSortCallBack($List2)
_GUICtrlListView_RegisterSortCallBack($List3)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCOMMAND")

While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1]
        Case $GUIhandle
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    Quit()
            EndSwitch
            If $bSysMsg Then
                $bSysMsg = False
                _Resize_ListViews()
            EndIf
        Case $hChild_1
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    GUIDelete($hChild_1)
            EndSwitch
    EndSwitch
WEnd

Func Repaint()
    Local $L1, $L2, $L3
    _GUICtrlListView_BeginUpdate($List1)
    _GUICtrlListView_DeleteAllItems($List1)
    _GUICtrlListView_BeginUpdate($List2)
    _GUICtrlListView_DeleteAllItems($List2)
    _GUICtrlListView_BeginUpdate($List3)
    _GUICtrlListView_DeleteAllItems($List3)
    For $Index = 0 To 10 Step 1
        $L1 = _GUICtrlListView_AddItem($List1, $Index, $Index)
        $L2 = _GUICtrlListView_AddItem($List2, $Index, $Index)
        $L3 = _GUICtrlListView_AddItem($List3, $Index, $Index)
    Next
    _GUICtrlListView_SetColumnWidth($List1, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($List2, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_EndUpdate($List1)
    _GUICtrlListView_EndUpdate($List2)
    _GUICtrlListView_EndUpdate($List3)
EndFunc   ;==>Repaint

Func Quit()
    _GUICtrlListView_UnRegisterSortCallBack($List1)
    _GUICtrlListView_UnRegisterSortCallBack($List2)
    _GUICtrlListView_UnRegisterSortCallBack($List3)
    Exit
EndFunc   ;==>Quit

Func GUI()
    Local $Index, $LV1, $LV2, $LV3, $L1_EX, $L2_EX, $L3_EX
    $GUIhandle = GUICreate("ArchServer", 680, 575, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX) ;creates the parent window
    $List1 = _GUICtrlListView_Create($GUIhandle, "Computer Name ", 20, 35, 300, 448, -1, $LVS_EX_DOUBLEBUFFER) ;;$ES_READONLY incase you don't want to be able to select text
    $cLabel_1 = GUICtrlCreateLabel("", 20, 35, 300, 448)
    GUICtrlSetState($cLabel_1, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_1, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_1, $GUI_BKCOLOR_TRANSPARENT)
    _GUICtrlListView_SetExtendedListViewStyle($List1, $LVS_EX_TWOCLICKACTIVATE)
    $List2 = _GUICtrlListView_Create($GUIhandle, "Date/Time", 355, 35, 190, 450, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FLATSB))
    $cLabel_2 = GUICtrlCreateLabel("", 355, 35, 190, 450)
    GUICtrlSetState($cLabel_2, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_2, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_2, $GUI_BKCOLOR_TRANSPARENT)
    $List3 = _GUICtrlListView_Create($GUIhandle, "Speed", 574, 35, 95, 450, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FLATSB))
    $cLabel_3 = GUICtrlCreateLabel("", 574, 35, 95, 450)
    GUICtrlSetState($cLabel_3, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_3, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_3, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("Additional Info", 20, 489) ;creates the label for $List4
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    $List4 = GUICtrlCreateList("", 20, 512, 635, 40, BitOR($WS_BORDER, $WS_VSCROLL), $ES_READONLY)
    GUICtrlSetResizing($List4, $GUI_DOCKAUTO)
    GUICtrlCreateLabel("Active Connections: ", 525, 487) ;creates the label for the active connections
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    $ActiveConnections = GUICtrlCreateList("0", 625, 486, 30, 30) ;dynamically updating list of connections as they come in
    GUICtrlSetResizing($ActiveConnections, $GUI_DOCKSIZE)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUISetState(@SW_SHOW) ;shows the GUI window
    For $Index = 0 To 10 Step 1
        $LV1 = _GUICtrlListView_AddItem($List1, " ") ;adds a default value into $List1
        $LV2 = _GUICtrlListView_AddItem($List2, " ") ;adds a default value into $List2
        $LV3 = _GUICtrlListView_AddItem($List3, " ") ;adds a default value into $List3
    Next
EndFunc   ;==>GUI

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, _
            $ceLines, $cl
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local Const $iLines = _SendMessage($List1, $LVM_GETTOPINDEX) - _SendMessage($List2, $LVM_GETTOPINDEX)
    _SendMessage($List2, $LVM_SCROLL, 0, $iLines * $iDeltaY)
    _SendMessage($List3, $LVM_SCROLL, 0, $iLines * $iDeltaY)
    Switch $hWndFrom
        Case $List1
            Switch $iCode
                Case $LVN_COLUMNCLICK
                    _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List1)
                    _GUICtrlListView_SetItemSelected($List2, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List3, $sData, True, False)
            EndSwitch
        Case $List2
            Switch $iCode
                Case $LVN_COLUMNCLICK
                    _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List2)
                    _GUICtrlListView_SetItemSelected($List1, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List3, $sData, True, False)
            EndSwitch
        Case $List3
            Switch $iCode
                Case $LVN_COLUMNCLICK
                    _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List3)
                    _GUICtrlListView_SetItemSelected($List1, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List2, $sData, True, False)
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_NOTIFY

Func WM_SIZE($hWnd, $msg, $wParam, $lParam)
    _Resize_ListViews()
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

Func _WM_SYSCOMMAND($hWnd, $msg, $wParam, $lParam)
    Const $SC_MAXIMIZE = 0xF030
    Const $SC_RESTORE = 0xF120
    Switch $wParam
        Case $SC_MAXIMIZE, $SC_RESTORE
            $bSysMsg = True
    EndSwitch
EndFunc   ;==>_WM_SYSCOMMAND

Func _Resize_ListViews()
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_1)
    WinMove($List1, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_2)
    WinMove($List2, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_3)
    WinMove($List3, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
EndFunc   ;==>_Resize_ListViews
;========RESIZE FUNCTIONALITY THANKS TO MELBA

All replies are much appreciated! :)

Edited by MikahS

Snips & Scripts


My Snips: graphCPUTemp ~ getENVvars
My Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4

Feel free to use any of my code for your own use.                                                                                                                                                           Forum FAQ

 

Share this post


Link to post
Share on other sites

This is one way to do it.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <GUIListBox.au3>
#include <GUIEdit.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ScrollBarConstants.au3>
#include <GuiScrollBars.au3>

Local $List1, $List2, $List3, $List4, $GUIhandle
Local $Button19, $Button91, $ButtonAZ, $ButtonZA
Local $hChild_1, $cLabel_1, $cLabel_2, $cLabel_3


GUI()
Repaint()

Local $bSysMsg = False

Local $aRect = _GUICtrlListView_GetItemRect($List1, 0)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $List1 = ' & $List1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$iDeltaY = $aRect[3] - $aRect[1]

_GUIScrollBars_EnableScrollBar(ControlGetHandle("", "", $List2), $SB_BOTH, $ESB_DISABLE_BOTH)
_GUIScrollBars_EnableScrollBar(ControlGetHandle("", "", $List3), $SB_BOTH, $ESB_DISABLE_BOTH)

_GUICtrlListView_RegisterSortCallBack($List1)
_GUICtrlListView_RegisterSortCallBack($List2)
_GUICtrlListView_RegisterSortCallBack($List3)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCOMMAND")

While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1]
        Case $GUIhandle
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $GUI_EVENT_CLOSE = ' & $GUI_EVENT_CLOSE & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                    Quit()
                Case $List1 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
                    _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $List2 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
                    _GUICtrlListView_SortItems($List2, GUICtrlGetState($List2))
                Case $List3 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
                    _GUICtrlListView_SortItems($List3, GUICtrlGetState($List3))
            EndSwitch
            If $bSysMsg Then
                $bSysMsg = False
                _Resize_ListViews()
            EndIf
        Case $hChild_1
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    GUIDelete($hChild_1)
            EndSwitch
    EndSwitch
WEnd

Func Repaint()
    Local $L1, $L2, $L3
    _GUICtrlListView_BeginUpdate($List1)
    _GUICtrlListView_DeleteAllItems($List1)
    _GUICtrlListView_BeginUpdate($List2)
    _GUICtrlListView_DeleteAllItems($List2)
    _GUICtrlListView_BeginUpdate($List3)
    _GUICtrlListView_DeleteAllItems($List3)
    For $Index = 0 To 10 Step 1
        $L1 = _GUICtrlListView_AddItem($List1, $Index, $Index)
        $L2 = _GUICtrlListView_AddItem($List2, $Index, $Index)
        $L3 = _GUICtrlListView_AddItem($List3, $Index, $Index)
    Next
    _GUICtrlListView_SetColumnWidth($List1, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($List2, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_EndUpdate($List1)
    _GUICtrlListView_EndUpdate($List2)
    _GUICtrlListView_EndUpdate($List3)
EndFunc   ;==>Repaint

Func Quit()
    _GUICtrlListView_UnRegisterSortCallBack($List1)
    _GUICtrlListView_UnRegisterSortCallBack($List2)
    _GUICtrlListView_UnRegisterSortCallBack($List3)
    Exit
EndFunc   ;==>Quit

Func GUI()
    Local $Index, $LV1, $LV2, $LV3, $L1_EX, $L2_EX, $L3_EX
    $GUIhandle = GUICreate("ArchServer", 680, 575, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX) ;creates the parent window
    $List1 = GUICtrlCreateListView( "Computer Name ", 20, 35, 300, 448, -1, $LVS_EX_DOUBLEBUFFER) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    $cLabel_1 = GUICtrlCreateLabel("", 20, 35, 300, 448)
    GUICtrlSetState($cLabel_1, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_1, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_1, $GUI_BKCOLOR_TRANSPARENT)
    _GUICtrlListView_SetExtendedListViewStyle($List1, $LVS_EX_TWOCLICKACTIVATE)
    $List2 = GUICtrlCreateListView("Date/Time", 355, 35, 190, 450, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FLATSB)) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    $cLabel_2 = GUICtrlCreateLabel("", 355, 35, 190, 450)
    GUICtrlSetState($cLabel_2, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_2, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_2, $GUI_BKCOLOR_TRANSPARENT)
    $List3 = GUICtrlCreateListView( "Speed", 574, 35, 95, 450, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FLATSB)) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    $cLabel_3 = GUICtrlCreateLabel("", 574, 35, 95, 450)
    GUICtrlSetState($cLabel_3, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_3, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_3, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("Additional Info", 20, 489) ;creates the label for $List4
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    $List4 = GUICtrlCreateList("", 20, 512, 635, 40, BitOR($WS_BORDER, $WS_VSCROLL), $ES_READONLY)
    GUICtrlSetResizing($List4, $GUI_DOCKAUTO)
    GUICtrlCreateLabel("Active Connections: ", 525, 487) ;creates the label for the active connections
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    $ActiveConnections = GUICtrlCreateList("0", 625, 486, 30, 30) ;dynamically updating list of connections as they come in
    GUICtrlSetResizing($ActiveConnections, $GUI_DOCKSIZE)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUISetState(@SW_SHOW) ;shows the GUI window
    For $Index = 0 To 10 Step 1
        $LV1 = _GUICtrlListView_AddItem($List1, " ") ;adds a default value into $List1
        $LV2 = _GUICtrlListView_AddItem($List2, " ") ;adds a default value into $List2
        $LV3 = _GUICtrlListView_AddItem($List3, " ") ;adds a default value into $List3
    Next
EndFunc   ;==>GUI

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, _
            $ceLines, $cl
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local Const $iLines = _SendMessage($List1, $LVM_GETTOPINDEX) - _SendMessage($List2, $LVM_GETTOPINDEX)
    _SendMessage($List2, $LVM_SCROLL, 0, $iLines * $iDeltaY)
    _SendMessage($List3, $LVM_SCROLL, 0, $iLines * $iDeltaY)
    Switch $hWndFrom
        Case $List1
            Switch $iCode
;~              Case $LVN_COLUMNCLICK
;~                  _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List1)
                    _GUICtrlListView_SetItemSelected($List2, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List3, $sData, True, False)
            EndSwitch
        Case $List2
            Switch $iCode
;~              Case $LVN_COLUMNCLICK
;~                  _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List2)
                    _GUICtrlListView_SetItemSelected($List1, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List3, $sData, True, False)
            EndSwitch
        Case $List3
            Switch $iCode
;~              Case $LVN_COLUMNCLICK
;~                  _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List3)
                    _GUICtrlListView_SetItemSelected($List1, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List2, $sData, True, False)
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_NOTIFY

Func WM_SIZE($hWnd, $msg, $wParam, $lParam)
    _Resize_ListViews()
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

Func _WM_SYSCOMMAND($hWnd, $msg, $wParam, $lParam)
    Const $SC_MAXIMIZE = 0xF030
    Const $SC_RESTORE = 0xF120
    Switch $wParam
        Case $SC_MAXIMIZE, $SC_RESTORE
            $bSysMsg = True
    EndSwitch
EndFunc   ;==>_WM_SYSCOMMAND

Func _Resize_ListViews()
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_1)
    WinMove($List1, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_2)
    WinMove($List2, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_3)
    WinMove($List3, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
EndFunc   ;==>_Resize_ListViews
;========RESIZE FUNCTIONALITY THANKS TO MELBA

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Share this post


Link to post
Share on other sites

 

This is one way to do it.

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <GUIListBox.au3>
#include <GUIEdit.au3>
#include <GuiListView.au3>
#include <Array.au3>
#include <ButtonConstants.au3>
#include <ScrollBarConstants.au3>
#include <GuiScrollBars.au3>

Local $List1, $List2, $List3, $List4, $GUIhandle
Local $Button19, $Button91, $ButtonAZ, $ButtonZA
Local $hChild_1, $cLabel_1, $cLabel_2, $cLabel_3


GUI()
Repaint()

Local $bSysMsg = False

Local $aRect = _GUICtrlListView_GetItemRect($List1, 0)
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $List1 = ' & $List1 & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
$iDeltaY = $aRect[3] - $aRect[1]

_GUIScrollBars_EnableScrollBar(ControlGetHandle("", "", $List2), $SB_BOTH, $ESB_DISABLE_BOTH)
_GUIScrollBars_EnableScrollBar(ControlGetHandle("", "", $List3), $SB_BOTH, $ESB_DISABLE_BOTH)

_GUICtrlListView_RegisterSortCallBack($List1)
_GUICtrlListView_RegisterSortCallBack($List2)
_GUICtrlListView_RegisterSortCallBack($List3)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_SIZE, "WM_SIZE")
GUIRegisterMsg($WM_SYSCOMMAND, "_WM_SYSCOMMAND")

While 1
    $msg = GUIGetMsg(1)
    Switch $msg[1]
        Case $GUIhandle
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $GUI_EVENT_CLOSE = ' & $GUI_EVENT_CLOSE & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
                    Quit()
                Case $List1 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
                    _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $List2 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
                    _GUICtrlListView_SortItems($List2, GUICtrlGetState($List2))
                Case $List3 ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
                    _GUICtrlListView_SortItems($List3, GUICtrlGetState($List3))
            EndSwitch
            If $bSysMsg Then
                $bSysMsg = False
                _Resize_ListViews()
            EndIf
        Case $hChild_1
            Switch $msg[0]
                Case $GUI_EVENT_CLOSE
                    GUIDelete($hChild_1)
            EndSwitch
    EndSwitch
WEnd

Func Repaint()
    Local $L1, $L2, $L3
    _GUICtrlListView_BeginUpdate($List1)
    _GUICtrlListView_DeleteAllItems($List1)
    _GUICtrlListView_BeginUpdate($List2)
    _GUICtrlListView_DeleteAllItems($List2)
    _GUICtrlListView_BeginUpdate($List3)
    _GUICtrlListView_DeleteAllItems($List3)
    For $Index = 0 To 10 Step 1
        $L1 = _GUICtrlListView_AddItem($List1, $Index, $Index)
        $L2 = _GUICtrlListView_AddItem($List2, $Index, $Index)
        $L3 = _GUICtrlListView_AddItem($List3, $Index, $Index)
    Next
    _GUICtrlListView_SetColumnWidth($List1, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_SetColumnWidth($List2, 0, $LVSCW_AUTOSIZE)
    _GUICtrlListView_EndUpdate($List1)
    _GUICtrlListView_EndUpdate($List2)
    _GUICtrlListView_EndUpdate($List3)
EndFunc   ;==>Repaint

Func Quit()
    _GUICtrlListView_UnRegisterSortCallBack($List1)
    _GUICtrlListView_UnRegisterSortCallBack($List2)
    _GUICtrlListView_UnRegisterSortCallBack($List3)
    Exit
EndFunc   ;==>Quit

Func GUI()
    Local $Index, $LV1, $LV2, $LV3, $L1_EX, $L2_EX, $L3_EX
    $GUIhandle = GUICreate("ArchServer", 680, 575, -1, -1, $WS_SIZEBOX + $WS_SYSMENU + $WS_MAXIMIZEBOX + $WS_MINIMIZEBOX) ;creates the parent window
    $List1 = GUICtrlCreateListView( "Computer Name ", 20, 35, 300, 448, -1, $LVS_EX_DOUBLEBUFFER) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    $cLabel_1 = GUICtrlCreateLabel("", 20, 35, 300, 448)
    GUICtrlSetState($cLabel_1, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_1, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_1, $GUI_BKCOLOR_TRANSPARENT)
    _GUICtrlListView_SetExtendedListViewStyle($List1, $LVS_EX_TWOCLICKACTIVATE)
    $List2 = GUICtrlCreateListView("Date/Time", 355, 35, 190, 450, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FLATSB)) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    $cLabel_2 = GUICtrlCreateLabel("", 355, 35, 190, 450)
    GUICtrlSetState($cLabel_2, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_2, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_2, $GUI_BKCOLOR_TRANSPARENT)
    $List3 = GUICtrlCreateListView( "Speed", 574, 35, 95, 450, -1, BitOR($LVS_EX_DOUBLEBUFFER, $LVS_EX_FLATSB)) ; <<<<<<<<<<<<<<<<<<<<<<<<<<<
    $cLabel_3 = GUICtrlCreateLabel("", 574, 35, 95, 450)
    GUICtrlSetState($cLabel_3, $GUI_DISABLE)
    GUICtrlSetResizing($cLabel_3, $GUI_DOCKAUTO)
    GUICtrlSetBkColor($cLabel_3, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlCreateLabel("Additional Info", 20, 489) ;creates the label for $List4
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    $List4 = GUICtrlCreateList("", 20, 512, 635, 40, BitOR($WS_BORDER, $WS_VSCROLL), $ES_READONLY)
    GUICtrlSetResizing($List4, $GUI_DOCKAUTO)
    GUICtrlCreateLabel("Active Connections: ", 525, 487) ;creates the label for the active connections
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    $ActiveConnections = GUICtrlCreateList("0", 625, 486, 30, 30) ;dynamically updating list of connections as they come in
    GUICtrlSetResizing($ActiveConnections, $GUI_DOCKSIZE)
    GUICtrlSetResizing(-1, $GUI_DOCKSIZE)
    GUISetState(@SW_SHOW) ;shows the GUI window
    For $Index = 0 To 10 Step 1
        $LV1 = _GUICtrlListView_AddItem($List1, " ") ;adds a default value into $List1
        $LV2 = _GUICtrlListView_AddItem($List2, " ") ;adds a default value into $List2
        $LV3 = _GUICtrlListView_AddItem($List3, " ") ;adds a default value into $List3
    Next
EndFunc   ;==>GUI

Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, _
            $ceLines, $cl
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Local Const $iLines = _SendMessage($List1, $LVM_GETTOPINDEX) - _SendMessage($List2, $LVM_GETTOPINDEX)
    _SendMessage($List2, $LVM_SCROLL, 0, $iLines * $iDeltaY)
    _SendMessage($List3, $LVM_SCROLL, 0, $iLines * $iDeltaY)
    Switch $hWndFrom
        Case $List1
            Switch $iCode
;~              Case $LVN_COLUMNCLICK
;~                  _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List1)
                    _GUICtrlListView_SetItemSelected($List2, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List3, $sData, True, False)
            EndSwitch
        Case $List2
            Switch $iCode
;~              Case $LVN_COLUMNCLICK
;~                  _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List2)
                    _GUICtrlListView_SetItemSelected($List1, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List3, $sData, True, False)
            EndSwitch
        Case $List3
            Switch $iCode
;~              Case $LVN_COLUMNCLICK
;~                  _GUICtrlListView_SortItems($List1, GUICtrlGetState($List1))
                Case $NM_CLICK
                    $sData = _GUICtrlListView_GetSelectedIndices($List3)
                    _GUICtrlListView_SetItemSelected($List1, $sData, True, False)
                    _GUICtrlListView_SetItemSelected($List2, $sData, True, False)
            EndSwitch
    EndSwitch
EndFunc   ;==>WM_NOTIFY

Func WM_SIZE($hWnd, $msg, $wParam, $lParam)
    _Resize_ListViews()
    Return $GUI_RUNDEFMSG
EndFunc   ;==>WM_SIZE

Func _WM_SYSCOMMAND($hWnd, $msg, $wParam, $lParam)
    Const $SC_MAXIMIZE = 0xF030
    Const $SC_RESTORE = 0xF120
    Switch $wParam
        Case $SC_MAXIMIZE, $SC_RESTORE
            $bSysMsg = True
    EndSwitch
EndFunc   ;==>_WM_SYSCOMMAND

Func _Resize_ListViews()
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_1)
    WinMove($List1, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_2)
    WinMove($List2, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
    $aRet = ControlGetPos($GUIhandle, "", $cLabel_3)
    WinMove($List3, "", $aRet[0], $aRet[1], $aRet[2], $aRet[3])
EndFunc   ;==>_Resize_ListViews
;========RESIZE FUNCTIONALITY THANKS TO MELBA

 

While this did enable sorting on XP. It also disabled scrolling on both XP and win 7 and disabled sorting on win 7, so unfortunately I think there is some problems using regular AutoIt ListView creation.

EDIT: Okay, my mistake on the win 7 sorting. Just need to figure out how to do scrolling and (had to use handles instead of CtrlID returned from creation of ListView) highlighting of characters in WM_Notify as it seems it is no longer called with regular AutoIt ListView interaction.

EDIT 2: Alright, got it figured out, it was due to the fact I was not using the handle instead I was using the CtrlID. BrewMan's solution thus solved my problems!

My thanks goes to you BrewManNH! :D

Edited by MikahS

Snips & Scripts


My Snips: graphCPUTemp ~ getENVvars
My Scripts: Short-Order Encrypter - message and file encryption V1.6.1 ~ AuPad - Notepad written entirely in AutoIt V1.9.4

Feel free to use any of my code for your own use.                                                                                                                                                           Forum FAQ

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Similar Content

    • By Miliardsto
      I have the following code. You can see there are $color_normal and $color_trans
      In my case normal is too dark . And color trans is to much violet.
      If you run it you will see how its looks. I want gui with listView have the same color like taskbar in windows 10.
      How to achieve that?
       
       
      #include <Date.au3> #include <MsgBoxConstants.au3> #include <GuiListBox.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> HotKeySet("{ESC}", "Terminate") $color_normal = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) $color_trans = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) $trans = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") ConsoleWrite("Transpart = " & $trans & @CRLF) ConsoleWrite("Color normal = " & $color_normal & @CRLF) ConsoleWrite("Color trans = " & $color_trans & @CRLF) ConsoleWrite(_Get_taskbar_color()); It return AARRGGBB $taskbarColor = _Get_taskbar_color() Global $gui = GUICreate("Test", 150, 58,@DesktopWidth-300,@DesktopHeight-58,$WS_POPUP,BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) Global $idListview = GUICtrlCreateListView("", 0, 0, 150, 58,BitOR($LBS_NOTIFY,$LBS_SORT), 0) ;_GuiCtrlMakeTrans(-1,100) ; Add column _GUICtrlListView_AddColumn($idListview, "Msgs", 100) GUICtrlSetFont(-1, 7, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x470C4F) GUICtrlSetBkColor($idListview, 0x310638) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func Terminate() Exit EndFunc Func _Get_taskbar_color() If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "ColorPrevalence") Then If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) Else Return "0xFF" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) EndIf Else If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9000000" Else Return "0xFF000000" EndIf EndIf EndFunc  
    • By VIP
      Please help me sort the directory tree by level.
      I want to sort the folders in order: 6-> 5> 4> 3> 2> 1
      Thanks for all the help and suggestions!

      #include <File.au3> #include <Array.au3> Global Const $sRemotePath = '/user/trong/sync' Global Const $sLocalPath = @MyDocumentsDir _Sequential($sLocalPath, $sRemotePath) Func _Sequential($iLocalPath, $iRemotePath) $iLocalPath = StringReplace($iLocalPath, "/", "\") $iRemotePath = StringReplace($iRemotePath, "\", "/") If (StringRight($iLocalPath, 1) = "\") Then $iLocalPath = StringTrimRight($iLocalPath, 1) ConsoleWrite("> From: " & $iLocalPath & @CRLF) ConsoleWrite("> TO: " & $iRemotePath & @CRLF) Local $aDirList = _FileListToArrayRec($iLocalPath, '*', $FLTAR_FOLDERS, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH) If (Not @error) And IsArray($aDirList) Then For $d = 1 To $aDirList[0] ConsoleWrite("! Current Path (" & $d & '/' & $aDirList[0] & '): ' & $aDirList[$d] & @CRLF) Local $aFileList = _FileListToArray($aDirList[$d], '*', $FLTA_FILES, False) If (Not @error) And IsArray($aFileList) Then For $f = 1 To $aFileList[0] ConsoleWrite("+ File: (" & $f & '/' & $aFileList[0] & ') ON Path ' & $d & '/' & $aDirList[0] & @CRLF) Local $iPathName = StringReplace($aDirList[$d], $iLocalPath & '\', '') Local $iFileName = _SplitPath($aFileList[$f], 5) Local $iRemoteDir = StringReplace($iRemotePath & '/' & $iPathName, '\', '/') Local $iRemoteFile = StringReplace($iRemoteDir & '/' & $iFileName, '\', '/') Local $iLocalFile = $aDirList[$d] & '\' & $iFileName ConsoleWrite("- Path Name : " & $iPathName & @CRLF) ConsoleWrite("- File Name : " & $iFileName & @CRLF) ConsoleWrite("- Remote Dir : " & $iRemoteDir & @CRLF) ConsoleWrite("- Remote File: " & $iRemoteFile & @CRLF) ConsoleWrite("- Local File : " & $iLocalFile & @CRLF) ;~ _FTP_DirCreate($iRemotePath & '\' & $iPathName) ;~ _FTP_ProgressUpload($hFTPSession, $aDirList[$d] & '\' & $iFileName, $iRemotePath & '\' & $iPathName) Next EndIf Next EndIf EndFunc ;==>_Sequential Func _IsFile($sPath) If Not FileExists($sPath) Then Return SetError(1, 0, -1) If StringInStr(FileGetAttrib($sPath), 'D') <> 0 Then Return SetError(0, 0, 0) ;IsDir Else Return SetError(0, 0, 1) ;IsFile EndIf EndFunc ;==>_IsFile Func _SplitPath($sFilePath, $sReturnType = 0) Local $sDrive, $sDir, $sFileName, $sExtension Local $aArray = StringRegExp($sFilePath, "^\h*((?:\\\\\?\\)*(\\\\[^\?\/\\]+|[A-Za-z]:)?(.*[\/\\]\h*)?((?:[^\.\/\\]|(?(?=\.[^\/\\]*\.)\.))*)?([^\/\\]*))$", 1) If @error Then ; This error should never happen. ReDim $aArray[5] $aArray[0] = $sFilePath EndIf $sDrive = $aArray[1] If StringLeft($aArray[2], 1) == "/" Then $sDir = StringRegExpReplace($aArray[2], "\h*[\/\\]+\h*", "\/") Else $sDir = StringRegExpReplace($aArray[2], "\h*[\/\\]+\h*", "\\") EndIf $sFileName = $aArray[3] $sExtension = $aArray[4] If $sReturnType = 0 Then Return $aArray If $sReturnType = 1 Then Return $sDrive If $sReturnType = 2 Then Return $sDir If $sReturnType = 3 Then Return $sFileName If $sReturnType = 4 Then Return $sExtension Local $fName = $sFileName & $sExtension If $sReturnType = 5 Then Return $fName Local $zName = $sDrive & $sDir If $sReturnType = 6 Then Return $zName ; By Dao Van Trong - TRONG.LIVE EndFunc ;==>_SplitPath  
    • By Slipk
      Hello everybody,
      #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <GUIListViewEx.au3> $Form1 = GUICreate("Form1", 539, 350, 192, 124) $ListView1 = GUICtrlCreateListView("CLM1|CLM2", 0, 0, 538, 326) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 150) Local $dynamic = GUICtrlCreateListViewItem("Example1|Example2", $ListView1) $SubMenu = GUICtrlCreateContextMenu($dynamic) $Run = GUICtrlCreateMenuItem("Run", $SubMenu) $Edit = GUICtrlCreateMenuItem("Edit", $SubMenu) $Delete = GUICtrlCreateMenuItem("Delete", $SubMenu) Local $dynamic2 = GUICtrlCreateListViewItem("Example3|Example6", $ListView1) $SubMenu = GUICtrlCreateContextMenu($dynamic2) $Run = GUICtrlCreateMenuItem("Run", $SubMenu) $Edit = GUICtrlCreateMenuItem("Edit", $SubMenu) $Delete = GUICtrlCreateMenuItem("Delete", $SubMenu) _GUIListViewEx_Init($ListView1, "", 0, 0, True, 64) _GUIListViewEx_MsgRegister() GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd I use GUIListViewEx.au3 for position of items in listview but when I move one the context menu disappear. Any solution of this?
      Any method than array it is possible?
      Thank you, appreciate it.
       
       
    • By Slipk
      Hello everybody,
      I download the GUIListViewEx.au3 by Melba23 in order to move up or down my items from a listview.
      Everything it's looking good in script but when I move an item it will crash.
      Any suggestions?
      Thank you! 

    • By Slipk
      Hello everybody,
      Sorry for my bad english.
       
      I try to figure out if I have a dynamic listview with as many items as I want, how to save to a text file all the data listview contains in the same form that you put when you create a listviewitem. I will give you an example.
      When the script is running it will show you the listview and some items. How to take the items data "Data1|Data1_Sub1|Data1_Sub2" in this format and paste into a text file? All of them.
      I tried to explain as good as I can.
      Thank you for your attention!
      #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> $Form_Menu = GUICreate("Form Example", 351, 234, -1, -1) $Form_Menu_ListView1 = GUICtrlCreateListView("Column #1|Column #2|Column #3", 0, 0, 346, 230) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 75) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 75) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 75) GUICtrlCreateListViewItem("Data1|Data1_Sub1|Data1_Sub2", $Form_Menu_ListView1) GUICtrlCreateListViewItem("Data2|Data2_Sub1|Data2_Sub2", $Form_Menu_ListView1) GUICtrlCreateListViewItem("DataN|DataN_SubN|DataN_SubN", $Form_Menu_ListView1) ;The data that appear in the listview be saved in a file like that : #cs Data1|Data1_Sub1|Data1_Sub2 Data2|Data2_Sub1|Data2_Sub2 DataN|DataN_SubN|DataN_SubN #ce GUISetState(@SW_SHOW, $Form_Menu) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
×
×
  • Create New...