Jump to content

Listview with checkbox only showing 1st column


Jibsbrown
 Share

Recommended Posts

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: 

#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.

Link to comment
Share on other sites

#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

 

Link to comment
Share on other sites

Here is version displaying only one column "IP" (without column "Id."):

#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 by Zedna
Link to comment
Share on other sites

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 by Zedna
Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 by Zedna
Link to comment
Share on other sites

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

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...