Re: Win32Lib bug...maybe...I think...
- Posted by Matthew Lewis <MatthewL at KAPCOUSA.COM> Feb 05, 2001
- 420 views
-----Original Message----- From: Jonas and Kristin Temple >I have been really struggling with this one >and thought it was in my code until I get the >registered version of Euphoria and it showed >me the error was in a routine in Win32Lib. Here's >the sequence of events to re-produce the bug: The problem lies within deleteItem(). There were a couple of bugs dealing with listviews. You can change deleteItem as follows (this will be fixed in the next release of win32lib): 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 end if -- end changes to deleteItem() Basically, when you tried to erase the items from one listview, win32lib wiped out its records of ALL listviews. :( Also, to delete one item required you to know the item number (counted from the top of the listview) rather than the win32lib item id. >Again, I'm not certain if I'm doing something >wrong but the bug ONLY happens when you call >eraseItems for the list view control in the second >window AND items are in the list view control in >the main window. How about that for obscure? I'm >working on a database order entry application and >using list views are pretty central in my design. >This is definitely keeping me from proceeding. Nope, this was my mistake. :) And I fully understand. I've recently been using a lot of listviews, and fixing a lot of my old bugs in win32lib, as well as adding functionality that I didn't really know was needed when I originally coded the listview wrappers. >Since I'm on the subject, here's what I'd like to see >added/changed in list view controls: >- A removeColumns() routine to remove all the columns >in a list view. There are some circustances where it >would be nice to rebuild the columns. >- Ability to specify where to add the item using addLVItem >routine. The function currently uses 0 as the parameter >of where to add the item. If you are adding items from a >database the first one you added is always the last one in >the list. It would be nice to have more control over that. >I have changed this myself in Win32Lib but I want to stick >with the official version. I'll take a look at these two... >- I don't have particulars about this one, but there seems >to be a problem when retrieving a list view item and the user >has clicked a column header to change the sort order of the >items. I don't think the internal sequence for the list view >is being resorted. Sorry I can't provide more detail. Not sure about this one. I haven't noticed anything wrong with this one, unless it was resulting from the deleteItem problem. Basically, all win32lib does is the compare routine for windows, which does the actual sorting itself. Also, in the next version will be a routine to change text of a listview item and a hittest, to allow things like selection using right clicks. Matt Lewis