Jump to content

Recommended Posts

Posted

Hey guys

Quick question:

In this GUI the listview is created from items in test.txt

I would like my "Get Info" button to show the actual text of the item that is selected. So far I have been able to make it show the number of the item.

What is the last missing puzzle here?
 

#include <GUIConstantsEx.au3>
#include <GUIListViewEx.au3>


Global $MainGUI_ManageItemList
Global $File = "test.txt"
Global $FileToArray = FileReadToArray("test.txt")



Call ("MainGUI_ManageItemList")



Func MainGUI_ManageItemList()

    Local $Button1

    $MainGUI_ManageItemList = GUICreate("Manage Item List", 800, 400, -1, -1)

    $cLV = GUICtrlCreateListView("[items]", 10, 10, 400, 775, $LVS_NOCOLUMNHEADER)
GUICtrlSetFont(-1, 12, 800, 0, "@Arial Unicode MS")
_GUICtrlListView_SetColumnWidth($cLV, 0, 378)

$Button1 = GUICtrlCreateButton("Button 1", 425, 10, 80, 30)
$RemoveItem = GUICtrlCreateButton("Remove Item", 425, 50, 80, 30)
$GetInfo = GUICtrlCreateButton("GetInfo", 425, 120, 80, 30)


GUISetState(@SW_SHOW, $MainGUI_ManageItemList)



; Intialise ListView
Global $iLV_Index = _GUIListViewEx_Init($cLV)
; Insert lines
_GUIListViewEx_Insert($FileToArray, True)
; Register required messages
_GUIListViewEx_MsgRegister(True, False, False, False)


    While 1
        Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE

                ExitLoop

            Case $Button1
            MsgBox(0,"","Button 1 is pressed")


         Case $RemoveItem
            _GUIListViewEx_Delete()

         Case $GetInfo
         $iIndex = _GUICtrlListView_GetSelectedIndices($cLV)
         msgbox (0, "Selected item", $iIndex)

        EndSwitch
    WEnd
EndFunc   ;==>Main

 

Posted (edited)

Bill ! My new best friend :)

If I define the item number like this: _GUICtrlListView_GetItemText($cLV, 1)  Then it shows the text of item 1 correct.

And since _GUICtrlListView_GetSelectedIndices gets the item number of the selected item, I thought that I could do like this, but it doesn't work.
The 2nd msgbox is just blank.

 

Case $GetInfo
$iIndex = _GUICtrlListView_GetSelectedIndices($cLV)

$iIndexText = _GUICtrlListView_GetItemText($cLV, $iIndex)


msgbox (0, "Selected item NUMBER", $iIndex)
msgbox (0, "Selected item TEXT", $iIndexText)

 

Edited by david1337
Posted
  On 9/28/2016 at 9:58 AM, david1337 said:

Bill ! My new best friend :)

 

Expand  

o:)

Try the Array Based Parameter:

Case $GetInfo
         $iIndex = _GUICtrlListView_GetSelectedIndices($cLV, True)
        $iIndexText = _GUICtrlListView_GetItemText($cLV, $iIndex[1])

 

Posted

Omg I can't believe this fix I just made up :D

Case $GetInfo
         $iIndex = _GUICtrlListView_GetSelectedIndices($cLV)
         $iIndexNumber = $iIndex -""
         $iIndexText = _GUICtrlListView_GetItemText($cLV, $iIndexNumber)


         msgbox (0, "Selected item NUMBER", $iIndex)
         msgbox (0, "Selected item TEXT", $iIndexText)

 

Posted

Oh, I didn't see your fix - that works great too, and somehow seems prettier :D

Btw do you know if it's possible to set a case as soon as an item in the list is highlighted? Or is a button always needed?

Posted
  On 9/28/2016 at 11:06 AM, david1337 said:

Oh, I didn't see your fix - that works great too, and somehow seems prettier :D

Expand  

Well yours works for now but when you start adding code and intricacies it may cause problems down the road.

Posted

For instance if you were using the Default Version of _GUICtrlListView_Create you could call your case with the following:

$LVS_EX_ONECLICKACTIVATE - The control sends an $LVN_ITEMACTIVATE messages when the user clicks an item

 

Melbas probably has something similar better ;-)

Posted

Oh god scripting can be frustrating:

When NO item is selected and the "Get Info" button is clicked, the script crashes with: Array variable has incorrect number of subscripts or subscript dimension range exceeded

I guess that array bug is still haunting here huh? :)

  • Moderators
Posted

david1337,

Someone called?

This seems to work nicely:

Case $GetInfo
    $aIndex = _GUICtrlListView_GetSelectedIndices($cLV, True)
    If IsArray($aIndex) And $aIndex[0] <> 0 Then
        MsgBox(0, "Selected item", _GUICtrlListView_GetItemText( $cLV, $aIndex[1]))
    EndIf

And as you are checking that there is at least one item selected, you do not get a crash when one is not.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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:

  Reveal hidden contents

 

  • Moderators
Posted (edited)

david1337,

Nice thought - but as has just been proved, I normally turn up fairly quickly in any event!

M23

Edited by Melba23
Typo

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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:

  Reveal hidden contents

 

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
×
×
  • Create New...