Jump to content
Jibsbrown

Listview with checkbox only showing 1st column

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.

Share this post


Link to post
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

 

Share this post


Link to post
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

Share this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
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

Share this post


Link to post
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.

Share this post


Link to post
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

Share this post


Link to post
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

 

Share this post


Link to post
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.

Share this post


Link to post
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

  • Similar Content

    • By Miliardsto
      I have the following code. You can see there are $color_normal and $color_trans
      In my case normal is too dark . And color trans is to much violet.
      If you run it you will see how its looks. I want gui with listView have the same color like taskbar in windows 10.
      How to achieve that?
       
       
      #include <Date.au3> #include <MsgBoxConstants.au3> #include <GuiListBox.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> #include <GuiListView.au3> HotKeySet("{ESC}", "Terminate") $color_normal = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) $color_trans = "0x" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) $trans = RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") ConsoleWrite("Transpart = " & $trans & @CRLF) ConsoleWrite("Color normal = " & $color_normal & @CRLF) ConsoleWrite("Color trans = " & $color_trans & @CRLF) ConsoleWrite(_Get_taskbar_color()); It return AARRGGBB $taskbarColor = _Get_taskbar_color() Global $gui = GUICreate("Test", 150, 58,@DesktopWidth-300,@DesktopHeight-58,$WS_POPUP,BitOR($WS_EX_TOPMOST, $WS_EX_TOOLWINDOW)) Global $idListview = GUICtrlCreateListView("", 0, 0, 150, 58,BitOR($LBS_NOTIFY,$LBS_SORT), 0) ;_GuiCtrlMakeTrans(-1,100) ; Add column _GUICtrlListView_AddColumn($idListview, "Msgs", 100) GUICtrlSetFont(-1, 7, 400, 0, "Segoe UI") GUICtrlSetColor(-1, 0x470C4F) GUICtrlSetBkColor($idListview, 0x310638) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func Terminate() Exit EndFunc Func _Get_taskbar_color() If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "ColorPrevalence") Then If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 16), 6) Else Return "0xFF" & StringLeft(StringRight(RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Accent", "AccentPalette"), 24), 6) EndIf Else If RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize", "EnableTransparency") Then Return "0xD9000000" Else Return "0xFF000000" EndIf EndIf EndFunc  
    • By Slipk
      Hello everybody,
      #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <GUIListViewEx.au3> $Form1 = GUICreate("Form1", 539, 350, 192, 124) $ListView1 = GUICtrlCreateListView("CLM1|CLM2", 0, 0, 538, 326) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 150) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 150) Local $dynamic = GUICtrlCreateListViewItem("Example1|Example2", $ListView1) $SubMenu = GUICtrlCreateContextMenu($dynamic) $Run = GUICtrlCreateMenuItem("Run", $SubMenu) $Edit = GUICtrlCreateMenuItem("Edit", $SubMenu) $Delete = GUICtrlCreateMenuItem("Delete", $SubMenu) Local $dynamic2 = GUICtrlCreateListViewItem("Example3|Example6", $ListView1) $SubMenu = GUICtrlCreateContextMenu($dynamic2) $Run = GUICtrlCreateMenuItem("Run", $SubMenu) $Edit = GUICtrlCreateMenuItem("Edit", $SubMenu) $Delete = GUICtrlCreateMenuItem("Delete", $SubMenu) _GUIListViewEx_Init($ListView1, "", 0, 0, True, 64) _GUIListViewEx_MsgRegister() GUISetState(@SW_SHOW) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd I use GUIListViewEx.au3 for position of items in listview but when I move one the context menu disappear. Any solution of this?
      Any method than array it is possible?
      Thank you, appreciate it.
       
       
    • By Slipk
      Hello everybody,
      I download the GUIListViewEx.au3 by Melba23 in order to move up or down my items from a listview.
      Everything it's looking good in script but when I move an item it will crash.
      Any suggestions?
      Thank you! 

    • By Slipk
      Hello everybody,
      Sorry for my bad english.
       
      I try to figure out if I have a dynamic listview with as many items as I want, how to save to a text file all the data listview contains in the same form that you put when you create a listviewitem. I will give you an example.
      When the script is running it will show you the listview and some items. How to take the items data "Data1|Data1_Sub1|Data1_Sub2" in this format and paste into a text file? All of them.
      I tried to explain as good as I can.
      Thank you for your attention!
      #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> $Form_Menu = GUICreate("Form Example", 351, 234, -1, -1) $Form_Menu_ListView1 = GUICtrlCreateListView("Column #1|Column #2|Column #3", 0, 0, 346, 230) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 75) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 75) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 75) GUICtrlCreateListViewItem("Data1|Data1_Sub1|Data1_Sub2", $Form_Menu_ListView1) GUICtrlCreateListViewItem("Data2|Data2_Sub1|Data2_Sub2", $Form_Menu_ListView1) GUICtrlCreateListViewItem("DataN|DataN_SubN|DataN_SubN", $Form_Menu_ListView1) ;The data that appear in the listview be saved in a file like that : #cs Data1|Data1_Sub1|Data1_Sub2 Data2|Data2_Sub1|Data2_Sub2 DataN|DataN_SubN|DataN_SubN #ce GUISetState(@SW_SHOW, $Form_Menu) While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd
    • By Slipk
      Hello,
      I tried with many methods and searched a lot for items to move up and down but couldn't find it.
      Sorry for my bad english.
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <ListViewConstants.au3> #include <WindowsConstants.au3> #include <GuiListView.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 307, 247, 192, 124) GUISetFont(10, 400, 0, "Arial") $ListView1 = GUICtrlCreateListView("C1|C2|C3", 0, 0, 250, 246) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 60) GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 100) GUICtrlCreateListViewItem("Test1|Test2|Test3", $ListView1) GUICtrlCreateListViewItem("Cat|Dog|Fish", $ListView1) GUICtrlCreateListViewItem("ABC|DEF|GHI", $ListView1) $Button1 = GUICtrlCreateButton("/\", 264, 8, 27, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") $Button2 = GUICtrlCreateButton("\/", 264, 40, 27, 25) GUICtrlSetFont(-1, 10, 800, 0, "Arial") GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1     $nMsg = GUIGetMsg()     Switch $nMsg         Case $GUI_EVENT_CLOSE             Exit         Case $Button1 ;up         Case $Button2 ;down     EndSwitch WEnd  
      Thank you for your help!
×
×
  • Create New...