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
|
Not Categorized, Please Help
|
|