1. setLVItemText Help Please

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. I use this procedure setLVItemText( ID, Row, Column, Text)

My Procedure is listed below. Am I doing something wrong or is this a 
bug?

Thanks
Tony

-- cut from my prog
procedure KeyDetailUpdate_onClick ()
    integer recnum, id, lvPos
    sequence KeyGroupSelected

    KeyGroupSelected = getLVSelected(KeyMainLV)
    -- ComKey
    SelectTable("ComKey")
    ComKeyKey = getText(KeyNameDetail)
    recnum = db_find_key(ComKeyKey)
    if recnum > 0 then
        ComKeyData = db_record_data(recnum)
        ComKeyData[1] = getText(KeyDescriptionDetail)
        db_replace_data(recnum, ComKeyData )
        for i = 1 to length(KeyGroupSelected) do
            id = KeyMainLVID[KeyGroupSelected[i]]
            if equal(ComKeyKey, getLVItemText(KeyMainLV, id, 1)) then
                setLVItemText(KeyMainLV, id, 2, ComKeyData[1])
                exit
            end if
        end for
-- end cut
 and so on

new topic     » topic index » view message » categorize

2. Re: setLVItemText Help Please

----- Original Message -----
From: "Tony Steward" <tony at locksdownunder.com>
To: "EUforum" <EUforum at topica.com>
Subject: RE: setLVItemText Help Please


>
>
> 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!
>
No, I've got it wrong. The setLVItemText() should be counting from, but it's
start at zero. I will examine all the LV routines tonight and make them
consistant.
------------
Derek.

new topic     » goto parent     » topic index » view message » categorize

Search



Quick Links

User menu

Not signed in.

Misc Menu