Page 20 of 30
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Thu Apr 22, 2010 7:04 pm
by QuimV

Hi,
I'm testing the Filter Callback Function (in windows 7 and PB 4.41) using this code:
Code: Select all
Procedure MyFilterCallback(GadgetNumber.l, FilterString.s, ListIconColumn.l, EventCode.l) ; simple search example
Protected itemNumber.l, I.l
Debug FilterString
If FilterString
itemNumber = -1
If IsGadget(GadgetNumber)
; Search for string
For I = 0 To CountGadgetItems(GadgetNumber) - 1
If FilterString = GetGadgetItemText(GadgetNumber, I, ListIconColumn)
itemNumber = I
Break
EndIf
Next
;
If itemNumber <> -1 ; if string found, scroll to row
PureLVSORT_ScrollToRow(GadgetNumber, itemNumber)
SetGadgetItemState(GadgetNumber, itemNumber, GetGadgetItemState(GadgetNumber, itemNumber) | #PB_ListIcon_Selected)
EndIf
EndIf
EndIf
EndProcedure
;
#Window_0 = 0
#ListIcon_0 = 0
;
Procedure Open_Window_0()
If OpenWindow(#Window_0, 216, 0, 602, 302, "PureLVSORT Test", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered)
ListIconGadget(#ListIcon_0, 5, 5, 590, 285, "String", 110)
AddGadgetColumn(#ListIcon_0, 1, "Numeric", 110)
AddGadgetColumn(#ListIcon_0, 2, "Float", 110)
AddGadgetColumn(#ListIcon_0, 3, "DateDDMMYYYY", 120)
AddGadgetColumn(#ListIcon_0, 4, "DateMMDDYYYY", 120)
AddGadgetItem(#ListIcon_0, -1, "ABCDE" + Chr(10) + "514" + Chr(10) + "0.9" + Chr(10) + "31/12/2004" + Chr(10) + "12/31/2004")
AddGadgetItem(#ListIcon_0, -1, "ACDEF" + Chr(10) + "118" + Chr(10) + "1.9" + Chr(10) + "11/12/2004" + Chr(10) + "12/11/2004")
AddGadgetItem(#ListIcon_0, -1, "ZABCD" + Chr(10) + "-414" + Chr(10) + "7.0" + Chr(10) + "21/01/2003" + Chr(10) + "01/21/2003")
AddGadgetItem(#ListIcon_0, -1, "DEFGH" + Chr(10) + "524" + Chr(10) + "900" + Chr(10) + "10/06/2001" + Chr(10) + "06/10/2001")
EndIf
EndProcedure
;
Open_Window_0()
;
If PureLVSORT_SelectGadgetToSort(#ListIcon_0, #PureLVSORT_ShowClickedHeader_IconLeft) = #PureLVSORT_Ok
PureLVSORT_SetColumnType(#ListIcon_0, 0, #PureLVSORT_String) ; default, not necessary
PureLVSORT_SetColumnType(#ListIcon_0, 1, #PureLVSORT_Numeric)
PureLVSORT_SetColumnType(#ListIcon_0, 2, #PureLVSORT_Float)
PureLVSORT_SetColumnType(#ListIcon_0, 3, #PureLVSORT_DateDDMMYYYY)
PureLVSORT_SetColumnType(#ListIcon_0, 4, #PureLVSORT_DateMMDDYYYY)
PureLVSORT_SortListIconNow(#ListIcon_0, 3, 1)
PureLVSORT_DefineFilterCallback(@MyFilterCallback())
PureLVSORT_SetFilterTimeOut(100)
PureLVSORT_SetFilter(#ListIcon_0)
EndIf
;
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
and I have found that when I erase a previous FilterString entered by keyboard, the callback function receive a FilterString strange (look at "Debug FilterString "), that is not "" (empty).
Thats only occurs in W7! in WXPSP3 all runs fine.
Thanks for your help
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Fri Apr 23, 2010 11:33 am
by gnozal
QuimV wrote:
Hi,
I'm testing the Filter Callback Function (in windows 7 and PB 4.41) ... and I have found that when I erase a previous FilterString entered by keyboard, the callback function receive a FilterString strange (look at "Debug FilterString "), that is not "" (empty).
Thats only occurs in W7! in WXPSP3 all runs fine.
I don't have Se7en, so I can only imagine what's going wrong.
Anyway, I made a little change.
Could you test
http://freenet-homepage.de/gnozal/PureLVSORT_TEST.zip (
PB4.50 ANSI library version, copy to \PureBasic450\PureLibraries\UserLibraries\) ?
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Fri Apr 23, 2010 12:21 pm
by QuimV

Hi gnozal,
The behaviour continue being wrong. I mean that when I erase the string entered by the keyboard, the gadget callback function receive a string different from "" (void string), in fact the string received by the callback function is garbage.
Thanks
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Fri Apr 23, 2010 12:55 pm
by gnozal
QuimV wrote:
Hi gnozal,
The behaviour continue being wrong. I mean that when I erase the string entered by the keyboard, the gadget callback function receive a string different from "" (void string), in fact the string received by the callback function is garbage.
Ok another try : I have updated
http://freenet-homepage.de/gnozal/PureLVSORT_TEST.zip (PB4.50 ANSI library version, copy to \PureBasic450\PureLibraries\UserLibraries\).
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Fri Apr 23, 2010 1:21 pm
by QuimV

Nothing good. The same behaviour.
Thanks
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Fri Apr 23, 2010 1:33 pm
by gnozal
QuimV wrote:
Nothing good. The same behaviour.
Thanks
ye old code looks like this (ANSI PB4.xx version)
Code: Select all
...
ElseIf *pNMHdr\hdr\code = #HDN_FILTERCHANGE Or *pNMHdr\hdr\code = #HDN_FILTERBTNCLICK ; filter string changed
; hHDItem.HDITEM, TFilter.HDTEXTFILTER
TmpHeaderText = Space(#MAX_pszText + 1)
TFilter\pszText = @TmpHeaderText
TFilter\cchTextMax = #MAX_pszText
hHDItem\mask = #HDI_FILTER
hHDItem\type = #HDFT_ISSTRING
hHDItem\pvFilter = @TFilter
hHeader = SendMessage_(WindowId, #LVM_GETHEADER, 0, 0) ; <--- get header handle
If hHeader
SendMessage_(hHeader,#HDM_GETITEM,*pNMHdr\iItem,@hHDItem) ; <--- get filter text
If PureLVSORT_FilterCallBack
CallFunctionFast(PureLVSORT_FilterCallBack, GetDlgCtrlID_(WindowId), TFilter\pszText, *pNMHdr\iItem, *pNMHdr\hdr\code) ; passes info to the user callback
...
I don't know where the problem might be...
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Fri Apr 23, 2010 7:28 pm
by QuimV
Hi,
Would it be possible that you send a number to the callback filter function (TFilter\pszText) while the function should receive a string?
Code: Select all
Procedure MyFilterCallback(GadgetNumber.l, FilterString.s, ListIconColumn.l, EventCode.l)
TFilter\pszText = @TmpHeaderText
CallFunctionFast(PureLVSORT_FilterCallBack, GetDlgCtrlID_(WindowId), TFilter\pszText, *pNMHdr\iItem, *pNMHdr\hdr\code) ; passes info to the user callback
The problem always appears when the string is zero lenght an only in this case,

I'm sorry, I don't know enough programming to be more efective helping you.
Thanks
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Sat Apr 24, 2010 9:32 am
by gnozal
QuimV wrote:Would it be possible that you send a number to the callback filter function (TFilter\pszText) while the function should receive a string?
It is correct imho, it's a pointer to a zero terminated string.
But maybe it's an issue with CallFunctionFast() and Se7en.
I used a prototype instead in this new test lib :
http://freenet-homepage.de/gnozal/PureLVSORT_TEST.zip (PB4.50 ANSI library version, copy to \PureBasic450\PureLibraries\UserLibraries\). Please test.
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Sat Apr 24, 2010 2:27 pm
by QuimV

Same behaviour. Garbage instead nullstring.
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Sat Apr 24, 2010 3:30 pm
by QuimV
gnozal,
Would it be possible to insert a debug message showing the text filter, at the place marked witn an *** in order to control the text filter that your library has received?
ElseIf *pNMHdr\hdr\code = #HDN_FILTERCHANGE Or *pNMHdr\hdr\code = #HDN_FILTERBTNCLICK ; filter string changed
; hHDItem.HDITEM, TFilter.HDTEXTFILTER
TmpHeaderText = Space(#MAX_pszText + 1)
TFilter\pszText = @TmpHeaderText
TFilter\cchTextMax = #MAX_pszText
hHDItem\mask = #HDI_FILTER
hHDItem\type = #HDFT_ISSTRING
hHDItem\pvFilter = @TFilter
hHeader = SendMessage_(WindowId, #LVM_GETHEADER, 0, 0) ; <--- get header handle
If hHeader
SendMessage_(hHeader,#HDM_GETITEM,*pNMHdr\iItem,@hHDItem) ; <--- get filter text
***
If PureLVSORT_FilterCallBack
CallFunctionFast(PureLVSORT_FilterCallBack, GetDlgCtrlID_(WindowId), TFilter\pszText, *pNMHdr\iItem, *pNMHdr\hdr\code) ; passes info to the user callback
Thank You
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Sat Apr 24, 2010 5:41 pm
by QuimV
Hi gnozal,
Testing EditCallback function (with W7_32 and PB4.50) I get the next error messages:
- Constant not Found: Case #PureLVSORT_EditStart
- Constant not Found: Case #PureLVSORT_EditText
- Constant not Found: Case #PureLVSORT_EditEnd
- Constant not Found: Case #PureLVSORT_EditEscape
Could you fix it?
Thanks in advanced
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Mon Apr 26, 2010 10:55 am
by gnozal
Hi QuimV,
I have updated
http://freenet-homepage.de/gnozal/PureLVSORT_TEST.zip.
It includes a fixed resident (for the missing constants) and a new library version, which shows the text filter that the library has received as a warning.
Code: Select all
Import "Debugger.lib"
DebugWarning(szError.s) As "_PB_DEBUGGER_SendWarning@4"
EndImport
...
SendMessage_(hHeader,#HDM_GETITEM,*pNMHdr\iItem,@hHDItem)
FilterText = PeekS(TFilter\pszText)
;
DebugWarning("TFilter\pszText = '" + FilterText + "'")
;
If PureLVSORT_FilterCallBack
PureLVSORT_FilterCallBack(GetDlgCtrlID_(WindowId), FilterText, *pNMHdr\iItem, *pNMHdr\hdr\code)
...
You have to use this library only with debugger enabled and with warning level = 'Display warnings'.
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Mon Apr 26, 2010 12:22 pm
by QuimV
Hi @gnozal,
This is the debug output that I have received when I enter the string "DEFGH" and erase it letter by letter:
D
DE
DEF
DEFG
DEFGH
DEFG
DEF
DE
D
?/?/adgetStack_4194304
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Mon Apr 26, 2010 4:37 pm
by gnozal
QuimV wrote:...
?/?/adgetStack_4194304
Seems the memory is corrupted somehow, but I have no clue why.... the Purifier doesn't catch any problem.
Only with an empty string, and only with Se7en !?
Another try (I have updated
http://freenet-homepage.de/gnozal/PureLVSORT_TEST.zip) : I check the TFilter\pszText pointer with IsBadStringPtr_().
Re: PureLVSORT library : sorting ListIconGadgets (and more)
Posted: Tue Apr 27, 2010 8:38 am
by QuimV
This is the result in debug screen, with the word "test".
t
te
tes
test
tes
te
t
C