Pour parametrer chaque ligne je ne sais pas mais ta méthode avec un imagelist n'est pas la meilleure, sauf à avoir des images à afficher qui feront la taille des lignes.
Voici un code de sparkie (forum anglais) dont j'ai juste modifié la taille de la listicongadget et son mode que j'ai laissé en liste.
Le code utilise un callback, c'est la méthode à préférer pour faire ça si tu n'utilises pas d'images.
Fait varier la valeur 15 de la ligne *mis\itemHeight + 15 de la procedure myWindowCallback().
Ce code force le style #LVS_OWNERDRAWFIXED de la listicongadget d'ou la callback et dans cette callback, on fixe la taille des lignes une fois pour toute car ensuite ce style est retiré, donc c'est le sytème qui repaint la listicongadget, tu n'as pas à le faire.
Code : Tout sélectionner
; ;code de Sparkie; You're welcome P-J Smile
;
; P-J wrote:
; I'll make a point of scouring that code so I know exactly how it works, better to learn I reckon
;
;
; In order To change the row height, you need To receive the #WM_MEASUREITEM message. This is only sent when the ListIconGadget style has the #LVS_OWNERDRAWFIXED flag.
; Code:
; SetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE, GetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE) | #LVS_OWNERDRAWFIXED)
;
;
; Once you receive the #WM_MEASUREITEM message, you set the row height by adding your pixel count To the MEASUREITEMSTRUCT (*mis\itemHeight) member
; Code:
; *mis\itemHeight + 15
;
;
; You can now remove the #LVS_OWNERDRAWFIXED flag from the ListIconGadget, And let Windows Continue To do the drawing.
; Code:
; SetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE, GetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE) &~#LVS_OWNERDRAWFIXED)
#MyWindow = 0
#myListIcon = 0
Procedure myWindowCallback(hWnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_MEASUREITEM
If wParam = #myListIcon
*mis.MEASUREITEMSTRUCT = lParam
;--> We'll increase row height by 15 pixels
*mis\itemHeight + 15
Debug *mis\itemHeight
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(#MyWindow, 0, 0, 520,360,"ListIconGadget Set Row Height", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@myWindowCallback())
ListIconGadget(#myListIcon, 10, 10, 100, 100, "", 100, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines)
;--> Temporarily set ListIconGadget to #LVS_OWNERDRAWFIXED so we get the #WM_MEASUREITEM message
SetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE, GetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE) | #LVS_OWNERDRAWFIXED)
For i = 0 To 29
AddGadgetItem(#myListIcon, -1, "Item " + Str(i))
Next i
;--> Init #WM_MEASUREITEM with a resize
ResizeGadget(#myListIcon, 10, 10, WindowWidth(#MyWindow)-20, 340)
;--> Remove #LVS_OWNERDRAWFIXED
SetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE, GetWindowLong_(GadgetID(#myListIcon), #GWL_STYLE) &~#LVS_OWNERDRAWFIXED)
;--> Redraw items with our new row height
SendMessage_(GadgetID(#myListIcon), #LVM_REDRAWITEMS, 0, CountGadgetItems(0) -1 )
Repeat
event = WaitWindowEvent()
Select event
Case #PB_Event_CloseWindow
quit = #True
EndSelect
Until quit = #True
EndIf
End