Wooltown Posted March 21, 2007 Share Posted March 21, 2007 I tried to use GUICtrlRegisterListViewSort when having set GUIOnEventMode to 1, but, I can't get it to work, is there anyone who can guide me in the right direction? Opt("GUIOnEventMode", 1) Link to comment Share on other sites More sharing options...
JohnBailey Posted April 13, 2007 Share Posted April 13, 2007 I did the same thing (used GUICtrlRegisterListViewSort and Opt('GuiOnEventMode',1) ) without any problems could you post an example of your script; maybe I can give you a good nudge in the right direction. Although, I'm having some problems too, so maybe we can help eachother. A decision is a powerful thing Link to comment Share on other sites More sharing options...
Wooltown Posted April 23, 2007 Author Share Posted April 23, 2007 I did the same thing (used GUICtrlRegisterListViewSort and Opt('GuiOnEventMode',1) ) without any problems could you post an example of your script; maybe I can give you a good nudge in the right direction. Although, I'm having some problems too, so maybe we can help eachother. Hello ! Glad to help you if I can, we can try with my problem, we can take a look at the Help File Example 1 and you can explain how to do it with Opt('GuiOnEventMode',1) expandcollapse popup; ******************************************************* ; Example 1 - sorting 3 column's different ; ******************************************************* #include <GUIConstants.au3> ;Global Const $LVFI_PARAM = 0x0001 ;Global Const $LVIF_TEXT = 0x0001 ;Global Const $LVM_FIRST = 0x1000 Global Const $LVM_GETITEM = $LVM_FIRST + 5 ;Global Const $LVM_FINDITEM = $LVM_FIRST + 13 ;Global Const $LVM_SETSELECTEDCOLUMN = $LVM_FIRST + 140 Dim $nCurCol = -1 Dim $nSortDir = 1 Dim $bSet = 0 Dim $nCol = -1 $hGUI = GUICreate("Test", 300, 200) $lv = GUICtrlCreateListView("Column1|Col2|Col3", 10, 10, 280, 180) GUICtrlRegisterListViewSort(-1, "LVSort"); Register the function "SortLV" for the sorting callback $lvi1 = GUICtrlCreateListViewItem("ABC|666|10.05.2004", $lv) GUICtrlSetImage(-1, "shell32.dll", 7) $lvi2 = GUICtrlCreateListViewItem("DEF|444|11.05.2005", $lv) GUICtrlSetImage(-1, "shell32.dll", 12) $lvi3 = GUICtrlCreateListViewItem("CDE|444|12.05.2004", $lv) GUICtrlSetImage(-1, "shell32.dll", 3) GUISetState() While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE ExitLoop Case $lv $bSet = 0 $nCurCol = $nCol GUICtrlSendMsg($lv, $LVM_SETSELECTEDCOLUMN, GUICtrlGetState($lv), 0) DllCall("user32.dll", "int", "InvalidateRect", "hwnd", GUICtrlGetHandle($lv), "int", 0, "int", 1) EndSwitch WEnd Exit ; Our sorting callback funtion Func LVSort($hWnd, $nItem1, $nItem2, $nColumn) Local $nSort ; Switch the sorting direction If $nColumn = $nCurCol Then If Not $bSet Then $nSortDir = $nSortDir * -1 $bSet = 1 EndIf Else $nSortDir = 1 EndIf $nCol = $nColumn $val1 = GetSubItemText($lv, $nItem1, $nColumn) $val2 = GetSubItemText($lv, $nItem2, $nColumn) ; If it is the 3rd colum (column starts with 0) then compare the dates If $nColumn = 2 Then $val1 = StringRight($val1, 4) & StringMid($val1, 4, 2) & StringLeft($val1, 2) $val2 = StringRight($val2, 4) & StringMid($val2, 4, 2) & StringLeft($val2, 2) EndIf $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 ; 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") DllStructSetData($stLvfi, 1, $LVFI_PARAM) DllStructSetData($stLvfi, 3, $nItemID) Local $stBuffer = DllStructCreate("char[260]") $nIndex = GUICtrlSendMsg($nCtrlID, $LVM_FINDITEM, -1, DllStructGetPtr($stLvfi)); Local $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_GETITEM, 0, DllStructGetPtr($stLvi)); $sItemText = DllStructGetData($stBuffer, 1) $stLvi = 0 $stLvfi = 0 $stBuffer = 0 Return $sItemText EndFunc Link to comment Share on other sites More sharing options...
Wooltown Posted April 23, 2007 Author Share Posted April 23, 2007 Solved it myself, it works but I don't know how the sort works, I just accept it, can I help you ? Link to comment Share on other sites More sharing options...
JohnBailey Posted April 23, 2007 Share Posted April 23, 2007 Solved it myself, it works but I don't know how the sort works, I just accept it, can I help you ?My original post was confusing. My bad. Yeah, I do have GUICtrlRegisterListViewSort and Opt('GuiOnEventMode',1) working together. My issue is sorting without having to click the column. This would allow sorting onenter and sorting after events. Check out: #330349 A decision is a powerful thing Link to comment Share on other sites More sharing options...
Wooltown Posted April 24, 2007 Author Share Posted April 24, 2007 I will take a look at it later, could be fun to solve it, in a week or two I think I will have time, but you never now sometimes the work you have goes quicker and you have some spare time. 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