shotiko Posted May 5, 2016 Posted May 5, 2016 (edited) I have a problem using listview and arrays: I try to create listview from file which contains multiples of 3 lines, therefore 3 columns and rows of total number of lines devided on 3. creation works fine but it adds extra rows as as number of items: ex. 24 lines in text creates 3 columns 8rows and other 16 rows empty. this is seen in listview and adds scroll even though my gui shouldn't need. I tried looking at styles and extended styles but couldn't find forcing limitation on number of rows created. Func _config() $configMain = GUICreate('Settings', 530, 330, -1, -1, '', '', $mainGUI) Global $editBtn = GUICtrlCreateButton("Edit", 430, 50, 70, 30); Edit Btn Global $saveBtn = GUICtrlCreateButton("Save", 430, 120, 70, 30); Save Btn Global $cancelBtn = GUICtrlCreateButton("Cancel", 430, 180, 70, 30); Cancel Btn ; create listview with 3 columns $cLV = GUICtrlCreateListView("Server Name|server address|user Name", 10, 10, 400, 280) GUICtrlSetFont(-1, 10); set font for previous control _GUICtrlListView_SetColumnWidth(-1, 0, 95); first column size _GUICtrlListView_SetColumnWidth(-1, 1, 180); second column size _GUICtrlListView_SetColumnWidth(-1, 2, 100); third column size Local $j = 1, $k = 2, $l = 3 ; starting lines for $j - server; $k - server address; $l - account name For $i = 1 To _FileCountLines($configF); 1 to number of lines present in file $sLine = FileReadLine($configF, $j); Server name Line read $saLine = FileReadLine($configF, $k); server address Line read $anLine = FileReadLine($configF, $l); user Name read $listV = GUICtrlCreateListViewItem($sLine & '|' & $saLine & '|' & $anLine, $cLV); assign 3 values each with iteration _ ; seperated and concatenated by '|' $j += 3; move three lines below $k += 3; move three lines below $l += 3; move three lines below Next $cLVarray = _GUIListViewEx_ReadToArray($cLV); read ListView to array $cLVinit = _GUIListViewEx_Init($cLV, $cLVarray, 0, 0, True, 1 + 2 + 512); Initialize _GUIListViewEx_SetEditStatus($cLVinit, "*") ; all columns can be edited _GUIListViewEx_MsgRegister() ; receive messages for UDF functions _GUIListViewEx_SetActive($cLVinit) ; set $cLVinit - 1 as active GUISetState(@SW_SHOW, $configMain) EndFunc ;==>_config i can avoid this by For $i = 1 To 50 _GUICtrlListView_DeleteItem($cLV, 8) $i += 1 Next if i know maximum number of rows i will need, but items in listview are editable and therefore unreliable. I tried _GUICtrlListView_DeleteItem($cLV, _GUICtrlListView_GetItemCount($cLV) / _GUICtrlListView_GetColumnCount($cLV)) this returns empty listview when it comes to editing part: $cLVarrayModif = _GUIListViewEx_ReturnArray($cLVinit, 0) _ArrayDisplay($cLVarrayModif) this also shows 24 rows 3columns Edited May 5, 2016 by shotiko typo
Moderators Melba23 Posted May 5, 2016 Moderators Posted May 5, 2016 shotiko, If you read the file like this, you avoid the extra lines - and it is faster: expandcollapse popup#include <GUIConstantsEx.au3> #include "GuiListViewEx.au3" $configF = FileOpen("Data.txt") ; Open file to get handle <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< $configMain = GUICreate('Settings', 530, 330) Global $editBtn = GUICtrlCreateButton("Edit", 430, 50, 70, 30) ; Edit Btn Global $saveBtn = GUICtrlCreateButton("Save", 430, 120, 70, 30) ; Save Btn Global $cancelBtn = GUICtrlCreateButton("Cancel", 430, 180, 70, 30) ; Cancel Btn ; create listview with 3 columns $cLV = GUICtrlCreateListView("Server Name|server address|user Name", 10, 10, 400, 280) GUICtrlSetFont(-1, 10) ; set font for previous control _GUICtrlListView_SetColumnWidth(-1, 0, 95) ; first column size _GUICtrlListView_SetColumnWidth(-1, 1, 180) ; second column size _GUICtrlListView_SetColumnWidth(-1, 2, 100) ; third column size Local $j = 1, $k = 2, $l = 3 ; starting lines for $j - server; $k - server address; $l - account name While 1 $sLine = FileReadLine($configF) ; Server name Line read ; Use handle to read file line <<<<<<<<<<<<<<<<<<<<< If @error = -1 Then ExitLoop ; Exit loop when file ends <<<<<<<<<<<<<<<<<<<<<<<<< $saLine = FileReadLine($configF) ; server address Line read ; Line number automatically increases <<<<<<<<<<<<<< $anLine = FileReadLine($configF) ; user Name read ; And it is much faster as well! <<<<<<<<<<<<<<<<<<< $listV = GUICtrlCreateListViewItem($sLine & '|' & $saLine & '|' & $anLine, $cLV) ; assign 3 values each with iteration _ WEnd GUISetState(@SW_SHOW, $configMain) FileClose($configF) ; Do not forget to close the file <<<<<<<<<<<<<<<<<<<<<<< $cLVarray = _GUIListViewEx_ReadToArray($cLV); read ListView to array _ArrayDisplay($cLVarray, "", Default, 8) While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd 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
shotiko Posted May 5, 2016 Author Posted May 5, 2016 thanks Melba, always good to discover how to shorten my script (and make it work)
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