Moderators Melba23 Posted January 24, 2016 Moderators Share Posted January 24, 2016 (edited) error471, Here is my take on the "save/load" functions: <snip> Try altering the data/colour of the LH ListView and then loading the RH one with a save/load cycle - works nicely for me, how about you? As always, please ask if you have any questions. M23 Edited January 26, 2016 by Melba23 Beta code removed 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...
error471 Posted January 25, 2016 Author Share Posted January 25, 2016 (edited) @Melba23 You're a genius. Works like a charm. Edited January 25, 2016 by error471 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 25, 2016 Moderators Share Posted January 25, 2016 error471, Good to hear. I think I might add these "load/save" functions to the UDF proper, which will also allow me to streamline them a little. Any other requests - or are you done for a while? 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...
error471 Posted January 25, 2016 Author Share Posted January 25, 2016 (edited) Well, indeed, there is a matter. The script is fine, when the program starts with manually set columns. But when I start an empty GUIListView (or at least with one column), the loading function does not work properly, which means It only loads the first column. I kindly think that this is something that needs to be fixed. A potential luxury-request is, saving/loading of the column headers into the lvs, plus (overkill) editable column headers as well as addable columns (like add row function). Dude I salute you for your efforts. Edited January 25, 2016 by error471 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 25, 2016 Moderators Share Posted January 25, 2016 (edited) error471, Quote when I start an empty GUIListView (or at least with one column), the loading function does not work properly Thanks, I will look into that. [Works for me as long as the empty ListView has the correct number of columns] [Now it works for all column values] Quote saving/loading of the column headers That should not be too difficult. [Done] Quote (overkill) editable column headers Go and read the function header for _GUIListViewEx_Init - that functionality is already incorporated in the UDF. Quote addable columns That might be a bit more difficult as there is no native function on which to base the functionality. I will take a look, but only after I get the rest of it working (and you are not the only one looking for changes to this particular UDF). [I was wrong: there is a UDF function, but I am struggling to see how to implement it sensibly] M23 Edit 3: Do you see the "add column" functionality to work only when loading saved data (already done), or more generally? Edited January 25, 2016 by Melba23 Update 2 - see [...] sections error471 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...
error471 Posted January 26, 2016 Author Share Posted January 26, 2016 (edited) @Melba23: Thank you. I will check the improvements as soon as I am home tonight. Concerning the "add column", I was thinking of a general "add column" button, which adds a column at the right-end, despite the load column function while loading. Some maybe nice-to-have ideas: For my special needs, there is no need to add a column in between two existent columns, but it could be nice anyway. Thinking about this, selectable "boxes" similar to Excel, instead of an entire selected row, could maybe improve the GUIListView. A custom assignable, transparent colour of the selected row, could improve the standard blue highlighting, which simply overlays everything. Edited January 26, 2016 by error471 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 26, 2016 Moderators Share Posted January 26, 2016 error471, I have not posted the new code yet, so no rush. As to the requests, all of them would further complicate the code, so I am not overly keen to add them - and certainly not until I get the current changes properly integrated. 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...
error471 Posted January 26, 2016 Author Share Posted January 26, 2016 @Melba23: The requests are not necessary. Your script already does its job very well. The only request, that is necessary for my bakery project is an "add empty column" button. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 26, 2016 Moderators Share Posted January 26, 2016 (edited) error471, Understood - I will look at the "add column" functionality when I next have time - probably tomorrow. In the meantime, here are the current files for you to test: <snip> I have integrated the "save/load" functions into the UDF, so there are a few syntax changes - the most important is that you need to initialise the empty ListView so that you have an identifying index to pass to the UDF. Most of the other changes I think are fairly obvious - normally simpler than before. I am now trying hard to break this version - be my guest to come up with the edge cases I have not yet managed to imagine! M23 Edited January 27, 2016 by Melba23 Beta code removed 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...
error471 Posted January 26, 2016 Author Share Posted January 26, 2016 1 hour ago, Melba23 said: I am now trying hard to break this version - be my guest to come up with the edge cases I have not yet managed to imagine! I'll do my best. Link to comment Share on other sites More sharing options...
error471 Posted January 26, 2016 Author Share Posted January 26, 2016 (edited) @Melba23: I think I might have found a bug: Whenever I load a defined lvs-file directly at the startup of my script, the colours are not shown immediately in the GUIListView. I have to click every single line to make it appear. Opening a file with the load-button or with an opening dialogue is no problem. The problem appears only once at the startup. Another minor problem appears whenever I doubleclick into the GUIListView. It seems to open the editing function as it should, but then suddenly it cancels. I have to repeat this sometimes 2-3 times before being able to finally edit. Edited January 26, 2016 by error471 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 26, 2016 Moderators Share Posted January 26, 2016 error471, Loading from start works for me - can you post a reproducer? Looking at the edit problem now. 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...
error471 Posted January 26, 2016 Author Share Posted January 26, 2016 (edited) 1 hour ago, Melba23 said: Loading from start works for me - can you post a reproducer? I found my mistake. Loading the LVS-file was before GUISetState(). Edit: The other problem does not appear anymore, too. Edited January 26, 2016 by error471 Link to comment Share on other sites More sharing options...
error471 Posted January 26, 2016 Author Share Posted January 26, 2016 (edited) Melba23, is it possible to get the content, text colour and background color of a specific cell with _GUICtrlListView_GetTextColor or _GUICtrlListView_GetTextBkColor? What I am intending to do is a scan of for example every red content with yellow background in a specific row, and output its content into a variable or file. error471 Edited January 27, 2016 by error471 Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 27, 2016 Moderators Share Posted January 27, 2016 error471, Quote Loading the LVS-file was before GUISetState(). You can load a file before GUISetState, but you must have already registered the WM_NOTIFY handler (usually via _GUIListViewEx_MsgRegister) before GUISetState so that the handler code can set the required colours when the GUI is displayed. I see the failure to edit in double click occasionally - I believe it is due to the known propensity of ListViews to "eat" the odd click, so if your double-click is a little slow it is interpreted as 2 singles and only one of them actioned. Quote is it possible to get the content, text colour and background color of a specific cell You already have the ability to extract the colours in an array - a wrapper function to parse that array will do what you require and I am certainly not adding such a functionality to the UDF. But I might look at it after I have sorted the "column add" code. And then, barring bugs, you will have exhausted your "feature request" account for some time to come! 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...
error471 Posted January 27, 2016 Author Share Posted January 27, 2016 1 hour ago, Melba23 said: And then, barring bugs, you will have exhausted your "feature request" account for some time to come! These two requests are certainly the last ones. This is a promise. I want to thank you for your efforts. Please check your private message inbox. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 27, 2016 Moderators Share Posted January 27, 2016 (edited) error471, Thanks for your kind words - and here are the files to test the "column insert/delete" code (there are also a couple of other new functions in there as well but that need not concern you): <snip> Over to you - I am off to work on that cell colour wrapper..... M23 Edited June 2, 2016 by Melba23 Removed Beta code 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 January 27, 2016 Moderators Share Posted January 27, 2016 error471, And here it is: expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <File.au3> #include <String.au3> #include <Array.au3> #include "GUIListViewEx_Colour_Col.au3" $hGUI = GUICreate("Test", 1000, 500) $cLV_1 = GUICtrlCreateListView("Fixed Title|Column 1|Column 2|Column 3|Column 4|Column 5", 10, 10, 480, 300, $LVS_SINGLESEL) _GUICtrlListView_SetExtendedListViewStyle($cLV_1, BitOr($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) For $i = 0 To 5 _GUICtrlListView_SetColumnWidth($cLV_1, $i, 70) Next ; Create array and fill listview Global $aLVArray_1[6][6] For $i = 1 To 5 $sData = "Item " & $i - 1 & "-0" $aLVArray_1[$i][0] = $sData For $j = 1 To 5 $sData &= "|SubItem " & $i - 1 & "-" & $j $aLVArray_1[$i][$j] = "SubItem " & $i - 1 & "-" & $j Next GUICtrlCreateListViewItem($sData, $cLV_1) Next ; Initiate ListView - edit on click in columns 1-5 - user colours $iLVIndex_1 = _GUIListViewEx_Init($cLV_1, $aLVArray_1, 1, 0, True, 2 + 16 + 32, "1-5") ; Create colour array - must be 0-based - RGB hex "text;back" - "" or ";" if default Global $aColArray_1[5][6] = [["", "", "0xFFFF00;0xFF0000"], _ [], _ ["", "0xFFFF00;0xFF0000", "", "0xFFFF00;0x08FF00", "", ";0xFF0000"], _ [], _ ["", "", "", "0xFFFF00;0xFF0000", "", "0xFFFF00;0xFF0000"]] ; Load colour array _GUIListViewEx_LoadColour($iLVIndex_1, $aColArray_1) ; Create buttons $cGo = GUICtrlCreateButton("Go!", 10, 450, 80, 30) _GUIListViewEx_MsgRegister() GUISetState() While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE Exit Case $cGo ; Get colour array $aColArray = _GUIListViewEx_ReturnArray($iLVIndex_1, 2) ; Loop through array For $i = 0 To UBound($aColArray) - 1 $sItems = "Row " & $i & " = " For $j = 1 To UBound($aColArray, 2) - 1 ; Is this cell yellow text on red field? If $aColArray[$i][$j] = "0xFFFF00;0xFF0000" Then $sItems &= $j & ";" EndIf Next ConsoleWrite(StringTrimRight($sItems, 1) & @CRLF) Next EndSwitch ; Allow edit on double click $aRet = _GUIListViewEx_EditOnClick() WEnd Will that do what you require? 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...
error471 Posted January 27, 2016 Author Share Posted January 27, 2016 @Melba23: Column insert/delete works. Awesome! I changed the last code a bit. I meant it like this: expandcollapse popup#include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <AutoItConstants.au3> #include <File.au3> #include <String.au3> #include <Array.au3> #include "GUIListViewEx_Colour_Col.au3" $hGUI = GUICreate("Test", 1000, 500) $cLV_1 = GUICtrlCreateListView("Fixed Title|Column 1|Column 2|Column 3|Column 4|Column 5", 10, 10, 480, 300, $LVS_SINGLESEL) _GUICtrlListView_SetExtendedListViewStyle($cLV_1, BitOr($LVS_EX_FULLROWSELECT, $LVS_EX_CHECKBOXES)) For $i = 0 To 5 _GUICtrlListView_SetColumnWidth($cLV_1, $i, 70) Next ; Create array and fill listview Global $aLVArray_1[6][6] For $i = 1 To 5 $sData = "Item " & $i - 1 & "-0" $aLVArray_1[$i][0] = $sData For $j = 1 To 5 $sData &= "|SubItem " & $i - 1 & "-" & $j $aLVArray_1[$i][$j] = "SubItem " & $i - 1 & "-" & $j Next GUICtrlCreateListViewItem($sData, $cLV_1) Next ; Initiate ListView - edit on click in columns 1-5 - user colours $iLVIndex_1 = _GUIListViewEx_Init($cLV_1, $aLVArray_1, 1, 0, True, 2 + 16 + 32, "1-5") ; Create colour array - must be 0-based - RGB hex "text;back" - "" or ";" if default Global $aColArray_1[5][6] = [["", "", "0xFFFF00;0xFF0000"], _ [], _ ["", "0xFFFF00;0xFF0000", "", "0xFFFF00;0x08FF00", "", ";0xFF0000"], _ [], _ ["", "", "", "0xFFFF00;0xFF0000", "", "0xFFFF00;0xFF0000"]] ; Load colour array _GUIListViewEx_LoadColour($iLVIndex_1, $aColArray_1) ; Create buttons $cGo = GUICtrlCreateButton("Go!", 10, 450, 80, 30) _GUIListViewEx_MsgRegister() GUISetState() While 1 $iMsg = GUIGetMsg() Switch $iMsg Case $GUI_EVENT_CLOSE Exit Case $cGo ; Get colour array $aColArray = _GUIListViewEx_ReturnArray($iLVIndex_1, 2) ; Loop through array For $i = 0 To UBound($aColArray) - 1 $sItems = "Row " & $i & " = " For $j = 1 To UBound($aColArray, 2) - 1 ; Is this cell yellow text on red field? If $aColArray[$i][$j] = "0xFFFF00;0xFF0000" Then $sItems &= $aLVArray_1[$i+1][$j] & "+" EndIf Next ConsoleWrite(StringTrimRight($sItems, 1) & @CRLF) Next EndSwitch ; Allow edit on double click $aRet = _GUIListViewEx_EditOnClick() WEnd It works now as I wanted. Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted January 27, 2016 Moderators Share Posted January 27, 2016 error471, Great - nice to see a satisfied customer! And it was a fun few days getting it all to work, so thanks to you too. I will polish the code a bit more over the next few days (i.e. making the default for the *ColSpec functions the rightmost column) - so keep an eye on the main UDF thread for a new release. M23 error471 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...
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