J'ai besoins de trier une listIcon, j'ai repris un code de CodeArchiv, qui marche tres bien avec la V3, mais qui ne marche plus avec la V4 !
Je cherche, je cherche mais je ne trouve pas pourquoi !
Alors si vous avez un autre code ou si quelqu'un sait corriger celui ci ....Et bien merci Beaucoup !

Code : Tout sélectionner
; English forum:
; Author:
; Date:
#LVM_SETEXTENDEDLISTVIEWSTYLE = #LVM_FIRST + 54
#LVM_GETEXTENDEDLISTVIEWSTYLE = #LVM_FIRST + 55
Global ListIconGadget.l, Buffer1.l, Buffer2.l, lvi.LV_ITEM, updown.l, lastcol.l
Buffer1 = AllocateMemory( 128)
Buffer2 = AllocateMemory( 128)
Procedure CompareFunc(item1, item2, lParamSort)
result = 0
lvi\iSubItem = lParamSort
lvi\pszText = Buffer1
lvi\cchTextMax = 128
lvi\mask = #LVIF_TEXT
SendMessage_(ListIconGadget, #LVM_GETITEMTEXT, item1, @lvi)
lvi\pszText = Buffer2
SendMessage_(ListIconGadget, #LVM_GETITEMTEXT, item2, @lvi)
Seeker1 = Buffer1
Seeker2 = Buffer2
done = 0
While done=0
char1 = Asc(UCase(Chr(PeekB(Seeker1))))
char2 = Asc(UCase(Chr(PeekB(Seeker2))))
result = (char1-char2)*updown
If result<>0 Or (Seeker1-Buffer1)>127
done = 1
EndIf
Seeker1+1
Seeker2+1
Wend
ProcedureReturn result
EndProcedure
Procedure UpdatelParam()
ItemCount = SendMessage_(ListIconGadget, #LVM_GETITEMCOUNT, 0, 0)
lvi\mask = #LVIF_PARAM
lvi\iItem = 0
While ItemCount>0
lvi\lParam = lvi\iItem
For SubItem = 0 To 3
lvi\iSubItem = SubItem
SendMessage_(ListIconGadget, #LVM_SETITEM, 0, @lvi)
Next SubItem
lvi\iItem = lvi\iItem+1
ItemCount = ItemCount-1
Wend
EndProcedure
Procedure ColumnClickCallback(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*msg.NMHDR = lParam
If *msg\hwndFrom = ListIconGadget And *msg\code = #LVN_COLUMNCLICK
*pnmv.NM_LISTVIEW = lParam
If lastcol<>*pnmv\iSubItem
updown = 1
EndIf
SendMessage_(ListIconGadget, #LVM_SORTITEMS, *pnmv\iSubItem, @CompareFunc())
UpdatelParam()
UpdateWindow_(ListIconGadget)
lastcol = *pnmv\iSubItem
updown = -updown
EndIf
Case #WM_SIZE
If hWnd = WindowID(0) And IsIconic_(hWnd)=0
WindowWidth = lParam & $FFFF
WindowHeight = lParam>>16
ResizeGadget(0, 0, 0, WindowWidth, WindowHeight)
result = 1
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 384, 288, 640, 480, "ListIconGadget sort example", #PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget)
LVWidth = WindowWidth(0)
LVCWidth = Int(LVWidth/4)-1
If CreateGadgetList(WindowID(0))
ListIconGadget = ListIconGadget(0, 0, 0, LVWidth, WindowHeight(0), "Column 0", LVCWidth, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
AddGadgetColumn(0, 1, "Column 1", LVCWidth)
AddGadgetColumn(0, 2, "Column 2", LVCWidth)
AddGadgetColumn(0, 3, "Column 3", LVCWidth)
EndIf
AddGadgetItem(0, 0, "Aaa 1"+Chr(10)+"Bcc 3"+Chr(10)+"Cdd 2"+Chr(10)+"Eee 3"+Chr(10), 0)
AddGadgetItem(0, 1, "Aab 2"+Chr(10)+"Bbc 2"+Chr(10)+"Ddd 3"+Chr(10)+"Dde 1"+Chr(10), 0)
AddGadgetItem(0, 2, "Abb 3"+Chr(10)+"Baa 1"+Chr(10)+"Ccd 1"+Chr(10)+"Dee 2"+Chr(10), 0)
updown = 1
lastcol = 0
UpdatelParam()
SetWindowCallback(@ColumnClickCallback())
Repeat
EventID = WaitWindowEvent()
Until EventID = #WM_CLOSE
EndIf
End