Kovacic Posted December 17, 2013 Posted December 17, 2013 Greetings, I was wondering if anyone had any thoughts on this issue... I am working on a GUI that will perform various AD changes.. I stripped down the program big time to test this edit box issue I am having. PROBLEM: When importing a large list from any data source, as the data is filling in an edit box, the edit box scrolls the vertical bar for each item. As the list grows larger, the import slows down ALOT because of the scrolling. Here is a working example of the butchered GUI: ( THIS IS ALSO ATTACHED ) expandcollapse popup#include <APIConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> #include <ListViewConstants.au3> #include <file.au3> #include <StaticConstants.au3> #include <GUIListViewEx.au3> global $a = 1, $b = 1, $i = 1 HotKeySet("{ESC}", "Terminate") Func Terminate() ProcessClose ( "autoit3.exe" ) Exit 0 EndFunc ;==>Terminate #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 827, 585, -1, -1) $sourcebox = _GUICtrlListView_Create($Form1, "User name", 8, 32, 321, 545, BitOR($LVS_DEFAULT, $WS_BORDER, $LVS_EDITLABELS)) _GUICtrlListView_SetColumnWidth($sourcebox, 0, 200) $importlistdata = _GUIListViewEx_Init($sourcebox, "", 0, 0x00FF00) ;GUICtrlSetLimit(-1, 9900000) $sucbo = GUICtrlCreateEdit("", 560, 272, 249, 201) $failbox = GUICtrlCreateEdit("", 560, 32, 249, 201) ;$Combo1 = GUICtrlCreateCombo("Combo1", 352, 80, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) ;$L_option1 = GUICtrlCreateLabel("Option 1", 352, 56, 44, 17) ;$Combo2 = GUICtrlCreateCombo("Combo1", 352, 136, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) ;$L_option2 = GUICtrlCreateLabel("Option 1", 352, 112, 44, 17) ;$Combo3 = GUICtrlCreateCombo("Combo1", 352, 192, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) ;$L_option3 = GUICtrlCreateLabel("Option 1", 352, 168, 44, 17) ;$Combo4 = GUICtrlCreateCombo("Combo1", 352, 248, 145, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) ;$L_option4 = GUICtrlCreateLabel("Option 1", 352, 224, 44, 17) $oldhome = GUICtrlCreateInput("", 352, 312, 121, 21) $L_option5 = GUICtrlCreateLabel("Old Home", 352, 288, 100, 17) $newhome = GUICtrlCreateInput("Input1", 352, 368, 121, 21) $L_option7 = GUICtrlCreateLabel("New Home", 352, 344, 100, 17) $B_Verify = GUICtrlCreateButton("Verify", 640, 520, 75, 57) $B_start = GUICtrlCreateButton("S T A R T", 728, 520, 75, 57) $Label_lable = GUICtrlCreateLabel("Paste list here", 8, 8, 70, 17) $Label_Success = GUICtrlCreateLabel("Success", 560, 248, 45, 17) $Label_Failed = GUICtrlCreateLabel("Failed", 560, 8, 32, 17) $Group1 = GUICtrlCreateGroup("Options", 344, 32, 185, 377) GUICtrlCreateGroup("", -99, -99, 1, 1) $Group2 = GUICtrlCreateGroup("Status", 344, 424, 185, 145) $stat1 = GUICtrlCreateLabel("READY", 352, 440, 166, 56, $SS_CENTER) GUICtrlSetFont(-1, 32, 400, 0, "Arial Narrow") $stat2 = GUICtrlCreateLabel($a & "/" & $b, 352, 504, 166, 56, $SS_CENTER) GUICtrlSetFont(-1, 32, 400, 0, "Arial Narrow") GUICtrlCreateGroup("", -99, -99, 1, 1) $import = GUICtrlCreateButton("import", 552, 520, 75, 57) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### global $MuhVal While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit Case $import import() EndSwitch WEnd Func import() local $zInput Local $var = FileOpenDialog("Select only one file.", @ScriptDir & "\", "Files (*.txt)", 1) If @error Then Return Else _FileReadToArray($var, $zInput) For $i = 1 To UBound($zInput) - 1 _GUIListViewEx_Insert($zInput[$i]) GUICtrlSetData($stat2, 1 & "/" & $i) Next EndIf EndFunc ;==>import The only button I have set up is Import. I have Esc set up as a hot key to kill the app if you need it. I am also including a demo file with 3200 lines.. Use the program to import the file, and you will see it slow down badly when it goes over 100 lines. Does anyone have any tips or tricks how to get past this? myfile.txt list processor.au3 C0d3 is P0etry( ͡° ͜ʖ ͡°)
Moderators Melba23 Posted December 17, 2013 Moderators Posted December 17, 2013 Kovacic,Why are you reading the file into an array and then adding it to the edit line by line? Why not just read the file into a single variable with FileRead and then put it into the edit in one go? 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
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 Kovacic, Why are you reading the file into an array and then adding it to the edit line by line? Why not just read the file into a single variable with FileRead and then put it into the edit in one go? M23 One thing I will be doing is importing usernames from AD into the list based on attribute which I will pull using the AD.au3 UDF, which is pretty fast, but then I want to add those values to that edit box... Is there a simpler way? C0d3 is P0etry( ͡° ͜ʖ ͡°)
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 I can run the function to import the usernames and dump them into an array, but... hold on.. I think I am catching what you are putting down here... Going to try something.. C0d3 is P0etry( ͡° ͜ʖ ͡°)
Moderators Melba23 Posted December 17, 2013 Moderators Posted December 17, 2013 Kovacic,In the code you posted, the data is read from a file - placing the file content into the edit in one single command will be considerably faster. I do not use the AD UDF - are you now saying that you are not reading from a file in the full script but only obtaining the information line by line and adding it as it is gathered? If so, then I strongly suggest you add it to a variable rather than add it to the edit so that you end up with one single large variable to add to the edit control. 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
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 I have multiple programs I wrote, some use edit boxes that pull from AD, and some pull from files. C0d3 is P0etry( ͡° ͜ʖ ͡°)
Moderators Melba23 Posted December 17, 2013 Moderators Posted December 17, 2013 Kovacic,Fine - the logic is the same and I have suggested how you might do it in both cases. Have you tried using a single data insertion yet? 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
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 I have been looking around on how to do this with no luck I was hoping it would be as simple as using GUCtrlsetdata to send the data directly to the box but it didnt work.. _FileReadToArray($var, $zInput) GUCtrlSetData($sourcebox, $zInput) Im sure this is ridiculously easy, im just not getting it... C0d3 is P0etry( ͡° ͜ʖ ͡°)
Moderators Melba23 Posted December 17, 2013 Moderators Posted December 17, 2013 Kovacic,Do you actually read the replies I post? Why are you reading the file into an array and then adding it to the edit line by line? Why not just read the file into a single variable with FileRead and then put it into the edit in one go?Something like this should work: Func import() Local $var = FileOpenDialog("Select only one file.", @ScriptDir & "\", "Files (*.txt)", 1) If @error Then Return Else GUICtrlSetData($stat2, FileRead($var)) EndIf EndFunc ;==>importM23 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
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 Kovacic, Do you actually read the replies I post? Something like this should work: Func import() Local $var = FileOpenDialog("Select only one file.", @ScriptDir & "\", "Files (*.txt)", 1) If @error Then Return Else GUICtrlSetData($stat2, FileRead($var)) EndIf EndFunc ;==>import M23 That doesn't seem to be working, and I wonder if its because I am using functions from GUIListViewEx.au3 instead of a normal edit box... C0d3 is P0etry( ͡° ͜ʖ ͡°)
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 im getting closer, i can smell it! _GUIListViewEx_Insert(stringsplit(FileRead($var)," ")) C0d3 is P0etry( ͡° ͜ʖ ͡°)
Moderators Melba23 Posted December 17, 2013 Moderators Posted December 17, 2013 Kovacic,You started off this thread by saying you were entering text into an EDIT control - why are we now talking about my GUIListViewEx UDF and entering data into a ListView? How on earth do you expect to get any sensible help if you cannot even explain what it is you are trying to do? 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
Kovacic Posted December 17, 2013 Author Posted December 17, 2013 The GUIListViewEx was in there from the beginning but no worries. Im going to rewrite it using the edit box instead. I called it an edit box because I figured it was an edit box housing a list view. I wanted to keep the GUIListViewEx aspect but I might give up and just use a plane ole edit box because its easier to handle. I liked how I had better control of the list, but its not a huge deal.. I'm just going to rewrite it and try it. Thank you for the input! C0d3 is P0etry( ͡° ͜ʖ ͡°)
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