1. RE: SetIndex - List View
- Posted by Matthew Lewis <matthewwalkerlewis at YAHOO.COM> Jun 15, 2001
- 406 views
> From: "Tony Steward" <figjam at nlc.net.au> > > Hi all, > > I have a need to setIndex in a listview but this is of > cause not supported. > > Does anyone have any ideas. > > > > What I am trying to achieve is to have a listview with a > textEditBox box > > below it, where I can type and the listview automatically > scrolls to the > > nearest match. I have already achieved this with a normal > List, so setting > > the index is what I need help with. > From: Euman [mailto:euman at bellsouth.net] > Tony this isnt tested, try it out and see if it works. If it > doesnt then > play around with it some.... > > VOID=sendMessage(id,LVM_SETITEMPOSITION,OLD_INDEX,LVM_SETITEMPOSITION) This would actually change the position of the item relative to the other items in the list. There's no one-liner (that I'm aware of) that will do this for you. Part of the issue is that you have to do a conversion between win32lib id for each item (stored as the lParam member of the listview item) and the iItem (which identifies the item by order in the list). The following should give the same functionality as setIndex does for lists (Derek, this would make a good 'Dispatch' for setItem in the listview file): -- this function should be in .56, although the name will be different global function getLViItemFromlParam( integer id, integer lv_id ) atom findlv, item findlv = struct_LVFINDINFO( LVFI_PARAM, "", lv_id, 0, 0, 0 ) item = sendMessage( id, LVM_FINDITEM, -1, findlv ) release_mem( findlv ) return item end function -- Can set multiple selections, and first item will be made visible procedure setLVIndex( integer id, object sel ) integer iItem atom lvitem if atom(sel) then sel = {sel} end if lvitem = struct_LVITEM( LVIF_STATE, 0, 0, LVIS_SELECTED, LVIS_SELECTED, 0,0,0) for i = length( sel ) to 1 by -1 do iItem = getLViItemFromlParam( id, sel[i] ) store( lvitem, LVITEM_iItem, iItem ) VOID = sendMessage( id, LVM_SETITEMSTATE, iItem, lvitem ) end for VOID = sendMessage( id, LVM_ENSUREVISIBLE, iItem, 0 ) end procedure Matt Lewis
2. RE: SetIndex - List View
- Posted by Matthew Lewis <matthewwalkerlewis at YAHOO.COM> Jun 19, 2001
- 404 views
> -----Original Message----- > Hi all, > Matt thanks once again to your support for this list. > One small problem is in the last line of the code: > > VOID = sendMessage( id, LVM_ENSUREVISIBLE, iItem, 0 ) > > i Get Error LVM_ENSUREVISIBLE has not been declared. I looked > through the > code and found TVM_ENSUREVISIBLE but not LVM. I assume I > could just add > something like > LVM_ENSUREVISIBLE = (LVM_FIRST+0), > But i notice each line has a different value to add to LVM_FIRST Sorry, it wasn't in win32lib: LVM_ENSUREVISIBLE = 4115 Matt Lewis