Garp99HasSpoken Posted February 23, 2013 Share Posted February 23, 2013 Trying to convert over to using the UDF. Followed the examples yet I get unexpected results such that numbers are put into the first column. Not sure where I went wrong since not that many lines of code were added. expandcollapse popup;Autoit Options ; #NoTrayIcon ;No Tray Icon Opt("GUIOnEventMode", 1) Opt("WinTextMatchMode", 1) ;1=complete, 2=quick Opt("WinTitleMatchMode", 3) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase Opt("GUICloseOnESC", 0) ;1=ESC closes, 0=ESC won't close Opt("GUIResizeMode", 802) ; Opt("GUIResizeMode", 1) #Include <String.au3> #include <Date.au3> #Include <WinAPI.au3> #include <File.au3> #include <GuiTab.au3> ;#include <GDIPlus.au3> #include <GUIListBox.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> #include <GuiStatusBar.au3> #include <GuiToolbar.au3> ; Constants includes #include <ListViewConstants.au3> #include <TabConstants.au3> #include <ToolbarConstants.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <DateTimeConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include "GUIListViewEx.au3" ; Tab groups Global Const $L_VOLUNTEERS = " Volunteers " Global Const $L_VOLUNTEER = "Volunteer" Global Const $L_EVENTS = " Events " Global Const $L_EVENT = "Event" ; Tab items Global Const $T_Event = 0 Global Const $T_Volunteer = 1 ;Versions Info Global $ProgName = "Volunteer Coordinator" Global $VersionBuild = "20130213" ;YEAR|MON|DAY Global $ProgVersion = "0.1" GLOBAL $AboutVersion = "2013.02.13 (" & $ProgVersion & ")" Global $ProgWidth =1024, $ProgHeight = 720 Local $sWidth = 400, $sHeight = 350 Local $hToolbar = 40, $hStatus = 40, $hTabs = $hToolbar+30, $hLists = ($ProgHeight - $hTabs - $hStatus - $hToolbar) #Region ### START Koda GUI section ### Form=R:\AutoIt Examples\koda_2008-09-03\Forms\VolunteerCoordinator.kxf Global $MainForm = GUICreate($ProgName, $ProgWidth, $ProgHeight, (@DesktopWidth - $ProgWidth) / 2, (@DesktopHeight - $ProgHeight) / 2, $WS_SIZEBOX + $WS_SYSMENU ) GUISetState(@SW_HIDE) GUISetBkColor(0xA6CAF0) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") GUISetOnEvent($GUI_EVENT_MINIMIZE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESTORE, "") Global $TabVol = GUICtrlCreateTab(1, $hTabs-$hToolbar, $ProgWidth-2, $hToolbar, $TCS_TABS) GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) Global $TabSheetEvents = GUICtrlCreateTabItem($L_EVENTS) Global $ListViewEvents = GUICtrlCreateListView( _ "Date |Type |Volunteers ", _ 2, $hTabs, $ProgWidth-4, $hLists, $LVS_SHOWSELALWAYS, $LVS_SORTDESCENDING) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) $iLV_Events = _GUIListViewEx_Init($ListViewEvents, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Events) EventFullList() ;GUICtrlSetOnEvent(-1, "ListViewEventsClick") _GUICtrlListView_SetColumnWidth($ListViewEvents, 0, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewEvents, 1, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewEvents, 2, $LVSCW_AUTOSIZE_USEHEADER ) ;_GUICtrlListView_RegisterSortCallBack($ListViewEvents, True, True) Global $ListEventsVol = GUICtrlCreateList("", 819, $hTabs, 202, 618) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") ;GUICtrlSetOnEvent(-1, "ListEventsVolClick") Global $TabSheetVolunteers = GUICtrlCreateTabItem($L_VOLUNTEERS) Global $ListViewVolunteers = GUICtrlCreateListView( _ "Name |Type |Home |Work |Cell |Address |City |Prov|Postal|Notes ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_SORTASCENDING)) GUICtrlSetFont($ListViewVolunteers, 10, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) ;$iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, $ListOfVolunteers, 0, 0, True, True) $iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Volunteers) VolunteerFullList() ;GUICtrlSetOnEvent(-1, "ListViewVolunteersClick") _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 0, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 1, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 2, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 3, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 4, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 6, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 9, $LVSCW_AUTOSIZE_USEHEADER) ;_GUICtrlListView_RegisterSortCallBack($ListViewVolunteers, False, True) GUICtrlCreateTabItem("") ;end of tabs sleep(500) _GUICtrlTab_SetCurFocus($TabVol, $T_Event) ; _GUICtrlTab_SetCurFocus($ListViewEvents, $T_Event) Global $StatusBar = _GUICtrlStatusBar_Create($MainForm) _GUICtrlStatusBar_SetSimple($StatusBar) _GUICtrlStatusBar_SetText($StatusBar, "Simple status bar window text goes here.") _GUICtrlStatusBar_SetMinHeight($StatusBar, $hStatus) GUISetFont(10, 400, 0, "MS Sans Serif", $MainForm) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRIMARYdown') GUISetOnEvent($GUI_EVENT_RESTORE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESIZED, "") GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") #EndRegion ### END Koda GUI section ### GUISwitch($MainForm) GUISetState(@SW_SHOW) ; Set the Events ListView as active _GUIListViewEx_SetActive($iLV_Events) ;GUISetState(@SW_SHOW, $MainForm) While 1 sleep(100) WEnd GUISetState(@SW_HIDE) GUIDelete() ;_GUICtrlListView_UnRegisterSortCallBack($ListViewEvents) ;_GUICtrlListView_UnRegisterSortCallBack($ListViewVolunteers) _GUIListViewEx_Close($iLV_Events) _GUIListViewEx_Close($iLV_Volunteers) GUIRegisterMsg($WM_NOTIFY, "") Exit Func MainFormClose() Exit EndFunc ;==>MainFormClose Func EventFullList() ;~ GUICtrlCreateListViewItem("February 12, 2013|All Day||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 13, 2013|AM||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 13, 2013|PM||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 15, 2013|From|11:00|18:00", $ListViewEvents) _GUIListViewEx_Insert("February 13, 2013|AM|Sheila Blue,Dan Black") _GUIListViewEx_Insert("February 13, 2013|Afternoon|Dan Black,Paul Green") _GUIListViewEx_Insert("February 12, 2013|All Day|Mary Pigment,Dan Black,Sheila Blue,Paul Green") _GUIListViewEx_Insert("February 15, 2013|11:00-18:00|Sheila Blue,Dan Black,Paul Green") _GUIListViewEx_Insert("February 14, 2013|Evening|Mary Pigment,Dan Black,Paul Green") EndFunc ;==>EventFullList Func VolunteerFullList() ;~ GUICtrlCreateListViewItem("Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Paul Green|Friend/Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Montreal|QC|H2N5L1|", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator", $ListViewVolunteers) _GUIListViewEx_Insert("Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator") _GUIListViewEx_Insert("Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal") _GUIListViewEx_Insert("Paul Green|Friend/Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Montreal|QC|H2N5L1|") _GUIListViewEx_Insert("Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator") EndFunc ;==>VolunteerFullList Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView1 = GUICtrlGetHandle($ListViewEvents) $hWndListView2 = GUICtrlGetHandle($ListViewVolunteers) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView1 Switch $iCode Case $LVN_COLUMNCLICK ; A column was clicked $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Kick off the sort callback _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem")) ; No return value Case $LVN_ITEMCHANGING ; An item is changing $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) Return True ; prevent the change ;Return False ; allow the change Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You clicked on: " & $text) ; _GUICtrlListView_SetItemSelected($ListViewEvents, DllStructGetData($tInfo, "Index")) Return $GUI_RUNDEFMSG ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) Return $GUI_RUNDEFMSG ; DO EDIT HERE ; No return value Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You hit ENTER on: " & $text) EndSwitch Case $hWndListView2 Switch $iCode Case $LVN_COLUMNCLICK ; A column was clicked $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Kick off the sort callback _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem")) ; No return value Case $LVN_ITEMCHANGING ; An item is changing $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) Return True ; prevent the change ;Return False ; allow the change Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You clicked on: " & $text) ; _GUICtrlListView_SetItemSelected($ListViewVolunteers, DllStructGetData($tInfo, "Index")) ;Return $GUI_RUNDEFMSG ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) ;Return $GUI_RUNDEFMSG ; No return value ; DO EDIT HERE Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You hit ENTER on: " & $text) ; No return value ; DO EDIT HERE EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 (edited) Garp99HasSpoken, It took some doing (I wrote that UDF a long time ago!) but I have found the problem and fixed it for your script. I am now checking to make sure that the fix has no knock-on effects in other cases and then I will release a new version in the UDF thread. Thanks for reporting the bug. It was obvious what was happening - the delimited string was being split and the wrong elements were being read into the ListView - but I needed to track down why this was happening. It turned out that it was the particular case of the UDF adding a delimited string to an originally empty native ListView with multiple columns. That is what happens when you try to deal with so many options (native or UDF ListView, originally empty or filled, single or multiple columns, data insert as string or array). M23 Edited February 23, 2013 by Melba23 Added an option  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 Didn't expect it to be a bug, but good to know the original author is still around to find and fix the problem. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 Garp99HasSpoken, The new release is out now - you can get it from the link in my sig. M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 (edited) Testing - your fix got it working on the first tab but the second tab has two blank lines followed by two good lines. Here's the new code with the proper handling to make your UDF sorting work. Do you see any reason why the Case $NM_RETURN doesn't work when Click and Double-Click work? expandcollapse popup;Autoit Options ; #NoTrayIcon ;No Tray Icon Opt("GUIOnEventMode", 1) Opt("WinTextMatchMode", 1) ;1=complete, 2=quick Opt("WinTitleMatchMode", 3) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase Opt("GUICloseOnESC", 0) ;1=ESC closes, 0=ESC won't close Opt("GUIResizeMode", 802) ; Opt("GUIResizeMode", 1) #Include <String.au3> #include <Date.au3> #Include <WinAPI.au3> #include <File.au3> #include <GuiTab.au3> ;#include <GDIPlus.au3> #include <GUIListBox.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> #include <GuiStatusBar.au3> #include <GuiToolbar.au3> ; Constants includes #include <ListViewConstants.au3> #include <TabConstants.au3> #include <ToolbarConstants.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <DateTimeConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include "GUIListViewEx.au3" ; Tab groups Global Const $L_VOLUNTEERS = " Volunteers " Global Const $L_VOLUNTEER = "Volunteer" Global Const $L_EVENTS = " Events " Global Const $L_EVENT = "Event" ; Tab items Global Const $T_Event = 0 Global Const $T_Volunteer = 1 ;Versions Info Global $ProgName = "Volunteer Coordinator" Global $VersionBuild = "20130213" ;YEAR|MON|DAY Global $ProgVersion = "0.1" GLOBAL $AboutVersion = "2013.02.13 (" & $ProgVersion & ")" Global $ProgWidth =1024, $ProgHeight = 720 Local $sWidth = 400, $sHeight = 350 Local $hToolbar = 40, $hStatus = 40, $hTabs = $hToolbar+30, $hLists = ($ProgHeight - $hTabs - $hStatus - $hToolbar) #Region ### START Koda GUI section ### Form=R:\AutoIt Examples\koda_2008-09-03\Forms\VolunteerCoordinator.kxf Global $MainForm = GUICreate($ProgName, $ProgWidth, $ProgHeight, (@DesktopWidth - $ProgWidth) / 2, (@DesktopHeight - $ProgHeight) / 2, $WS_SIZEBOX + $WS_SYSMENU ) GUISetState(@SW_HIDE) GUISetBkColor(0xA6CAF0) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") GUISetOnEvent($GUI_EVENT_MINIMIZE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESTORE, "") Global $TabVol = GUICtrlCreateTab(1, $hTabs-$hToolbar, $ProgWidth-2, $hToolbar, $TCS_TABS) GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) Global $TabSheetEvents = GUICtrlCreateTabItem($L_EVENTS) Global $ListViewEvents = GUICtrlCreateListView( _ "Date |Type |Volunteers ", _ 2, $hTabs, $ProgWidth-4, $hLists, $LVS_SHOWSELALWAYS, $LVS_SORTDESCENDING) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) $iLV_Events = _GUIListViewEx_Init($ListViewEvents, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Events) EventFullList() ;GUICtrlSetOnEvent(-1, "ListViewEventsClick") _GUICtrlListView_SetColumnWidth($ListViewEvents, 0, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewEvents, 1, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewEvents, 2, $LVSCW_AUTOSIZE_USEHEADER ) ;_GUICtrlListView_RegisterSortCallBack($ListViewEvents, True, True) Global $ListEventsVol = GUICtrlCreateList("", 819, $hTabs, 202, 618) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") ;GUICtrlSetOnEvent(-1, "ListEventsVolClick") Global $TabSheetVolunteers = GUICtrlCreateTabItem($L_VOLUNTEERS) Global $ListViewVolunteers = GUICtrlCreateListView( _ "Name |Type |Home |Work |Cell |Address |City |Prov|Postal|Notes ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_SORTASCENDING)) GUICtrlSetFont($ListViewVolunteers, 10, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) ;$iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, $ListOfVolunteers, 0, 0, True, True) $iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Volunteers) VolunteerFullList() ;GUICtrlSetOnEvent(-1, "ListViewVolunteersClick") _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 0, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 1, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 2, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 3, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 4, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 6, $LVSCW_AUTOSIZE_USEHEADER ) _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 9, $LVSCW_AUTOSIZE_USEHEADER) ;_GUICtrlListView_RegisterSortCallBack($ListViewVolunteers, False, True) GUICtrlCreateTabItem("") ;end of tabs sleep(500) _GUICtrlTab_SetCurFocus($TabVol, $T_Event) ; _GUICtrlTab_SetCurFocus($ListViewEvents, $T_Event) Global $StatusBar = _GUICtrlStatusBar_Create($MainForm) _GUICtrlStatusBar_SetSimple($StatusBar) _GUICtrlStatusBar_SetText($StatusBar, "Simple status bar window text goes here.") _GUICtrlStatusBar_SetMinHeight($StatusBar, $hStatus) GUISetFont(10, 400, 0, "MS Sans Serif", $MainForm) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRIMARYdown') GUISetOnEvent($GUI_EVENT_RESTORE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESIZED, "") GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") #EndRegion ### END Koda GUI section ### GUISwitch($MainForm) GUISetState(@SW_SHOW) ; Set the Events ListView as active _GUIListViewEx_SetActive($iLV_Events) ;GUISetState(@SW_SHOW, $MainForm) While 1 sleep(100) WEnd GUISetState(@SW_HIDE) GUIDelete() ;_GUICtrlListView_UnRegisterSortCallBack($ListViewEvents) ;_GUICtrlListView_UnRegisterSortCallBack($ListViewVolunteers) _GUIListViewEx_Close($iLV_Events) _GUIListViewEx_Close($iLV_Volunteers) GUIRegisterMsg($WM_NOTIFY, "") Exit Func MainFormClose() Exit EndFunc ;==>MainFormClose Func EventFullList() ;~ GUICtrlCreateListViewItem("February 12, 2013|All Day||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 13, 2013|AM||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 13, 2013|PM||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 15, 2013|From|11:00|18:00", $ListViewEvents) _GUIListViewEx_Insert("February 13, 2013|AM|Sheila Blue,Dan Black") _GUIListViewEx_Insert("February 13, 2013|Afternoon|Dan Black,Paul Green") _GUIListViewEx_Insert("February 12, 2013|All Day|Mary Pigment,Dan Black,Sheila Blue,Paul Green") _GUIListViewEx_Insert("February 15, 2013|11:00-18:00|Sheila Blue,Dan Black,Paul Green") _GUIListViewEx_Insert("February 14, 2013|Evening|Mary Pigment,Dan Black,Paul Green") EndFunc ;==>EventFullList Func VolunteerFullList() ;~ GUICtrlCreateListViewItem("Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Paul Green|Friend/Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Montreal|QC|H2N5L1|", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator", $ListViewVolunteers) _GUIListViewEx_Insert("Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|253 Temple Drive|Montreal|QC|H2N3M4|Coordinator") _GUIListViewEx_Insert("Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal") _GUIListViewEx_Insert("Paul Green|Friend/Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Montreal|QC|H2N5L1|") _GUIListViewEx_Insert("Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|123 Templeton|Montreal|QC|H2N3M4|Old Coordinator") EndFunc ;==>VolunteerFullList Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView1 = GUICtrlGetHandle($ListViewEvents) $hWndListView2 = GUICtrlGetHandle($ListViewVolunteers) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView1 Switch $iCode ; Case $LVN_COLUMNCLICK ; A column was clicked ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; ; Kick off the sort callback ; _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem")) ; No return value ; Case $LVN_ITEMCHANGING ; An item is changing ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Return True ; prevent the change ;Return False ; allow the change Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You clicked on: " & $text) ; _GUICtrlListView_SetItemSelected($ListViewEvents, DllStructGetData($tInfo, "Index")) Return $GUI_RUNDEFMSG ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) Return $GUI_RUNDEFMSG ; DO EDIT HERE ; No return value Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You hit ENTER on: " & $text) EndSwitch Case $hWndListView2 Switch $iCode ; Case $LVN_COLUMNCLICK ; A column was clicked ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Kick off the sort callback ; _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem")) ; No return value ; Case $LVN_ITEMCHANGING ; An item is changing ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Return True ; prevent the change ;Return False ; allow the change Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You clicked on: " & $text) ; _GUICtrlListView_SetItemSelected($ListViewVolunteers, DllStructGetData($tInfo, "Index")) ;Return $GUI_RUNDEFMSG ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) ;Return $GUI_RUNDEFMSG ; No return value ; DO EDIT HERE Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You hit ENTER on: " & $text) ; No return value ; DO EDIT HERE EndSwitch EndSwitch ; And here we call the UDF WM_NOTIFY handler _GUIListViewEx_WM_NOTIFY_Handler($hWnd, $iMsg, $iwParam, $ilParam) Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Edited February 23, 2013 by Garp99HasSpoken Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 Garp99HasSpoken,I am looking into the problem with the second ListView - interesting result. As to the sorting - you had not registered the GUIListViewEx_WM_NOTIFY_Handler function so the UDF did not have the correct code to sort. Either do it via the UDF function like this:_GUIListViewEx_DragRegister(True, False, False)or add the function to your handler like this:Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) _GUIListViewEx_WM_NOTIFY_Handler($hWnd, $iMsg, $wParam, $lParam) EndFuncIt is always a good idea to read the UDF headers when the author has taken the trouble to write them: _GUIListViewEx_DragRegister ; Description ...: Registers Windows messages needed for the UDF [...] ; Remarks .......: If other handlers already registered, then call the relevant handler function from within that handler ; If no dragging is required, only the WM_NOTIFY handler needs to be registered [...]M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 (edited) Figured out the problem is if you don't add extended options like in this line Global $ListViewVolunteers = GUICtrlCreateListView( _ "Name |Type |Home |Work |Cell |Address |City |Prov|Postal|Notes ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_SORTASCENDING)) You'll notice that I made a mistake in the first tab by not using BitOr and so the 2nd part is taken as extended item and the list works. Change the line to 2, $hTabs, $ProgWidth-4, $hLists, $LVS_SINGLESEL, $LVS_SORTASCENDING) and it works As for previous post, I did make the correction in the last code posted. Edited February 23, 2013 by Garp99HasSpoken Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 Garp99HasSpoken, I resolved the problem. Again through trying to offer too many options I ended up trying to insert an array into an empty native ListView with multiple columns - at least I knew my way around the UDF this time. What I do not understand is why the third and fourth inserts worked at all - at least they all do now for me. Does it for you? Now testing to see if there are any knock-on effects. M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 Yes, works now. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 Garp99HasSpoken, Good. The fix did indeed introduce a further small problem but I have now resolved that. I will put out a new release shortly - you will need to update again when I do. And do not think I am annoyed by you finding these problems - on the contrary I am most grateful. No point in having a UDF if there are problems with it. M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 Not so quick New problem -- trying to implement hidden column, I added the keys and adjusted the columns, now you'll see that Events tab has duplicates. If you click on the item, you'll see in status bar the item is indeed a duplicate key selected. expandcollapse popup;Autoit Options ; #NoTrayIcon ;No Tray Icon Opt("GUIOnEventMode", 1) Opt("WinTextMatchMode", 1) ;1=complete, 2=quick Opt("WinTitleMatchMode", 3) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase Opt("GUICloseOnESC", 0) ;1=ESC closes, 0=ESC won't close Opt("GUIResizeMode", 802) ; Opt("GUIResizeMode", 1) #Include <String.au3> #include <Date.au3> #Include <WinAPI.au3> #include <File.au3> #include <GuiTab.au3> ;#include <GDIPlus.au3> #include <GUIListBox.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> #include <GuiStatusBar.au3> #include <GuiToolbar.au3> ; Constants includes #include <ListViewConstants.au3> #include <TabConstants.au3> #include <ToolbarConstants.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <DateTimeConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include "GUIListViewEx.au3" ; Tab groups Global Const $L_VOLUNTEERS = " Volunteers " Global Const $L_VOLUNTEER = "Volunteer" Global Const $L_EVENTS = " Events " Global Const $L_EVENT = "Event" ; Tab items Global Const $T_Event = 0 Global Const $T_Volunteer = 1 ;Versions Info Global $ProgName = "Volunteer Coordinator" Global $VersionBuild = "20130213" ;YEAR|MON|DAY Global $ProgVersion = "0.1" GLOBAL $AboutVersion = "2013.02.13 (" & $ProgVersion & ")" Global $ProgWidth =1024, $ProgHeight = 720 Local $sWidth = 400, $sHeight = 350 Local $hToolbar = 40, $hStatus = 40, $hTabs = $hToolbar+30, $hLists = ($ProgHeight - $hTabs - $hStatus - $hToolbar) #Region ### START Koda GUI section ### Form=R:\AutoIt Examples\koda_2008-09-03\Forms\VolunteerCoordinator.kxf Global $MainForm = GUICreate($ProgName, $ProgWidth, $ProgHeight, (@DesktopWidth - $ProgWidth) / 2, (@DesktopHeight - $ProgHeight) / 2, $WS_SIZEBOX + $WS_SYSMENU ) GUISetState(@SW_HIDE) GUISetBkColor(0xA6CAF0) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") GUISetOnEvent($GUI_EVENT_MINIMIZE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESTORE, "") Global $TabVol = GUICtrlCreateTab(1, $hTabs-$hToolbar, $ProgWidth-2, $hToolbar, $TCS_TABS) GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) Global $TabSheetEvents = GUICtrlCreateTabItem($L_EVENTS) Global $ListViewEvents = GUICtrlCreateListView( _ "|Date |Type |Volunteers ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_SORTDESCENDING)) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) $iLV_Events = _GUIListViewEx_Init($ListViewEvents, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Events) EventFullList() ;GUICtrlSetOnEvent(-1, "ListViewEventsClick") _GUICtrlListView_SetColumnWidth($ListViewEvents, 0, 0) ; hidden For $i=1 To 3 _GUICtrlListView_SetColumnWidth($ListViewEvents, $i, $LVSCW_AUTOSIZE_USEHEADER) Next ;_GUICtrlListView_RegisterSortCallBack($ListViewEvents, True, True) Global $TabSheetVolunteers = GUICtrlCreateTabItem($L_VOLUNTEERS) Global $ListViewVolunteers = GUICtrlCreateListView( _ "|Name |Type |Home |Work |Cell |Address |City |Prov|Postal|Notes ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL, $LVS_SORTASCENDING)) GUICtrlSetFont($ListViewVolunteers, 10, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) ;$iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, $ListOfVolunteers, 0, 0, True, True) $iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Volunteers) VolunteerFullList() ;GUICtrlSetOnEvent(-1, "ListViewVolunteersClick") _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 0, 0) ; hidden For $i=1 To 10 _GUICtrlListView_SetColumnWidth($ListViewVolunteers, $i, $LVSCW_AUTOSIZE_USEHEADER) Next ;_GUICtrlListView_RegisterSortCallBack($ListViewVolunteers, False, True) GUICtrlCreateTabItem("") ;end of tabs sleep(500) _GUICtrlTab_SetCurFocus($TabVol, $T_Event) ; _GUICtrlTab_SetCurFocus($ListViewEvents, $T_Event) Global $StatusBar = _GUICtrlStatusBar_Create($MainForm) _GUICtrlStatusBar_SetSimple($StatusBar) _GUICtrlStatusBar_SetText($StatusBar, "Simple status bar window text goes here.") _GUICtrlStatusBar_SetMinHeight($StatusBar, $hStatus) GUISetFont(10, 400, 0, "MS Sans Serif", $MainForm) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") ;GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, '_PRIMARYdown') GUISetOnEvent($GUI_EVENT_RESTORE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESIZED, "") _GUIListViewEx_DragRegister(True, False, False) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") #EndRegion ### END Koda GUI section ### GUISwitch($MainForm) GUISetState(@SW_SHOW) ; Set the Events ListView as active _GUIListViewEx_SetActive($iLV_Events) ;GUISetState(@SW_SHOW, $MainForm) While 1 sleep(100) WEnd GUISetState(@SW_HIDE) GUIDelete() ;_GUICtrlListView_UnRegisterSortCallBack($ListViewEvents) ;_GUICtrlListView_UnRegisterSortCallBack($ListViewVolunteers) _GUIListViewEx_Close($iLV_Events) _GUIListViewEx_Close($iLV_Volunteers) GUIRegisterMsg($WM_NOTIFY, "") Exit Func MainFormClose() Exit EndFunc ;==>MainFormClose Func EventFullList() ;~ GUICtrlCreateListViewItem("February 12, 2013|All Day||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 13, 2013|AM||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 13, 2013|PM||", $ListViewEvents) ;~ GUICtrlCreateListViewItem("February 15, 2013|From|11:00|18:00", $ListViewEvents) _GUIListViewEx_Insert("1|September 23, 2012|AM|Sheila Blue,Dan Black") _GUIListViewEx_Insert("2|December 3, 2012|Afternoon|Dan Black,Paul Green") _GUIListViewEx_Insert("3|January 31, 2013|All Day|Mary Pigment,Dan Black,Sheila Blue,Paul Green") _GUIListViewEx_Insert("5|February 18, 2013|11:00-18:00|Sheila Blue,Dan Black,Paul Green") _GUIListViewEx_Insert("7|February 14, 2013|Evening|Mary Pigment,Dan Black,Paul Green") EndFunc ;==>EventFullList Func VolunteerFullList() ;~ GUICtrlCreateListViewItem("Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Paul Green|Friend/Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Montreal|QC|H2N5L1|", $ListViewVolunteers) ;~ GUICtrlCreateListViewItem("Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|239 Temple Drive|Montreal|QC|H2N3M4|Coordinator", $ListViewVolunteers) _GUIListViewEx_Insert("1|Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|253 Temple Drive|Montreal|QC|H2N3M4|Coordinator") _GUIListViewEx_Insert("2|Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal") _GUIListViewEx_Insert("4|Paul Green|Friend/Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Montreal|QC|H2N5L1|") _GUIListViewEx_Insert("5|Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|123 Templeton|Montreal|QC|H2N3M4|Old Coordinator") EndFunc ;==>VolunteerFullList Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView1 = GUICtrlGetHandle($ListViewEvents) $hWndListView2 = GUICtrlGetHandle($ListViewVolunteers) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView1 Switch $iCode ; Case $LVN_COLUMNCLICK ; A column was clicked ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; ; Kick off the sort callback ; _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem")) ; No return value ; Case $LVN_ITEMCHANGING ; An item is changing ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Return True ; prevent the change ;Return False ; allow the change Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You clicked on: " & $text) ; _GUICtrlListView_SetItemSelected($ListViewEvents, DllStructGetData($tInfo, "Index")) Return $GUI_RUNDEFMSG ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) Return $GUI_RUNDEFMSG ; DO EDIT HERE ; No return value Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You hit ENTER on: " & $text) EndSwitch Case $hWndListView2 Switch $iCode ; Case $LVN_COLUMNCLICK ; A column was clicked ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Kick off the sort callback ; _GUICtrlListView_SortItems($hWndFrom, DllStructGetData($tInfo, "SubItem")) ; No return value ; Case $LVN_ITEMCHANGING ; An item is changing ; $tInfo = DllStructCreate($tagNMLISTVIEW, $ilParam) ; Return True ; prevent the change ;Return False ; allow the change Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You clicked on: " & $text) ; _GUICtrlListView_SetItemSelected($ListViewVolunteers, DllStructGetData($tInfo, "Index")) ;Return $GUI_RUNDEFMSG ; No return value Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) ;Return $GUI_RUNDEFMSG ; No return value ; DO EDIT HERE Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You hit ENTER on: " & $text) ; No return value ; DO EDIT HERE EndSwitch EndSwitch ; And here we call the UDF WM_NOTIFY handler _GUIListViewEx_WM_NOTIFY_Handler($hWnd, $iMsg, $iwParam, $ilParam) Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 Garp99HasSpoken,Nothing to do with me - that is because you added the $LVS_SORTDECENDING style to the ListView. So it sorts as you are adding the data and therefore get very confused. Remove that style and you get the full list again. If you really want to, you can sort the data very easily once it is inserted by calling the _GUICtrlListView_SimpleSort function. Registering the WM_NOTIFY message via the UDF as I explained a few posts above will then let the UDF look after the sorting for you. M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 _GUICtrlListView_SimpleSort() requires 2nd arg to be an array, which I suppose after I populate the listview, I could use_GUIListViewEx_Return_Array() but even the Help example is only performed when the user clicks the column -- I already have that.So do I call it like this after populating the list?_GUICtrlListView_SimpleSort($ListViewEvents, _GUIListViewEx_Return_Array($iLV_Events, 0), 2)If you look at the Help example, it's confusing because the array $B_DESCENDING appears to be an empty arrayBut I should be able to simply call_GUICtrlListView_SimpleSort($ListViewEvents, True, 2) ; column 2 because 1 is the hidden keyDoes that sound right?BTW, any idea why the Case $NM_RETURN doesn't work when Click and Double-Click work? Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 (edited) Garp99HasSpoken, You have misunderstood how _GUICtrlListView_SimpleSort works - and you ar enot alone in this. The array is a variable (array for multiple columns) which holds the sort state of the ListView: - Empty or Descending = Next sort acending - Ascending = Next sort decending. See this post for a commented example and posts lower down for how to sort on fill. BTW, any idea why the Case $NM_RETURN doesn't work when Click and Double-Click work?Looking at the code now. I was eating dinner earlier. M23 Edit: And then doing my Mod thing - looking now. Edited February 23, 2013 by Melba23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 23, 2013 Moderators Share Posted February 23, 2013 Garp99HasSpoken,My best guess - ListViews created with the native function do not react to that message. I cannot get $LVN_KEYDOWN to register either. I will look again tomorrow, but please do not hold your breath. I will also look to see how we might detect Enter being pressed in other ways. M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 23, 2013 Author Share Posted February 23, 2013 OK, those examples helped, mainly post #16 in that thread. How would you suggest sorting of a date field if the listview column uses "February 23, 2013"? Is there a way to match it to its' julian date number for chronological order? I'm guessing it needs a custom sort routine for that column. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 24, 2013 Moderators Share Posted February 24, 2013 Garp99HasSpoken,That was an interesting experiment. It seems neither native nor UDF created ListViews respond to the NM_RETURN message - and LVS_KEYDOWN fires on every key other then ENTER. I am afraid it will need someone with a lot more knowledge that I have about the inner workings of Windows messages to explain why - all I can do is suggest that you use an Accelerator key to detect ENTER being pressed when your ListView has focus: expandcollapse popup#include #include #include #include Global $cListView Example() Func Example() GUICreate("Test", 500, 500) $cListView = GUICtrlCreateListView("Col 1 |Col 2 |Col 3 ", 10, 10, 200, 150) $cItem1 = GUICtrlCreateListViewItem("item 01|Sub 12|Sub 13", $cListView) $cItem2 = GUICtrlCreateListViewItem("item 02|Sub 22|Sub 23", $cListView) $cItem3 = GUICtrlCreateListViewItem("item 03|Sub 32|Sub 33", $cListView) $cButton = GUICtrlCreateButton("Test", 10, 400, 80, 30) $cDummy_Enter = GUICtrlCreateDummy() GUISetState() GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY") ; Set GUIAccelerators for ENTER Local $aAccelKeys[1][2] = [["{ENTER}", $cDummy_Enter]] GUISetAccelerators($aAccelKeys) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $cDummy_Enter If _WinAPI_GetFocus() = GUICtrlGetHandle($cListView) Then MsgBox(0, "Hi", "Enter pressed with ListView focused") EndIf EndSwitch WEnd EndFunc ;==>Example Func _WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam) #forceref $hWnd, $iMsg, $wParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $tNMHDR = DllStructCreate($tagNMHDR, $lParam) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $iIDFrom Case $cListView Switch $iCode Case $NM_RETURN ; The control has the input focus and that the user has pressed the ENTER key ConsoleWrite("Enter" & @CRLF) Case $LVN_KEYDOWN ; A key has been pressed ConsoleWrite("Key Down" & @CRLF) Case $NM_CLICK ; Sent by a list-view control when the user clicks an item with the left mouse button ConsoleWrite("L Click" & @CRLF) Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button ConsoleWrite("L Double" & @CRLF) Case $NM_RCLICK ; Sent by a list-view control when the user clicks an item with the right mouse button ConsoleWrite("R Click" & @CRLF) Case $NM_RDBLCLK ; Sent by a list-view control when the user double-clicks an item with the right mouse button ConsoleWrite("R Double" & @CRLF) EndSwitch EndSwitch Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFYTry focusing the button and then pressing ENTER to confirm it needs ListView focus. Please ask if you have any questions about Accelerator keys - think HotKey but only active when your GUI is active. As to the date question - why not convert to a suitable format (Julian or YYYY/MM/DD) and add another hidden column which you can then sort easily? However, you will probably need to play around in the sort routines to get clicks on the visible colum to sort on the hidden one - but that I leave to you. Or just convert all the dates into a suitable format using the UDF I showed you in another of your many threads and sort them directly. M23  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
BrewManNH Posted February 24, 2013 Share Posted February 24, 2013 The NU_RETURN issue has been discussed quite a bit in regards to Listviews.This might be of interest. 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 GudeHow 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 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted February 24, 2013 Moderators Share Posted February 24, 2013 BrewManNH, I had forgotten that thread - at least I am consistent in my proposed solutions! M23 BrewManNH 1  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area  Link to comment Share on other sites More sharing options...
Garp99HasSpoken Posted February 24, 2013 Author Share Posted February 24, 2013 Melba, at least you're learning new things because of my project. I'll look into the date stuff more, or I may just simplify my life and use yyyy/mm/dd and only change it if the wife asks for a change. I was able to get my example working with two ListViews and only 1 dummy enter button with accel key. Here's the latest test code I now have working with ENTER and Double-Click on a ListView item will now call the Edit function. expandcollapse popup;Autoit Options ; #NoTrayIcon ;No Tray Icon Opt("GUIOnEventMode", 1) Opt("WinTextMatchMode", 1) ;1=complete, 2=quick Opt("WinTitleMatchMode", 3) ;1=start, 2=subStr, 3=exact, 4=advanced, -1 to -4=Nocase Opt("GUICloseOnESC", 0) ;1=ESC closes, 0=ESC won't close Opt("GUIResizeMode", 802) ; Opt("GUIResizeMode", 1) #Include <String.au3> #include <Date.au3> #Include <WinAPI.au3> #include <File.au3> #include <GuiTab.au3> ;#include <GDIPlus.au3> #include <GUIListBox.au3> #include <GuiListView.au3> #include <GuiScrollBars.au3> #include <GuiStatusBar.au3> #include <GuiToolbar.au3> ; Constants includes #include <ListViewConstants.au3> #include <TabConstants.au3> #include <ToolbarConstants.au3> #include <ButtonConstants.au3> #include <ComboConstants.au3> #include <EditConstants.au3> #include <DateTimeConstants.au3> #include <GUIConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #include "GUIListViewEx.au3" ; Tab groups Global Const $L_VOLUNTEERS = " Volunteers " Global Const $L_VOLUNTEER = "Volunteer" Global Const $L_EVENTS = " Events " Global Const $L_EVENT = "Event" ; Tab items Global Const $T_Event = 0 Global Const $T_Volunteer = 1 ; Menus Global Const $M_EVENT = "Even&t" Global Const $M_VOLUNTEER = "&Volunteer" Global Const $M_OPTIONS = "&Go To..." Global Const $M_ADD = "Add " Global Const $M_EDIT = "Edit " Global Const $M_DELETE = "Delete " ; Prompts Global Const $L_AREYOUSURE = "Are You Sure?" Global Const $L_CANCELEXIT = "Cancel all changes and exit?" ;Versions Info Global $ProgName = "Volunteer Coordinator" Global $VersionBuild = "20130213" ;YEAR|MON|DAY Global $ProgVersion = "0.1" GLOBAL $AboutVersion = "2013.02.13 (" & $ProgVersion & ")" Global $ProgWidth =1024, $ProgHeight = 720 Local $sWidth = 400, $sHeight = 350 Local $hToolbar = 40, $hStatus = 40, $hTabs = $hToolbar+30, $hLists = ($ProgHeight - $hTabs - $hStatus - $hToolbar) #Region ### START Koda GUI section ### Form=R:\AutoIt Examples\koda_2008-09-03\Forms\VolunteerCoordinator.kxf Global $MainForm = GUICreate($ProgName, $ProgWidth, $ProgHeight, (@DesktopWidth - $ProgWidth) / 2, (@DesktopHeight - $ProgHeight) / 2, $WS_SIZEBOX + $WS_SYSMENU ) GUISetState(@SW_HIDE) GUISetBkColor(0xA6CAF0) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") GUISetOnEvent($GUI_EVENT_MINIMIZE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESTORE, "") Global $TabVol = GUICtrlCreateTab(1, $hTabs-$hToolbar, $ProgWidth-2, $hToolbar, $TCS_TABS) GUICtrlSetOnEvent($TabVol, "TabVolClick") ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Tried adding this GUICtrlSetFont(-1, 12, 400, 0, "Arial") GUICtrlSetResizing(-1, $GUI_DOCKAUTO) Global $TabSheetEvents = GUICtrlCreateTabItem($L_EVENTS) Global $ListViewEvents = GUICtrlCreateListView( _ "|Date |Type |Volunteers ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL)) GUICtrlSetFont(-1, 12, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) $iLV_Events = _GUIListViewEx_Init($ListViewEvents, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Events) EventFullList() _GUICtrlListView_SetColumnWidth($ListViewEvents, 0, 0) ; hidden For $i=1 To 3 _GUICtrlListView_SetColumnWidth($ListViewEvents, $i, $LVSCW_AUTOSIZE_USEHEADER) Next GUICtrlSetOnEvent($ListViewEvents, "ListViewEventsClick") Global $TabSheetVolunteers = GUICtrlCreateTabItem($L_VOLUNTEERS) GUICtrlSetOnEvent($TabSheetVolunteers, "ListViewVolunteersClick") ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Tried adding this Global $ListViewVolunteers = GUICtrlCreateListView( _ "|Name |Type |Home |Work |Cell |Address |City |Prov|Postal|Notes ", _ 2, $hTabs, $ProgWidth-4, $hLists, BitOr($LVS_SHOWSELALWAYS, $LVS_SINGLESEL)) GUICtrlSetFont($ListViewVolunteers, 10, 400, 0, "MS Sans Serif") ; Initiate LVEx - no count parameter - default insert mark colour (black) $iLV_Volunteers = _GUIListViewEx_Init($ListViewVolunteers, "", 0, 0, True, True) _GUIListViewEx_SetActive($iLV_Volunteers) VolunteerFullList() _GUICtrlListView_SetColumnWidth($ListViewVolunteers, 0, 0) ; hidden For $i=1 To 10 _GUICtrlListView_SetColumnWidth($ListViewVolunteers, $i, $LVSCW_AUTOSIZE_USEHEADER) Next Local $fSort = False ; passed ByRef _GUICtrlListView_SimpleSort($ListViewVolunteers, $fSort, 1) GUICtrlSetOnEvent($ListViewVolunteers, "ListViewVolunteersClick") GUICtrlCreateTabItem("") ;end of tabs Global $DummyEnter = GUICtrlCreateDummy() GUICtrlSetOnEvent($DummyEnter, "ListViewEnterClick") ;==> EVENT menu Local $MenuEvent = GUICtrlCreateMenu($M_EVENT) Local $MenuEventAdd = GUICtrlCreateMenuItem($M_ADD & $L_EVENT & @tab & "F9", $MenuEvent) GUICtrlSetOnEvent(-1, "MenuEventAddClick") Local $MenuEventEdit = GUICtrlCreateMenuItem($M_EDIT & $L_EVENT & @tab & "F10", $MenuEvent) GUICtrlSetOnEvent(-1, "MenuEventEditClick") Local $MenuEventDelete = GUICtrlCreateMenuItem($M_DELETE & $L_EVENT & @tab & "", $MenuEvent) GUICtrlSetOnEvent(-1, "MenuEventDeleteClick") ;==> VOLUNTEER menu Local $MenuVolunteer = GUICtrlCreateMenu($M_VOLUNTEER) Local $MenuVolunteerAdd = GUICtrlCreateMenuItem($M_ADD & $L_VOLUNTEER & @tab & "F11", $MenuVolunteer) GUICtrlSetOnEvent(-1, "MenuVolunteerAddClick") Local $MenuVolunteerEdit = GUICtrlCreateMenuItem($M_EDIT & $L_VOLUNTEER & @tab & "F12", $MenuVolunteer) GUICtrlSetOnEvent(-1, "MenuVolunteerEditClick") Local $MenuVolunteerDelete = GUICtrlCreateMenuItem($M_DELETE & $L_VOLUNTEER & @tab & "", $MenuVolunteer) GUICtrlSetOnEvent(-1, "MenuVolunteerDeleteClick") ;==> OPTIONS menu Local $MenuOptions = GUICtrlCreateMenu($M_OPTIONS) Local $MenuEventDates = GUICtrlCreateMenuItem($L_EVENT & " Dates" & @tab & "F5", $MenuOptions) GUICtrlSetOnEvent(-1, "ListViewEventsClick") Local $MenuVolList = GUICtrlCreateMenuItem($L_VOLUNTEER & " List" & @tab & "F6", $MenuOptions) GUICtrlSetOnEvent(-1, "ListViewVolunteersClick") Local $MainForm_AccelTable[10][2] = [ _ ["^!t", $MenuEvent],["{F9}", $MenuEventAdd],["{F10}", $MenuEventEdit], _ ["^!v", $MenuVolunteer],["{F11}", $MenuVolunteerAdd],["{F12}", $MenuVolunteerEdit], _ ["^!g", $MenuOptions],["{F5}", $MenuEventDates],["{F6}", $MenuVolList],["{ENTER}", $DummyEnter] _ ] GUISetAccelerators($MainForm_AccelTable, $MainForm) Global $StatusBar = _GUICtrlStatusBar_Create($MainForm) _GUICtrlStatusBar_SetSimple($StatusBar) _GUICtrlStatusBar_SetText($StatusBar, "Simple status bar window text goes here.") _GUICtrlStatusBar_SetMinHeight($StatusBar, $hStatus) GUISetFont(10, 400, 0, "MS Sans Serif", $MainForm) GUISetOnEvent($GUI_EVENT_CLOSE, "MainFormClose") GUISetOnEvent($GUI_EVENT_RESTORE, "") GUISetOnEvent($GUI_EVENT_MAXIMIZE, "") GUISetOnEvent($GUI_EVENT_RESIZED, "") _GUIListViewEx_DragRegister(True, False, False) GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY") #EndRegion ### END Koda GUI section ### GUISwitch($MainForm) GUISetState(@SW_SHOW) ; Set the Events ListView as active ;_GUIListViewEx_SetActive($iLV_Events) ListViewEventsClick() ; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< should set Volunteer menu options to DISABLED While 1 sleep(100) WEnd GUISetState(@SW_HIDE) GUIDelete() _GUIListViewEx_Close($iLV_Events) _GUIListViewEx_Close($iLV_Volunteers) GUIRegisterMsg($WM_NOTIFY, "") Exit Func MainFormClose() Exit EndFunc ;==>MainFormClose Func EventFullList() _GUIListViewEx_Insert("1|September 23, 2012|AM|Sheila Blue,Dan Black") _GUIListViewEx_Insert("2|December 3, 2012|Afternoon|Dan Black,Paul Green") _GUIListViewEx_Insert("3|February 18, 2013|11:00-18:00|Sheila Blue,Dan Black,Paul Green") _GUIListViewEx_Insert("6|February 14, 2013|Evening|Mary Pigment,Dan Black,Paul Green") _GUIListViewEx_Insert("7|January 31, 2013|All Day|Mary Pigment,Dan Black,Sheila Blue,Paul Green") EndFunc ;==>EventFullList Func VolunteerFullList() _GUIListViewEx_Insert("1|Dan Black|Parent|(514)345-6789|(514)345-9876|(608)345-1234|253 Temple Drive|Montreal|QC|H2N3M4|Coordinator") _GUIListViewEx_Insert("2|Sheila Blue|Other|(514)345-7733|(514)655-4562|(608)345-1234|123 Templeton|Montreal|QC|H2N4Q3|Old Coordinator") _GUIListViewEx_Insert("6|Mary Pigment|Staff|(519)242-2020|(519)356-0176|(519)675-1201|21st Avenue|London|ON|J7S5M9|Principal") _GUIListViewEx_Insert("7|Paul Green|Friend / Family|(514)349-6699|(514)349-5555|(514)698-9857|423 Happle / Apt 12|Toronto|ON|L4P9J8|") EndFunc ;==>VolunteerFullList Func ListViewEventsClick() _GUICtrlTab_SetCurFocus($TabVol, $T_Event) _GUIListViewEx_SetActive($iLV_Events) GUICtrlSetState($MenuEventEdit, $GUI_ENABLE) GUICtrlSetState($MenuEventDelete, $GUI_ENABLE) GUICtrlSetState($MenuVolunteerEdit, $GUI_DISABLE) GUICtrlSetState($MenuVolunteerDelete, $GUI_DISABLE) EndFunc ;==>ListViewEventsClick Func ListViewVolunteersClick() _GUICtrlTab_SetCurFocus($TabVol, $T_Volunteer) _GUIListViewEx_SetActive($iLV_Volunteers) GUICtrlSetState($MenuEventEdit, $GUI_DISABLE) GUICtrlSetState($MenuEventDelete, $GUI_DISABLE) GUICtrlSetState($MenuVolunteerEdit, $GUI_ENABLE) GUICtrlSetState($MenuVolunteerDelete, $GUI_ENABLE) EndFunc ;==>ListViewVolunteersClick Func TabVolClick() Switch GUICtrlRead($TabVol) Case $T_Event ; MsgBox(0, "Hi", "Event Tab selected") ListViewEventsClick() Case $T_Volunteer ; MsgBox(0, "Hi", "Volunteer Tab selected") ListViewVolunteersClick() EndSwitch EndFunc ;==>TabVolClick Func ListViewEnterClick() Switch GUICtrlRead($TabVol) Case $T_Event If _WinAPI_GetFocus() = GUICtrlGetHandle($ListViewEvents) Then MsgBox(0, "Hi", "Enter pressed with Event ListView focused") MenuEventEditClick() EndIf Case $T_Volunteer If _WinAPI_GetFocus() = GUICtrlGetHandle($ListViewVolunteers) Then MsgBox(0, "Hi", "Enter pressed with Volunteer ListView focused") MenuVolunteerEditClick() EndIf EndSwitch EndFunc ;==>ListViewEnterClick Func MenuEventAddClick() ListViewEventsClick() ; CreateEvent(False, $MainForm) MsgBox(0, "Add", "Add new Event", 5) GUISetState(@SW_SHOW) EndFunc ;==>MenuEventAddClick Func MenuEventEditClick() ListViewEventsClick() $id = GUICtrlRead($ListViewEvents) If ($id = 0) Then MsgBox(36, "Error", "Nothing selected in the list for Editing", 5) Else ; InitEvent(GUICtrlRead($id)) ; CreateEvent(True, $MainForm) MsgBox(0, "Edit", "ID (" & $id & ")", 5) EndIf GUISetState(@SW_SHOW) EndFunc ;==>MenuEventEditClick Func MenuEventDeleteClick() ListViewEventsClick() $id = GUICtrlRead($ListViewEvents) If ($id = 0) Then MsgBox(36, "Error", "Nothing selected in the list for deletion.", 5) Else $str = StringSplit(GUICtrlRead($id), "|", 1) if (MsgBox(36, $L_AREYOUSURE, $M_DELETE & $L_EVENT & "'" & $str[2] & ", " & $str[3] & "'?") = 6) Then ; EventDeleteKey($str[1]) _GUIListViewEx_Delete() MsgBox(0, "DELETE'd", "Key (" & $str[1] & ")", 5) EndIf EndIf EndFunc ;==>MenuEventDeleteClick Func MenuVolunteerAddClick() ListViewVolunteersClick() ; CreateVolunteer(False, $MainForm) MsgBox(0, "Add", "Add new Volunteer", 5) GUISetState(@SW_SHOW) EndFunc ;==>MenuVolunteerAddClick Func MenuVolunteerEditClick() ListViewVolunteersClick() $id = GUICtrlRead($ListViewVolunteers) If ($id = 0) Then MsgBox(36, "Error", "Nothing selected in the list for Editing", 5) Else ; InitVolunteer(GUICtrlRead($id)) ; CreateVolunteer(True, $MainForm) MsgBox(0, "Edit", "ID (" & $id & ")", 5) EndIf GUISetState(@SW_SHOW) EndFunc ;==>MenuVolunteerEditClick Func MenuVolunteerDeleteClick() ListViewVolunteersClick() $id = GUICtrlRead($ListViewVolunteers) If ($id = 0) Then MsgBox(36, "Error", "Nothing selected in the list for deletion.", 5) Else $str = StringSplit(GUICtrlRead($id), "|", 1) if (MsgBox(36, $L_AREYOUSURE, $M_DELETE & $L_VOLUNTEER & "'" & $str[2] & "'?") = 6) Then ; VolunteerDeleteKey($str[1]) _GUIListViewEx_Delete() MsgBox(0, "DELETE'd", "Key (" & $str[1] & ")", 5) EndIf EndIf EndFunc ;==>MenuVolunteerDeleteClick Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam) #forceref $hWnd, $iMsg, $iwParam Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo $hWndListView1 = GUICtrlGetHandle($ListViewEvents) $hWndListView2 = GUICtrlGetHandle($ListViewVolunteers) $tNMHDR = DllStructCreate($tagNMHDR, $ilParam) $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom")) $iIDFrom = DllStructGetData($tNMHDR, "IDFrom") $iCode = DllStructGetData($tNMHDR, "Code") Switch $hWndFrom Case $hWndListView1 Switch $iCode Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewEvents, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) MenuEventEditClick() ; No return value EndSwitch Case $hWndListView2 Switch $iCode Case $NM_DBLCLK ; Sent by a list-view control when the user double-clicks an item with the left mouse button $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam) $text = _GUICtrlListView_GetItemText($ListViewVolunteers, DllStructGetData($tInfo, "Index")) _GUICtrlStatusBar_SetText($StatusBar, "You double-clicked on: " & $text) MenuVolunteerEditClick() ; No return value EndSwitch EndSwitch ; And here we call the UDF WM_NOTIFY handler _GUIListViewEx_WM_NOTIFY_Handler($hWnd, $iMsg, $iwParam, $ilParam) Return $GUI_RUNDEFMSG EndFunc ;==>WM_NOTIFY 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