jcpetu Posted September 14, 2014 Share Posted September 14, 2014 Hi forum, I'm working in a List View where I need to sort by different column contents, some of them are check box, others text and others numbers. I having some problems with the sorting algorithm which in some cases don't sort when clicking the column so I need to double click to get it working. and the arrow on the column header only changes when double clicking. If anybody could helpĀ I'll appreciate. expandcollapse popup#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiStatusBar.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;1=Enables OnEvent functions notifications / 0=Disable (Default) ;GUI----------------------------------------------------------------------------------------------- Global $MainGui, $MsgOk, $MainGuiRefresh, $MainGuiLabelInfo Global $MainGuiW = @DesktopWidth - 10, $MainGuiH = @DesktopHeight - 90 ;LView------------------------------------------------------------------------------------------------ Global $MMenuLVAD Dim $nSortDir = 0 ; toggle for sort up/down Dim $bSet = 0 ; detect the 1st call of LVSort() within a sorting sequence Dim $nCol = -1 ; preserve last column to detect 2nd click (for reverse direction) Global $nCurCol = -1, $Done = 0 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") $MainGui = GUICreate("Test Sort", $MainGuiW, $MainGuiH, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS)) ; GUISetOnEvent($GUI_EVENT_CLOSE, "EventsCtrl") $MMenuLVAD = GUICtrlCreateListView("|Value 1|Value 2|Value 3|Value 4|Value 5|Value 6", 10, 82, 761, 321, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) _GUICtrlListView_SetBkColor($MMenuLVAD, 0xf4ffff) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") ; clicking the column header will start the sort GUICtrlRegisterListViewSort($MMenuLVAD, "LVSort") ; Register the function "SortLV" as the sorting callback GUISetState(@SW_SHOW) For $i = 1 To 100 GUICtrlCreateListViewItem("|PER" & "|" & "Computer" & Random(13467, 23452, 1) & "|" & "Win 7" & "|" & "RTS" & "|" & "User" & Random(100, 500, 1) & "|" & Random(25, 5000, 1), $MMenuLVAD) GUICtrlCreateListViewItem("|SEC" & "|" & "Server" & Random(13467, 23452, 1) & "|" & "Win 2013" & "|" & "NML" & "|" & "User" & Random(100, 500, 1) & "|" & Random(10, 1000, 1), $MMenuLVAD) Next While 1 WEnd Func EventsCtrl() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE GUIDelete() Exit EndSwitch EndFunc ;==>EventsCtrl Func CloseHandler() Switch @GUI_CtrlId Case $MsgOk GUISetState(@SW_ENABLE, $MainGui) GUISetState(@SW_HIDE, @GUI_WinHandle) GUISetState(@SW_SHOW, $MainGui) EndSwitch EndFunc ;==>CloseHandler Func MenuEvents() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE Exit EndSwitch EndFunc ;==>MenuEvents Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $tNMHDR, $hWndFrom, $iCode Local Const $h_lv = GUICtrlGetHandle($MMenuLVAD) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $h_lv Switch $iCode Case $LVN_COLUMNCLICK ;ListView column clicked Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) _Setsort() EndSwitch EndSwitch EndFunc ;==>WM_NOTIFY ;Sort List View Func LVSort($hWnd, $nItem1, $nItem2, $nColumn) ;Local $nSort, $val1, $val2, $nResult Local $val1, $val2 If $nColumn = $nCol Then ; Switch the sorting direction If Not $bSet Then $nSortDir = $nSortDir * -1 $bSet = 1 EndIf Else $nSortDir = 1 EndIf $nCol = $nColumn Switch $nColumn Case 0 ; checkboxes $val1 = GetSubItemText($hWnd, $nItem1, $nColumn) $val2 = GetSubItemText($hWnd, $nItem2, $nColumn) $val1 = _Iif(BitAND(GUICtrlRead($nItem1, 1), $GUI_CHECKED), 1, 0) $val2 = _Iif(BitAND(GUICtrlRead($nItem2, 1), $GUI_CHECKED), 1, 0) Case 1, 2, 3, 4, 5,6; text $val1 = GetSubItemText($hWnd, $nItem1, $nColumn) $val2 = GetSubItemText($hWnd, $nItem2, $nColumn) EndSwitch $nResult = 0 ; No change of item1 and item2 positions If $val1 < $val2 Then $nResult = -1 ; Put item2 before item1 ElseIf $val1 > $val2 Then $nResult = 1 ; Put item2 behind item1 EndIf $nResult = $nResult * $nSortDir Return $nResult EndFunc ;==>LVSort ; Retrieve the text of a listview item in a specified column Func GetSubItemText($nCtrlID, $nItemID, $nColumn) Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int") Local $nIndex, $stBuffer, $stLvi, $sItemText DllStructSetData($stLvfi, 1, $LVFI_PARAM) DllStructSetData($stLvfi, 3, $nItemID) $stBuffer = DllStructCreate("char[260]") $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi)); $stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int") DllStructSetData($stLvi, 1, $LVIF_TEXT) DllStructSetData($stLvi, 2, $nIndex) DllStructSetData($stLvi, 3, $nColumn) DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer)) DllStructSetData($stLvi, 7, 260) GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi)); $sItemText = DllStructGetData($stBuffer, 1) $stLvi = 0 $stLvfi = 0 $stBuffer = 0 Return $sItemText EndFunc ;==>GetSubItemText Func _Iif($fTest, $vTrueVal, $vFalseVal) If $fTest Then Return $vTrueVal Return $vFalseVal EndFunc ;==>_Iif Func _Setsort() $bSet = 0 ; initialize for new sorting GUICtrlSendMsg($MMenuLVAD, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($MMenuLVAD), 0) DllCall("user32.dll", "int", "InvalidateRect", "hwnd", GUICtrlGetHandle($MMenuLVAD), "int", 0, "int", 1) Local $iFormat Local Const $hHeader = _GUICtrlListView_GetHeader($MMenuLVAD) ; clear existing arrows For $x = 0 To _GUICtrlHeader_GetItemCount($hHeader) - 1 $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, $x) If BitAND($iFormat, $HDF_SORTDOWN) Then _GUICtrlHeader_SetItemFormat($hHeader, $x, BitXOR($iFormat, $HDF_SORTDOWN)) ElseIf BitAND($iFormat, $HDF_SORTUP) Then _GUICtrlHeader_SetItemFormat($hHeader, $x, BitXOR($iFormat, $HDF_SORTUP)) EndIf Next ; set arrow in current column Local $nColumn = GUICtrlGetState($MMenuLVAD) $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, $nColumn) If $nSortDir == 1 And $nCol == $nColumn Then ; ascending _GUICtrlHeader_SetItemFormat($hHeader, $nColumn, BitOR($iFormat, $HDF_SORTUP)) Else ; descending _GUICtrlHeader_SetItemFormat($hHeader, $nColumn, BitOR($iFormat, $HDF_SORTDOWN)) EndIf EndFunc ;==>_Setsort Thanks in advance and regards. Link to comment Share on other sites More sharing options...
mikell Posted September 14, 2014 Share Posted September 14, 2014 (edited) ? expandcollapse popup#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;1=Enables OnEvent functions notifications / 0=Disable (Default) Global $MainGui, $MsgOk, $MainGuiRefresh, $MainGuiLabelInfo Global $MainGuiW = @DesktopWidth - 10, $MainGuiH = @DesktopHeight - 90 $MainGui = GUICreate("Test Sort", $MainGuiW, $MainGuiH, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS)) ; GUISetOnEvent($GUI_EVENT_CLOSE, "EventsCtrl") $MMenuLVAD = GUICtrlCreateListView("|Value 1|Value 2|Value 3|Value 4|Value 5|Value 6", 10, 82, 761, 321, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) _GUICtrlListView_SetBkColor($MMenuLVAD, 0xf4ffff) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") _GUICtrlListView_RegisterSortCallBack($MMenuLVAD) GUISetState(@SW_SHOW) For $i = 1 To 100 GUICtrlCreateListViewItem("|PER" & "|" & "Computer" & Random(13467, 23452, 1) & "|" & "Win 7" & "|" & "RTS" & "|" & "User" & Random(100, 500, 1) & "|" & Random(25, 5000, 1), $MMenuLVAD) GUICtrlCreateListViewItem("|SEC" & "|" & "Server" & Random(13467, 23452, 1) & "|" & "Win 2013" & "|" & "NML" & "|" & "User" & Random(100, 500, 1) & "|" & Random(10, 1000, 1), $MMenuLVAD) Next While 1 Sleep(10) WEnd Func _Setsort() _GUICtrlListView_SortItems($MMenuLVAD, GUICtrlGetState($MMenuLVAD)) EndFunc ;==>_Setsort Func EventsCtrl() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE _GUICtrlListView_UnRegisterSortCallBack($MMenuLVAD) GUIDelete() Exit EndSwitch EndFunc ;==>EventsCtrl Edited September 14, 2014 by mikell Link to comment Share on other sites More sharing options...
jcpetu Posted September 14, 2014 Author Share Posted September 14, 2014 IĀ“m sorry, here the complete code. expandcollapse popup#NoTrayIcon #include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiStatusBar.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;1=Enables OnEvent functions notifications / 0=Disable (Default) ;GUI----------------------------------------------------------------------------------------------- Global $MainGui, $MsgOk, $MainGuiRefresh, $MainGuiLabelInfo Global $MainGuiW = @DesktopWidth - 10, $MainGuiH = @DesktopHeight - 90 ;LView------------------------------------------------------------------------------------------------ Global $MMenuLVAD Dim $nSortDir = 0 ; toggle for sort up/down Dim $bSet = 0 ; detect the 1st call of LVSort() within a sorting sequence Dim $nCol = -1 ; preserve last column to detect 2nd click (for reverse direction) Global $nCurCol = -1, $Done = 0 GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") $MainGui = GUICreate("Test Sort", $MainGuiW, $MainGuiH, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS)) ; GUISetOnEvent($GUI_EVENT_CLOSE, "EventsCtrl") $MMenuLVAD = GUICtrlCreateListView("|Value 1|Value 2|Value 3|Value 4|Value 5|Value 6", 10, 82, 761, 321, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) _GUICtrlListView_SetBkColor($MMenuLVAD, 0xf4ffff) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") ; clicking the column header will start the sort GUICtrlRegisterListViewSort($MMenuLVAD, "LVSort") ; Register the function "SortLV" as the sorting callback GUISetState(@SW_SHOW) For $i = 1 To 100 GUICtrlCreateListViewItem("|PER" & "|" & "Computer" & Random(13467, 23452, 1) & "|" & "Win 7" & "|" & "RTS" & "|" & "User" & Random(100, 500, 1) & "|" & Random(25, 5000, 1), $MMenuLVAD) GUICtrlCreateListViewItem("|SEC" & "|" & "Server" & Random(13467, 23452, 1) & "|" & "Win 2013" & "|" & "NML" & "|" & "User" & Random(100, 500, 1) & "|" & Random(10, 1000, 1), $MMenuLVAD) Next While 1 WEnd Func EventsCtrl() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE GUIDelete() Exit EndSwitch EndFunc ;==>EventsCtrl Func CloseHandler() Switch @GUI_CtrlId Case $MsgOk GUISetState(@SW_ENABLE, $MainGui) GUISetState(@SW_HIDE, @GUI_WinHandle) GUISetState(@SW_SHOW, $MainGui) EndSwitch EndFunc ;==>CloseHandler Func MenuEvents() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE Exit EndSwitch EndFunc ;==>MenuEvents Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $tNMHDR, $hWndFrom, $iCode Local Const $h_lv = GUICtrlGetHandle($MMenuLVAD) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $h_lv Switch $iCode Case $LVN_COLUMNCLICK ;ListView column clicked Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) _Setsort() EndSwitch EndSwitch EndFunc ;==>WM_NOTIFY ;Sort List View Func LVSort($hWnd, $nItem1, $nItem2, $nColumn) ;Local $nSort, $val1, $val2, $nResult Local $val1, $val2 If $nColumn = $nCol Then ; Switch the sorting direction If Not $bSet Then $nSortDir = $nSortDir * -1 $bSet = 1 EndIf Else $nSortDir = 1 EndIf $nCol = $nColumn Switch $nColumn Case 0 ; checkboxes $val1 = GetSubItemText($hWnd, $nItem1, $nColumn) $val2 = GetSubItemText($hWnd, $nItem2, $nColumn) $val1 = _Iif(BitAND(GUICtrlRead($nItem1, 1), $GUI_CHECKED), 1, 0) $val2 = _Iif(BitAND(GUICtrlRead($nItem2, 1), $GUI_CHECKED), 1, 0) Case 1, 2, 3, 4, 5,6; text $val1 = GetSubItemText($hWnd, $nItem1, $nColumn) $val2 = GetSubItemText($hWnd, $nItem2, $nColumn) EndSwitch $nResult = 0 ; No change of item1 and item2 positions If $val1 < $val2 Then $nResult = -1 ; Put item2 before item1 ElseIf $val1 > $val2 Then $nResult = 1 ; Put item2 behind item1 EndIf $nResult = $nResult * $nSortDir Return $nResult EndFunc ;==>LVSort ; Retrieve the text of a listview item in a specified column Func GetSubItemText($nCtrlID, $nItemID, $nColumn) Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int") Local $nIndex, $stBuffer, $stLvi, $sItemText DllStructSetData($stLvfi, 1, $LVFI_PARAM) DllStructSetData($stLvfi, 3, $nItemID) $stBuffer = DllStructCreate("char[260]") $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi)); $stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int") DllStructSetData($stLvi, 1, $LVIF_TEXT) DllStructSetData($stLvi, 2, $nIndex) DllStructSetData($stLvi, 3, $nColumn) DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer)) DllStructSetData($stLvi, 7, 260) GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi)); $sItemText = DllStructGetData($stBuffer, 1) $stLvi = 0 $stLvfi = 0 $stBuffer = 0 Return $sItemText EndFunc ;==>GetSubItemText Func _Iif($fTest, $vTrueVal, $vFalseVal) If $fTest Then Return $vTrueVal Return $vFalseVal EndFunc ;==>_Iif Func _Setsort() $bSet = 0 ; initialize for new sorting GUICtrlSendMsg($MMenuLVAD, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($MMenuLVAD), 0) DllCall("user32.dll", "int", "InvalidateRect", "hwnd", GUICtrlGetHandle($MMenuLVAD), "int", 0, "int", 1) Local $iFormat Local Const $hHeader = _GUICtrlListView_GetHeader($MMenuLVAD) ; clear existing arrows For $x = 0 To _GUICtrlHeader_GetItemCount($hHeader) - 1 $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, $x) If BitAND($iFormat, $HDF_SORTDOWN) Then _GUICtrlHeader_SetItemFormat($hHeader, $x, BitXOR($iFormat, $HDF_SORTDOWN)) ElseIf BitAND($iFormat, $HDF_SORTUP) Then _GUICtrlHeader_SetItemFormat($hHeader, $x, BitXOR($iFormat, $HDF_SORTUP)) EndIf Next ; set arrow in current column Local $nColumn = GUICtrlGetState($MMenuLVAD) $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, $nColumn) If $nSortDir == 1 And $nCol == $nColumn Then ; ascending _GUICtrlHeader_SetItemFormat($hHeader, $nColumn, BitOR($iFormat, $HDF_SORTUP)) Else ; descending _GUICtrlHeader_SetItemFormat($hHeader, $nColumn, BitOR($iFormat, $HDF_SORTDOWN)) EndIf EndFunc ;==>_Setsort Link to comment Share on other sites More sharing options...
mikell Posted September 14, 2014 Share Posted September 14, 2014 Did you try the code I posted ? Link to comment Share on other sites More sharing options...
jcpetu Posted September 14, 2014 Author Share Posted September 14, 2014 Yes, but it doesn't work. Link to comment Share on other sites More sharing options...
mikell Posted September 14, 2014 Share Posted September 14, 2014 Is your Autoit version the last one (release 3.3.12.0)Ā ? Link to comment Share on other sites More sharing options...
jcpetu Posted September 14, 2014 Author Share Posted September 14, 2014 yes. Link to comment Share on other sites More sharing options...
jcpetu Posted September 14, 2014 Author Share Posted September 14, 2014 I solved it, below the code if useful for anyone. Thanks a lot mikell. Regards. expandcollapse popup#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <GuiStatusBar.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;1=Enables OnEvent functions notifications / 0=Disable (Default) ;GUI----------------------------------------------------------------------------------------------- Global $MainGui, $MsgOk, $MainGuiRefresh, $MainGuiLabelInfo Global $MainGuiW = @DesktopWidth - 10, $MainGuiH = @DesktopHeight - 90 ;LView------------------------------------------------------------------------------------------------ Global $MMenuLVAD Dim $nSortDir = 0 ; toggle for sort up/down Dim $bSet = 0 ; detect the 1st call of LVSort() within a sorting sequence Dim $nCol = -1 ; preserve last column to detect 2nd click (for reverse direction) Global $nCurCol = -1, $Done = 0 Global $nColumn GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") $MainGui = GUICreate("Test Sort", $MainGuiW, $MainGuiH, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS)) ; GUISetOnEvent($GUI_EVENT_CLOSE, "EventsCtrl") $MMenuLVAD = GUICtrlCreateListView("|Value 1|Value 2|Value 3|Value 4|Value 5|Value 6", 10, 82, 761, 321, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) _GUICtrlListView_SetBkColor($MMenuLVAD, 0xf4ffff) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") ; clicking the column header will start the sort GUICtrlRegisterListViewSort($MMenuLVAD, "LVSort") ; Register the function "SortLV" as the sorting callback GUISetState(@SW_SHOW) For $i = 1 To 2 GUICtrlCreateListViewItem("|PER" & "|" & "Computer" & Random(13467, 23452, 1) & "|" & "Win 7" & "|" & "RTS" & "|" & "User" & Random(100, 500, 1) & "|" & Random(25, 5000, 1), $MMenuLVAD) GUICtrlCreateListViewItem("|SEC" & "|" & "Server" & Random(13467, 23452, 1) & "|" & "Win 2013" & "|" & "NML" & "|" & "User" & Random(100, 500, 1) & "|" & Random(10, 1000, 1), $MMenuLVAD) Next While 1 WEnd Func EventsCtrl() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE GUIDelete() Exit EndSwitch EndFunc ;==>EventsCtrl Func CloseHandler() Switch @GUI_CtrlId Case $MsgOk GUISetState(@SW_ENABLE, $MainGui) GUISetState(@SW_HIDE, @GUI_WinHandle) GUISetState(@SW_SHOW, $MainGui) EndSwitch EndFunc ;==>CloseHandler Func MenuEvents() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE Exit EndSwitch EndFunc ;==>MenuEvents Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $tNMHDR, $hWndFrom, $iCode Local Const $h_lv = GUICtrlGetHandle($MMenuLVAD) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $h_lv Switch $iCode Case $LVN_COLUMNCLICK ;ListView column clicked Local $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) $nColumn = $tInfo _Setsort() EndSwitch EndSwitch EndFunc ;==>WM_NOTIFY Func _Setsort() $bSet = 0 ; initialize for new sorting GUICtrlSendMsg($MMenuLVAD, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($MMenuLVAD), 0) DllCall("user32.dll", "int", "InvalidateRect", "hwnd", GUICtrlGetHandle($MMenuLVAD), "int", 0, "int", 1) Local $iFormat Local Const $hHeader = _GUICtrlListView_GetHeader($MMenuLVAD) ; clear existing arrows For $x = 0 To _GUICtrlHeader_GetItemCount($hHeader) - 1 $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, $x) If BitAND($iFormat, $HDF_SORTDOWN) Then _GUICtrlHeader_SetItemFormat($hHeader, $x, BitXOR($iFormat, $HDF_SORTDOWN)) ElseIf BitAND($iFormat, $HDF_SORTUP) Then _GUICtrlHeader_SetItemFormat($hHeader, $x, BitXOR($iFormat, $HDF_SORTUP)) EndIf Next ; set arrow in current column Local $nColumn = GUICtrlGetState($MMenuLVAD) $iFormat = _GUICtrlHeader_GetItemFormat($hHeader, $nColumn) If $nSortDir == 1 And $nCol == $nColumn Then ; ascending _GUICtrlHeader_SetItemFormat($hHeader, $nColumn, BitOR($iFormat, $HDF_SORTUP)) Else ; descending _GUICtrlHeader_SetItemFormat($hHeader, $nColumn, BitOR($iFormat, $HDF_SORTDOWN)) EndIf EndFunc ;==>_Setsort ;Sort List View Func LVSort($hWnd, $nItem1, $nItem2, $nColumn) If Not $bSet Then If $nColumn = $nCol Then $nSortDir = -$nSortDir Else $nSortDir = 1 EndIf $bSet = 1 EndIf $nCol = $nColumn Switch $nColumn Case 0 ; checkboxes $val1 = GetSubItemText($hWnd, $nItem1, $nColumn) $val2 = GetSubItemText($hWnd, $nItem2, $nColumn) $val1 = _Iif(BitAND(GUICtrlRead($nItem1, 1), $GUI_CHECKED), 1, 0) $val2 = _Iif(BitAND(GUICtrlRead($nItem2, 1), $GUI_CHECKED), 1, 0) Case 1, 2, 3, 4, 5, 6; text $val1 = GetSubItemText($hWnd, $nItem1, $nColumn) $val2 = GetSubItemText($hWnd, $nItem2, $nColumn) EndSwitch $nResult = 0 ; No change of item1 and item2 positions If $val1 < $val2 Then $nResult = -1 ; Put item2 before item1 ElseIf $val1 > $val2 Then $nResult = 1 ; Put item2 behind item1 EndIf $nResult = $nResult * $nSortDir Return $nResult EndFunc ;==>LVSort ; Retrieve the text of a listview item in a specified column Func GetSubItemText($nCtrlID, $nItemID, $nColumn) Local $stLvfi = DllStructCreate("uint;ptr;int;int[2];int") Local $nIndex, $stBuffer, $stLvi, $sItemText DllStructSetData($stLvfi, 1, $LVFI_PARAM) DllStructSetData($stLvfi, 3, $nItemID) $stBuffer = DllStructCreate("char[260]") $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi)); $stLvi = DllStructCreate("uint;int;int;uint;uint;ptr;int;int;int;int") DllStructSetData($stLvi, 1, $LVIF_TEXT) DllStructSetData($stLvi, 2, $nIndex) DllStructSetData($stLvi, 3, $nColumn) DllStructSetData($stLvi, 6, DllStructGetPtr($stBuffer)) DllStructSetData($stLvi, 7, 260) GUICtrlSendMsg($nCtrlID, $LVM_GETITEMA, 0, DllStructGetPtr($stLvi)); $sItemText = DllStructGetData($stBuffer, 1) $stLvi = 0 $stLvfi = 0 $stBuffer = 0 Return $sItemText EndFunc ;==>GetSubItemText Func _Iif($fTest, $vTrueVal, $vFalseVal) If $fTest Then Return $vTrueVal Return $vFalseVal EndFunc ;==>_Iif Link to comment Share on other sites More sharing options...
jcpetu Posted December 14, 2014 Author Share Posted December 14, 2014 Hi, again. Now I'm trying to add images and I get some problems: 1.Check box column isn't sorted when checked,Ā 2. images doesn't show up and 3.In column 0 appears the images of the image vector. Any help will be appreciated. Thanks in advance and regards. expandcollapse popup#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <GuiListView.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> Opt("GUIOnEventMode", 1) ;1=Enables OnEvent functions notifications / 0=Disable (Default) Global $MainGui, $MsgOk, $MainGuiRefresh, $MainGuiLabelInfo Global $MainGuiW = @DesktopWidth - 10, $MainGuiH = @DesktopHeight - 90 $MainGui = GUICreate("Test Sort", $MainGuiW, $MainGuiH, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS)) ; GUISetOnEvent($GUI_EVENT_CLOSE, "EventsCtrl") $MMenuLVAD = GUICtrlCreateListView("|Value 1|Value 2|Value 3|Value 4", 10, 82, 761, 321, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) _GUICtrlListView_SetBkColor($MMenuLVAD, 0xf4ffff) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") _GUICtrlListView_RegisterSortCallBack($MMenuLVAD) ; Load images Global $hImage = _GUIImageList_Create(24, 24, 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) _GUICtrlListView_SetImageList($MMenuLVAD, $hImage, 1) ; 1 - Image list with small icons GUISetState(@SW_SHOW) For $i = 0 To 100 _GUICtrlListView_AddItem($MMenuLVAD, "", $i) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, "Computer" & Random(13467, 23452, 1), 1, Random(0, 5, 1)) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, "User" & Random(100, 500, 1), 2,2) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, Random(25, 5000, 1), 3) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, Random(1, 800, 1), 4) Next While 1 Sleep(10) WEnd Func _Setsort() _GUICtrlListView_SortItems($MMenuLVAD, GUICtrlGetState($MMenuLVAD)) EndFunc ;==>_Setsort Func EventsCtrl() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE _GUICtrlListView_UnRegisterSortCallBack($MMenuLVAD) GUIDelete() Exit EndSwitch EndFunc ;==>EventsCtrl Link to comment Share on other sites More sharing options...
LarsJ Posted December 15, 2014 Share Posted December 15, 2014 1) Sort is done on the text value, not checked state2) Check $LVS_EX_SUBITEMIMAGES (and _GUICtrlListView_SetExtendedListViewStyle)3) Use a non-existing image index e.g. 1000 Controls,Ā Ā File Explorer,Ā Ā ROT objects,Ā Ā UI Automation,Ā Ā Windows Message MonitorCompiled code:Ā Accessing AutoIt variables,Ā Ā DotNet.au3 UDF,Ā Ā Using C# and VB codeShell menus:Ā The Context menu, Ā The Favorites menu.Ā Shell related:Ā Control Panel, Ā System Image ListsGraphics related:Ā Rubik's Cube, Ā OpenGL without external libraries,Ā Ā Navigating in an image, Ā Non-rectangular selectionsListView controls:Ā Colors and fonts, Ā Multi-line header,Ā Ā Multi-line items, Ā Checkboxes and icons,Ā Ā Incremental searchListView controls:Ā Virtual ListViews,Ā Ā Editing cells,Ā Ā Data display functions Link to comment Share on other sites More sharing options...
jcpetu Posted December 15, 2014 Author Share Posted December 15, 2014 Hi Larsj, OK with 1) and Ā 2) it works now Ā , but for 3) from _GUICtrlListView_RegisterSortCallBack Autoit Help: This function will sort listviews that have icons, checkboxes, sub-item icons. Thanks a lot and regards. Link to comment Share on other sites More sharing options...
MikahS Posted December 15, 2014 Share Posted December 15, 2014 Does any sorting happen when calling the sort routine? Snips & Scripts My Snips: graphCPUTemp ~ getENVvarsMy 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 Ā Link to comment Share on other sites More sharing options...
LarsJ Posted December 15, 2014 Share Posted December 15, 2014 jcpetu. Yes, the sort function can handle different kind of listviews. The sort is still by the text value. Add some text values to your items, and see it for your self.To sort by the checked state you have to create your own sort function, or use some kind of work around. Controls,Ā Ā File Explorer,Ā Ā ROT objects,Ā Ā UI Automation,Ā Ā Windows Message MonitorCompiled code:Ā Accessing AutoIt variables,Ā Ā DotNet.au3 UDF,Ā Ā Using C# and VB codeShell menus:Ā The Context menu, Ā The Favorites menu.Ā Shell related:Ā Control Panel, Ā System Image ListsGraphics related:Ā Rubik's Cube, Ā OpenGL without external libraries,Ā Ā Navigating in an image, Ā Non-rectangular selectionsListView controls:Ā Colors and fonts, Ā Multi-line header,Ā Ā Multi-line items, Ā Checkboxes and icons,Ā Ā Incremental searchListView controls:Ā Virtual ListViews,Ā Ā Editing cells,Ā Ā Data display functions Link to comment Share on other sites More sharing options...
jcpetu Posted December 15, 2014 Author Share Posted December 15, 2014 Thanks a lot LarsJ. Link to comment Share on other sites More sharing options...
jcpetu Posted December 15, 2014 Author Share Posted December 15, 2014 MikahS Does any sorting happen when calling the sort routine? Ā yes,Ā the sort rotine sorts every type of data (date, text, number) but checkboxes. Link to comment Share on other sites More sharing options...
jcpetu Posted December 16, 2014 Author Share Posted December 16, 2014 Anyone knows why GUICtrlSetBkColor($MMenuLVAD, $GUI_BKCOLOR_LV_ALTERNATE) doesn't works $MMenuLVAD = GUICtrlCreateListView("", 10, 82, 761, 321, -1, BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") GUICtrlSetBkColor($MMenuLVAD, $GUI_BKCOLOR_LV_ALTERNATE) Link to comment Share on other sites More sharing options...
LarsJ Posted December 16, 2014 Share Posted December 16, 2014 You do it like this:Ā #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <MsgBoxConstants.au3> Example() Func Example() Local $listview, $item1, $item2, $item3, $item4, $item5, $item6 GUICreate("listview items", 220, 250, 100, 200) $listview = GUICtrlCreateListView("col1 |col2|col3 ", 10, 10, 200, 150) GUICtrlSetBkColor(-1, $GUI_BKCOLOR_LV_ALTERNATE) $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview) GUICtrlSetBkColor(-1, 0x00FF00) $item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview) GUICtrlSetBkColor(-1, 0x00FF00) $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview) GUICtrlSetBkColor(-1, 0x00FF00) $item4 = GUICtrlCreateListViewItem("item4|col22|col23", $listview) GUICtrlSetBkColor(-1, 0x00FF00) $item5 = GUICtrlCreateListViewItem("item5|col12|col13", $listview) GUICtrlSetBkColor(-1, 0x00FF00) $item6 = GUICtrlCreateListViewItem("item6|col32|col33", $listview) GUICtrlSetBkColor(-1, 0x00FF00) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE ExitLoop EndSwitch WEnd EndFunc Controls,Ā Ā File Explorer,Ā Ā ROT objects,Ā Ā UI Automation,Ā Ā Windows Message MonitorCompiled code:Ā Accessing AutoIt variables,Ā Ā DotNet.au3 UDF,Ā Ā Using C# and VB codeShell menus:Ā The Context menu, Ā The Favorites menu.Ā Shell related:Ā Control Panel, Ā System Image ListsGraphics related:Ā Rubik's Cube, Ā OpenGL without external libraries,Ā Ā Navigating in an image, Ā Non-rectangular selectionsListView controls:Ā Colors and fonts, Ā Multi-line header,Ā Ā Multi-line items, Ā Checkboxes and icons,Ā Ā Incremental searchListView controls:Ā Virtual ListViews,Ā Ā Editing cells,Ā Ā Data display functions Link to comment Share on other sites More sharing options...
jcpetu Posted December 16, 2014 Author Share Posted December 16, 2014 Like this: expandcollapse popup#include <Array.au3> #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <GuiImageList.au3> #include <GuiListView.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <GDIPlus.au3> Opt("GUIOnEventMode", 1) ;1=Enables OnEvent functions notifications / 0=Disable (Default) Global $MainGui, $MsgOk, $MainGuiRefresh, $MainGuiLabelInfo Global $MainGuiW = @DesktopWidth - 10, $MainGuiH = @DesktopHeight - 90 _GDIPlus_Startup() Global $Notebook = _GDIPlus_BitmapCreateFromMemory(ScanNew32x32(), True) ;GDI bitmap Global $Computer = _GDIPlus_BitmapCreateFromMemory(Computer32x32(), True) ;GDI bitmap $MainGui = GUICreate("Test Sort", 800, 500, 10, 10, BitOR($GUI_SS_DEFAULT_GUI, $WS_CLIPSIBLINGS)) ; GUISetOnEvent($GUI_EVENT_CLOSE, "EventsCtrl") ;$MMenuLVAD = GUICtrlCreateListView("|Value 1|Value 2|Value 3|Value 4", 10, 82, 761, 321, -1, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER,$LVS_EX_SUBITEMIMAGES)) $MMenuLVAD = GUICtrlCreateListView("", 10, 82, 761, 321, -1, BitOR($LVS_EX_SUBITEMIMAGES, $LVS_EX_CHECKBOXES, $LVS_EX_FULLROWSELECT, $LVS_EX_HEADERDRAGDROP, $LVS_EX_GRIDLINES, $LVS_EX_DOUBLEBUFFER)) GUICtrlSetOnEvent($MMenuLVAD, "_Setsort") GUICtrlSetBkColor($MMenuLVAD, $GUI_BKCOLOR_LV_ALTERNATE) _GUICtrlListView_RegisterSortCallBack($MMenuLVAD) ;Add columns _GUICtrlListView_AddColumn($MMenuLVAD, "", 30) _GUICtrlListView_AddColumn($MMenuLVAD, "Title 1", 80, 3) _GUICtrlListView_AddColumn($MMenuLVAD, "Title 2", 80) _GUICtrlListView_AddColumn($MMenuLVAD, "Title 3", 80) _GUICtrlListView_AddColumn($MMenuLVAD, "Title 4", 80) ; Load images --> Global $hImage = _GUIImageList_Create(32, 32, 5, 3) _GUIImageList_Add($hImage, $Computer) _GUIImageList_Add($hImage, $Notebook) _GUIImageList_AddIcon($hImage, @SystemDir&"\"&"shell32.dll", 146) _GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($MMenuLVAD, 0xff442211, 32, 32)) _GUICtrlListView_SetImageList($MMenuLVAD, $hImage, 1) ; 1 - Image list with small icons GUISetState(@SW_SHOW) For $i = 0 To 10 _GUICtrlListView_AddItem($MMenuLVAD, "", 777) ;777 use index that not exists on the array _GUICtrlListView_AddSubItem($MMenuLVAD, $i, "Computer" & Random(13467, 23452, 1), 1, 0) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, "User" & Random(100, 500, 1), 2, 1) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, Random(25, 5000, 1), 3,2) _GUICtrlListView_AddSubItem($MMenuLVAD, $i, Random(1, 800, 1), 4,3) GUICtrlSetBkColor(-1, 0xc8d5e6) ;Cyan gray Next _GDIPlus_Shutdown() While 1 Sleep(10) WEnd Func _Setsort() _GUICtrlListView_SortItems($MMenuLVAD, GUICtrlGetState($MMenuLVAD)) EndFunc ;==>_Setsort Func EventsCtrl() Local $Msg = @GUI_CtrlId Switch $Msg Case $GUI_EVENT_CLOSE _GUICtrlListView_UnRegisterSortCallBack($MMenuLVAD) _WinAPI_DeleteObject($Notebook) _WinAPI_DeleteObject($Computer) GUIDelete() Exit EndSwitch EndFunc ;==>EventsCtrl Func ScanNew32x32() Local $ScanNew32x32png $ScanNew32x32png &= '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' $ScanNew32x32png &= 'bw7XdCI68NShV57/9jNPa1oFbx3/O6avXEEmley4Pjs7f/OZ7/7wxYOU0gFK6YBl21B1DaqhQOcsUJHNGtScLJZyb+vZ8qXCQnoCWShfSODT8LdPjaCjrR2xxoZXJ2ZmDv/iyE/Kn3nI3Bbsbe5cd6hra8/jiQ2dbdFIhDdME0uLi0pqam586uKV1+h8+Q/Osmn81xJ8Hvxb3/j6M59rHEdvYmvH85vv3fK1HTv7pIS/mTT6GqBTHUtd8cDk+vBub1iIXz55DlbYPYprlsndNjggx/ra98c3Rx9q7pY9trNCGmQPHojvxMZoOwROAR9Q+MS2hkRbX8tXfaanGwAn3CY4ALSH2qW+SIvYFg8H0eKJockbQdBTj6gdRNzXiGp9ETyzpEjC01uKCVv0OSSFW4H379sfBRD4uIQaAPvy9TMJOWS3NIR53Bnuwt2NX0JQCoIDQdQbw66WfWjxx3GGHsNkAwvKQZIoNsAj1ALv37ffB+AuAMsAlkZHTpg37wU6JerzmAh4TTT4OLQFIuCIB4QQeAURzUIQFAEEvTb8Hh1ekdTVB4KiUGPsEoAogOSn4QCgrVp5r2WXHGMZGe04xlbSaAvsQnvgUZStJBaUEaTVC1DMKQi6rnOGW/LZISLUUvPRkRPl/n37rwLo79+3nwEoAigAsFaXMtTMLM9ZnfmSYn8QWlDHUe/h4LgPwqTzyFb/huXqGCzLx4yMlaquOJeWM/M5oadrw/+KvQ3AOgCtAGIAqgAyAJIAFAAigFCsdR0rXy9fzDfo92qN/H2bdkjw8FOo2ENg7gLCdQqyJQ/yk0YhO2m8wUv2OQBUWFxcwNE3Zj4K1YfC4WBw9OXfDf2yf9/+hwF0AGgDsAbgOoAUgDOjIydyn7ECFj8ek5GYJzfzb+k7QSruETsnwiSyBN0wkV4uODOT9rWZ89pfi2k2VFi80Q3Jzv7+g4SIg5IoLrvgznwMSgOYBjA3OnKiWMtuyXsg3/+QuL37DvnBTd3CpmiYhAzLpQuL7sLktHX+wrj6fuoKPmnj/wG1Jc98TP5pLwAAAABJRU5ErkJggg==' Return Binary(_Base64Decode($ScanNew32x32png)) EndFunc ;==>_ScanNew32x32png Func Computer32x32() Local $Base64String $Base64String &= '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' $Base64String &= 'dMDxj1Yk5K9AX18f/tXRjp4eO4p27ZLWrl0blZ2dvXfNmjW/mTFjhlktPAcGBpT3IbTmr6paxNLbMlhTU/NOa2vrEQLinQTgWFmZMzkpKSZt/nyYzWZxHwh9iYkh8ryd4oBYcN396uu4eJPpDaqSjvDvqgHeeOao1TBPtRgq71RJ1Cq4vLz8zcuXL79FMTMhjkRW0xsQu/6Xvxj58s6XUovNhjiqB1evXs0vI/ZeZaWxq6vL+VR+vmTQ69dRpXyOvI9UDxbRJE8MDW25HmLBt5FaW1vbH0mmyQBoU7TBYEijcZHP5zNRirCIiIgBCqh/Uu8k/T18H2XBDCpWnyUpNq5ateo50t5CcaDnKaUa5WB4zU+sBCmGvqNb1Xbp0qULlF0tBMQzSYIp5uoYXt6rXunIc55fs8jwHGIvnQqZJAIWxxmh/6QcFDv27u7uBwS+h/aPUPfI4TRNAeC/aVJYVwGHV2qPPOCxtscO4N+zbf1+lKO2XAAAAABJRU5ErkJggg==' Return Binary(_WinAPI_Base64Decode($Base64String)) EndFunc ;==>_Base64String Func _Base64Decode($input_string) Local $struct = DllStructCreate("int") Local $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", 0, "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & DllStructGetData($struct, 1) & "]") $a_Call = DllCall("Crypt32.dll", "int", "CryptStringToBinary", "str", $input_string, "int", 0, "int", 1, "ptr", DllStructGetPtr($a), "ptr", DllStructGetPtr($struct, 1), "ptr", 0, "ptr", 0) If @error Or Not $a_Call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_Base64Decode Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc ;==>_WinAPI_Base64Decode Link to comment Share on other sites More sharing options...
LarsJ Posted December 16, 2014 Share Posted December 16, 2014 No, to use $GUI_BKCOLOR_LV_ALTERNATE you need ControlID for GUICtrlSetBkColor. And to get ControlID you need GUICtrlCreateListViewItem. _GUICtrlListView_AddItem and _GUICtrlListView_AddSubItem are not returning ControlID.GUICtrlSetBkColor(-1, 0xc8d5e6) is setting backcolor for the listview, since the last ControlID is for the listview. You must set backcolor for the listview items. Controls,Ā Ā File Explorer,Ā Ā ROT objects,Ā Ā UI Automation,Ā Ā Windows Message MonitorCompiled code:Ā Accessing AutoIt variables,Ā Ā DotNet.au3 UDF,Ā Ā Using C# and VB codeShell menus:Ā The Context menu, Ā The Favorites menu.Ā Shell related:Ā Control Panel, Ā System Image ListsGraphics related:Ā Rubik's Cube, Ā OpenGL without external libraries,Ā Ā Navigating in an image, Ā Non-rectangular selectionsListView controls:Ā Colors and fonts, Ā Multi-line header,Ā Ā Multi-line items, Ā Checkboxes and icons,Ā Ā Incremental searchListView controls:Ā Virtual ListViews,Ā Ā Editing cells,Ā Ā Data display functions Link to comment Share on other sites More sharing options...
jcpetu Posted December 17, 2014 Author Share Posted December 17, 2014 THANKS a LOT Larsj. Ā Regards. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now