Page 1 sur 1

Modifier la taille des ligne d'une listicon ou listview

Publié : mer. 04/nov./2009 11:34
par kwandjeen
Bonjour !
Après plusieurs recherche j'arrive à modifier la taille de toutes les lignes mais j'aimerai modifier la taille de chaque ligne et je sèche :cry:

Le code pour modifier la listicon complète

Code : Tout sélectionner

 Procedure taille_ligne(gadget,taille)
   imagelist = ImageList_Create_(1, taille, #ILC_COLORDDB, 0, 0) 
   SendMessage_(GadgetID(gadget), #LVM_SETIMAGELIST, #LVSIL_SMALL,imagelist) 
   ImageList_Destroy_(imagelist)
 EndProcedure
 
 If OpenWindow(0, 100, 100, 500, 300, "ListIconGadget", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   ListIconGadget(0, 5, 5, 480, 280, "Nom", 100, #PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines)
   AddGadgetColumn(0, 1, "Adresse", 250)
   AddGadgetItem(0, -1, "Harry Rannit"+Chr(10)+"12 Parliament Way, Battle Street, By the Bay")
   AddGadgetItem(0, -1, "Ginger Brokeit"+Chr(10)+"130 PureBasic Road, BigTown, CodeCity")
AddKeyboardShortcut(0,#PB_Shortcut_A,123)
    taille_ligne(0,20)
   
   Repeat
     Evenement = WaitWindowEvent()
      Select EventMenu()
        Case 123
          taille_ligne(0,50)
      EndSelect
   Until Evenement = #PB_Event_CloseWindow
 EndIf
Si quelqu'un à un tuyau. J'essai de trouver un identifiant item pour le passer en paramètre mais je cherche encore 8O

J'espère que quelqu'un à une solution :lol:

EDIT : je cherche du côté de LVM_setitem

Re: Modifier la taille des ligne d'une listicon ou listview

Publié : mer. 04/nov./2009 14:19
par Anonyme2
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

Re: Modifier la taille des ligne d'une listicon ou listview

Publié : jeu. 05/nov./2009 11:36
par kwandjeen
Merci denis je vais regarder ça 8O