Re: [WIN32Lib] TreeView pblm: erase, addTVItem, & getTVSelectedText cause crash

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

Matt,

I tried your revised code, but it still failed, but because Win32Lib was no
longer stamped, I don't know the nature of the crash.

Oh, I had to add a "end if" between
>         return msg
and
>     elsif window_type[ id ] = TreeView then

Dan

----- 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
>
>
>
>

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

Search



Quick Links

User menu

Not signed in.

Misc Menu