Re: [WIN32Lib] TreeView pblm: erase, addTVItem, & getTVSelectedText cause crash
- Posted by Dan Moyer <DANIELMOYER at prodigy.net> Oct 16, 2001
- 423 views
Matt, Ok, my version of Win32Lib deleteItem() *is* different, but it's the last official (stamped) release at RDS, Version: 0.55.1 19/Dec/2000. I'll see if your code fixes my problem, thanks. ver 0.55.1 (for the "erase all" portion of deleteItem for LV) is: elsif window_type[ id ] = ListView then if pos = -1 then msg = LVM_DELETEALLITEMS iItem = length( lvitem_owner ) while iItem do removeLVItem( iItem ) iItem = length( lvitem_owner ) end while Thanks again, Dan Moyer ----- Original Message ----- From: "Matthew Lewis" <matthewwalkerlewis at YAHOO.COM> To: "EUforum" <EUforum at topica.com> Sent: Tuesday, October 16, 2001 4:51 AM Subject: RE: [WIN32Lib] TreeView pblm: erase, addTVItem, & getTVSelectedText cause crash > > > > -----Original Message----- > > From: Dan Moyer [mailto:DANIELMOYER at prodigy.net] > > > > I'm having a problem in using TreeView, whereby if I erase > > and repopulate a > > TV, *after* I have selected an item in the TV, my program > > crashes. If I > > remove the "erase" function for the items that I have before > > the repopulate, > > no crash (but dupl stuff in TV). > > > > Dan, first thing you should do is check deleteItem() in win32lib. There was > a (read: my) bug in there with regard to both list and treeviews. > Essentially, some internal bookkeeping wasn't done correctly, and when > windows checked on an item (text is stored by win32lib), it wasn't there, > causing a crash. > > Make sure your copy looks like this (for ListView & TreeView): > > > elsif window_type[ id ] = ListView then > if pos = -1 then > msg = LVM_DELETEALLITEMS > > iItem = 1 > > while iItem <= length( lvitem_owner ) do > if lvitem_owner[iItem] = id then > removeLVItem( iItem ) > if iItem < length(lvitem_owner) then > iItem += 1 > end if > else > iItem += 1 > end if > > end while > > else > > LV_FINDINFO = struct_LVFINDINFO( LVFI_PARAM, "", pos, 0, 0, 0) > > iItem = sendMessage( id, LVM_FINDITEM, -1, LV_FINDINFO ) + 1 > > release_mem(LV_FINDINFO) > > if not iItem then > return 0 > end if > > msg = sendMessage( id, LVM_DELETEITEM, iItem-1, lParam ) > if msg then > removeLVItem( pos ) > end if > > return msg > > elsif window_type[ id ] = TreeView then > msg = TVM_DELETEITEM > if pos = -1 then > lParam = TVI_ROOT > > -- changed to only delete items in the treeview specified > iItem = 1 > > while iItem <= length( tvitem_owner ) do > if tvitem_owner[iItem] = id then > removeTVItem( iItem ) > if iItem < length(tvitem_owner) then > iItem += 1 > end if > else > iItem += 1 > end if > > end while > else > > > >