RE: setLVItemText Help Please

new topic     » goto parent     » topic index » view thread      » older message » newer message

Derek Parnell wrote:
> Tony Steward wrote:
> > Hi Derek or anyone who can help,
> > When I try to change the contents of part of my LV it just doesn't seem 
> > to work.
> 
> Hi Tony,
> there are a couple of things to note here. Firstly, getLVItemText() and 
> setLVItemText() use the item's INDEX value. This is the row number where 
> 
> the item is CURRENTLY positioned in the listview. And getLVSelected() 
> returns a list of item IDENTIFIERS, not INDEX values. Each item in a 
> listview is given a unique IDENTIFIER. This is unique for the 
> application, not just that particular listview. This means that no two 
> listview items in your applicaiton have the same ID, even though they 
> might have the same INDEX if they are in different listviews. 
> 
> I don't know why it was written this way, but I decided not to break 
> existing code by changing this default behaviour. What I did do though 
> was to allow you to return an expanded list from getLVSelected(). If you 
> 
> use the form  getLVSelected( {KeyMainLV, 1}) you will get a list of 
> items in the form of a 2-element sequence. The first element is the ID 
> and the second is the INDEX. 
> 
> For example you might have row 4 and 6 selected, thus you would get back 
> 
> something like...
> 
>    { {27, 4}, {12, 6} }
> 
> You can then use the INDEX values returned in getLVItemText and 
> setLVItemText.
> 
> The second thing to note is that you really should NOT use the value 
> returned by addLVItem as a subscript value. addLVItem returns an item's 
> ID value. An you CANNOT guarentee that these will be sequential or even 
> that they will be > 0.  So instead of ...
> 
>    id = KeyMainLVID[KeyGroupSelected[i]]
> 
> you might use ...
> 
>    id = find(KeyGroupSelected[i], KeyMainLVID)
>    if id != 0 then
>       id = KeyMainLVID[id]
>    else
>      -- msg "Bad ID"
>    end if
> 
> But note that this doesn't really answer your initial problem. 
> 
> Here is the way to find an item's INDEX for the item's ID ..
> 
>   atom LV_FINDINFO
>   LV_FINDINFO = struct_LVFINDINFO( LVFI_PARAM, "", itemID, 0, 0, 0)
>   itemINDEX = sendMessage( myLV, LVM_FINDITEM, -1, LV_FINDINFO ) + 1
>   release_mem(LV_FINDINFO)
> 
> Hopes this helps...
> ----------
> Derek.
> 
> 
Hi Derek,
The first way you suggest seems to me to be the simplest method for me. 
That is getLVSelected({KeyMainLV, 1}).
But I'm still not getting it working properly. It semes getLVItemText 
counts the 1st LV column as column 1 but I think setLVItemText counts 
column 1 as zero. Is this correct?

My procedure as follows checks text in the first column and changes the 
text in the second column, but it doesnt change the correct row.
This is using KeyGroupSelected - getLVSelected({KeyMainLV, 1})

        for i = 1 to length(KeyGroupSelected) do
            id = (KeyGroupSelected[i][2])
            if equal(ComKeyKey, getLVItemText(KeyMainLV, id, 1)) then 
                setLVItemText(KeyMainLV, id, 1, ComKeyData[1])
                trace(1)
                exit
            end if
        end for

So I must still not understand something!

Thanks
Tony

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu