Jibsbrown Posted January 31, 2018 Posted January 31, 2018 So trying to get an INI section in a listView with checkboxes. Was able to get the the section values to show until i add the checkboxes and now only the keys are show up. Between reading the Help file, Forum Topic and trying other code option. I have been unable to answer this problem. I'm assuming its something very basic I'm overlooking since this it's day 21 of learning Autoit. If someone could please advise I would appreciate the assistance. Here's the code: expandcollapse popup#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <GUIListView.au3> #include <Array.au3> #include <File.au3> #include <ListViewConstants.au3> Global $sIniPath = "installLog.ini" ;ConsoleWrite($sIniPath) $iniSctionNames = IniReadSectionNames($sIniPath) ;_ArrayDisplay($iniSctionNames, "$iniSctionNames") $keys2 = IniReadSection($sIniPath, $iniSctionNames[2]) _ArrayDisplay($keys2 , "$keys2") ; Create GUI $hGUI = GUICreate("Test", 300, 250) ; Create ListView $cLV = GUICtrlCreateListView("", 10, 10, 200, 200,$LVS_List,$LVS_EX_CHECKBOXES) _GUICtrlListView_AddColumn($cLV, $keys2, 100) _GUICtrlListView_AddColumn($cLV, $keys2, 100) ;_GUICtrlListView_AddItem($cLV, $keys2, 0) _GUICtrlListView_AddArray($cLV, $keys2) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd And the INI file I'm using. [OldSysInfo] 4=192.168.0.4|DESKTOP-RDIU2SN|R90M05Q8 5=192.168.0.5|SD0123456789101|R9WGP9P 6=192.168.0.6|SD0123456789102|R9WGP9PT 3=192.168.0.3|DESKTOP-3RS4LKL|R9WGP9P 23=192.168.0.23|SD0123456789102|MXL1234P5I [PrinterIp] 50=192.168.0.50 48=192.168.0.48 47=192.168.0.47 [NewSysInfo] newPC = SD0123456789adfs|192.168.0.185|2UA1234FTR Also if possible could you explain how to hide the Array count row as well.
Zedna Posted January 31, 2018 Posted January 31, 2018 expandcollapse popup#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include <GUIListView.au3> #include <Array.au3> #include <File.au3> #include <ListViewConstants.au3> Global $sIniPath = "installLog.ini" ;ConsoleWrite($sIniPath) $iniSctionNames = IniReadSectionNames($sIniPath) ;_ArrayDisplay($iniSctionNames, "$iniSctionNames") $keys2 = IniReadSection($sIniPath, $iniSctionNames[2]) _ArrayDisplay($keys2 , "$keys2") ; Create GUI $hGUI = GUICreate("Test", 300, 250) ; Create ListView $cLV = GUICtrlCreateListView("Id.|IP", 10, 10, 200, 200, $GUI_SS_DEFAULT_LISTVIEW, BitOR($LVS_EX_CHECKBOXES,$WS_EX_CLIENTEDGE)) ;~ _GUICtrlListView_AddColumn($cLV, "Id.", 100) ;~ _GUICtrlListView_AddColumn($cLV, "IP", 100) ;_GUICtrlListView_AddItem($cLV, $keys2, 0) _ArrayDelete($keys2, 0) _GUICtrlListView_AddArray($cLV, $keys2) GUICtrlSendMsg($cLV, $LVM_SETCOLUMNWIDTH, 0, 50) GUICtrlSendMsg($cLV, $LVM_SETCOLUMNWIDTH, 1, 100) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Resources UDF ResourcesEx UDF AutoIt Forum Search
Zedna Posted January 31, 2018 Posted January 31, 2018 (edited) Here is version displaying only one column "IP" (without column "Id."): expandcollapse popup#include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <WindowsConstants.au3> #include <GUIListView.au3> #include <Array.au3> #include <File.au3> #include <ListViewConstants.au3> Global $sIniPath = "installLog.ini" ;ConsoleWrite($sIniPath) $iniSctionNames = IniReadSectionNames($sIniPath) ;_ArrayDisplay($iniSctionNames, "$iniSctionNames") $keys2 = IniReadSection($sIniPath, $iniSctionNames[2]) _ArrayDisplay($keys2 , "$keys2") ; Create GUI $hGUI = GUICreate("Test", 300, 250) ; Create ListView $cLV = GUICtrlCreateListView("IP", 10, 10, 200, 200, $GUI_SS_DEFAULT_LISTVIEW, BitOR($LVS_EX_CHECKBOXES,$WS_EX_CLIENTEDGE)) _ArrayDelete($keys2, 0) _GUICtrlListView_AddArray_Ini($cLV, $keys2) GUICtrlSendMsg($cLV, $LVM_SETCOLUMNWIDTH, 0, 120) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd ; modified original UDF function Func _GUICtrlListView_AddArray_Ini($hWnd, ByRef $aItems) Local $bUnicode = _GUICtrlListView_GetUnicodeFormat($hWnd) Local $tItem = DllStructCreate($tagLVITEM) Local $tBuffer If $bUnicode Then $tBuffer = DllStructCreate("wchar Text[4096]") Else $tBuffer = DllStructCreate("char Text[4096]") EndIf DllStructSetData($tItem, "Mask", $LVIF_TEXT) DllStructSetData($tItem, "Text", DllStructGetPtr($tBuffer)) DllStructSetData($tItem, "TextMax", 4096) Local $iLastItem = _GUICtrlListView_GetItemCount($hWnd) _GUICtrlListView_BeginUpdate($hWnd) Local $pItem = DllStructGetPtr($tItem) For $iI = 0 To UBound($aItems) - 1 DllStructSetData($tItem, "Item", $iI + $iLastItem) DllStructSetData($tItem, "SubItem", 0) ;~ DllStructSetData($tBuffer, "Text", $aItems[$iI][0]) DllStructSetData($tBuffer, "Text", $aItems[$iI][1]) ; get value from second dimension and use it as text for first column in ListView If $bUnicode Then GUICtrlSendMsg($hWnd, $LVM_INSERTITEMW, 0, $pItem) Else GUICtrlSendMsg($hWnd, $LVM_INSERTITEMA, 0, $pItem) EndIf ; don't use values from other dimensions for more columns ;~ For $iJ = 1 To UBound($aItems, $UBOUND_COLUMNS) - 1 ;~ DllStructSetData($tItem, "SubItem", $iJ) ;~ DllStructSetData($tBuffer, "Text", $aItems[$iI][$iJ]) ;~ If $bUnicode Then ;~ GUICtrlSendMsg($hWnd, $LVM_SETITEMW, 0, $pItem) ;~ Else ;~ GUICtrlSendMsg($hWnd, $LVM_SETITEMA, 0, $pItem) ;~ EndIf ;~ Next Next _GUICtrlListView_EndUpdate($hWnd) EndFunc ;==>_GUICtrlListView_AddArray Edited January 31, 2018 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search
Jibsbrown Posted January 31, 2018 Author Posted January 31, 2018 Thank you very much Zedna, I can now see I had a lot more coding to do to just have one Column. Now its time to read up on DllStructSetData and all that links off. Again thank you.
Zedna Posted February 1, 2018 Posted February 1, 2018 (edited) In this case change in _GUICtrlListView_AddArray() was simpler than changing content of array obtained from INI and passed to ListView through _GUICtrlListView_AddArray(). Without my modified UDF you should change (or copy) array obtained from INI to 1D array because you have only 1 column in ListView and _GUICtrlListView_AddArray() suppose array dimensions fit to number of columns in ListView. Edited February 1, 2018 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search
Jibsbrown Posted February 2, 2018 Author Posted February 2, 2018 Thank you for the additional info. I tried to get it down to a 1D but due to way I first set the INI with changing keys names I kinda stuck my self a 2D... Or at least that's my 21+ day Autoit brain is telling me. Starting to think that I either leave the key blank or make it the same, but leaning to making this just variables that are made when the EXE starts. But have yet to understand how to get the IPs for the following code to set as global varibles out side of the For/Nest that can later be called for either a direct pass or a clipboard pass to active window input field. ; Get IP and separate into Subnet and host oct $oct = StringSplit(@IPAddress1, ".") $readOct = $oct[4] Global $siteSubnet = $oct[1] & "." & $oct[2] & "." & $oct[3] & "." Global $oHost = $oct[4] ;-Scan Subnet for ping able IPs and get WMIC Data For $i = 50 To 43 Step - 1 $activeIP = Ping($siteSubnet & $i, 250) $PrinterIP = $siteSubnet & $i If @error = 0 Then ;MsgBox(0,"",$PrinterIP,10) ;IniWrite($sInstallIniName, "PrinterIp", $i, $PrinterIP) EndIf Next What I'm building is for a desktop refresh project that will happen at different locations with changing subnets. This part take care of finding the printer IPs.
Zedna Posted February 2, 2018 Posted February 2, 2018 (edited) Here is simplified version for displaying one column (without _GUICtrlListView_AddArray): #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIListView.au3> Global $sIniPath = "installLog.ini" $iniSctionNames = IniReadSectionNames($sIniPath) $keys2 = IniReadSection($sIniPath, $iniSctionNames[2]) ;~ _ArrayDisplay($keys2 , "$keys2") ; Create GUI $hGUI = GUICreate("Test", 300, 250) ; Create ListView $cLV = GUICtrlCreateListView("IP", 10, 10, 200, 200, $GUI_SS_DEFAULT_LISTVIEW, BitOR($LVS_EX_CHECKBOXES,$WS_EX_CLIENTEDGE)) For $i = 1 To UBound($keys2) - 1 ; skip first item with index 0 (number of rows) GUICtrlCreateListViewItem($keys2[$i][1], $cLV) Next GUICtrlSendMsg($cLV, $LVM_SETCOLUMNWIDTH, 0, 120) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd And here is code for: copy one column from original 2D array to new global 1D array for later use: ; copy one column from original 2D array to new 1D array for later use Global $ip[1] $n = UBound($keys2) - 1 ReDim $ip[$n] For $i = 1 To $n $ip[$i-1] = $keys2[$i][1] Next _ArrayDisplay($ip , "$ip") Edited February 2, 2018 by Zedna Resources UDF ResourcesEx UDF AutoIt Forum Search
Zedna Posted February 2, 2018 Posted February 2, 2018 And here is simplified version for displaying of two columns: #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> #include <GUIListView.au3> Global $sIniPath = "installLog.ini" $iniSctionNames = IniReadSectionNames($sIniPath) $keys2 = IniReadSection($sIniPath, $iniSctionNames[2]) ;~ _ArrayDisplay($keys2 , "$keys2") ; Create GUI $hGUI = GUICreate("Test", 300, 250) ; Create ListView $cLV = GUICtrlCreateListView("Id.|IP", 10, 10, 200, 200, $GUI_SS_DEFAULT_LISTVIEW, BitOR($LVS_EX_CHECKBOXES,$WS_EX_CLIENTEDGE)) For $i = 1 To UBound($keys2) - 1 ; skip first item with index 0 (number of rows) GUICtrlCreateListViewItem($keys2[$i][0] & '|' & $keys2[$i][1], $cLV) Next GUICtrlSendMsg($cLV, $LVM_SETCOLUMNWIDTH, 0, 50) GUICtrlSendMsg($cLV, $LVM_SETCOLUMNWIDTH, 1, 100) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Resources UDF ResourcesEx UDF AutoIt Forum Search
Jibsbrown Posted February 3, 2018 Author Posted February 3, 2018 Thank you again Zedna for the code, see I still have a lot left to learn and figure out. Because I tried using variation of Global $ip[1] with the only success be an error message. Well also on to Func / EndFunc learning as well. Again i can't express my appreciation enough for code help and insights shared. Thank you.
Zedna Posted February 3, 2018 Posted February 3, 2018 You are welcome to the AutoIt's community :-) Happy AutoIt's coding ... Resources UDF ResourcesEx UDF AutoIt Forum Search
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