TreeGadget - Ajouter une image devant l'icône
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Merci Senior Nico !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Pour ce code on ne peut pas utiliser la constante #PB_Tree_CheckBoxes pour le Tree.
Si il y a des chose que tu veux que je t'explique, dis le moi!
Avant de lancer le code, changer le chemin des icones.
Si il y a des chose que tu veux que je t'explique, dis le moi!
Avant de lancer le code, changer le chemin des icones.
Code : Tout sélectionner
Structure TVITEMEX
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
iIntegral.l
EndStructure
Global himl,himl_origine,himl2,himl_origine2
Procedure Creation_Imagelist_Icon(ID_Gadget.l)
himl=ImageList_Create_(16, 16 , #ILC_COLOR24| #ILC_MASK,0, 0)
himl_origine = SendMessage_(GadgetID(ID_Gadget.l),#TVM_GETIMAGELIST,#TVSIL_NORMAL,0)
SendMessage_(GadgetID(ID_Gadget.l),#TVM_SETIMAGELIST,#TVSIL_NORMAL,himl)
LoadImage(0, "c:\Icon.ico")
LoadImage(1, "c:\Icon2.ico")
LoadImage(2, "c:\Icon3.ico")
For Index=0 To 2
geticoninfo_(UseImage(Index), @ICONINFO.ICONINFO)
ImageList_Add_(himl,ICONINFO\hbmColor,ICONINFO\hbmMask)
FreeImage(Index)
Next
EndProcedure
Procedure Creation_Imagelist_Image(ID_Gadget.l)
himl2=ImageList_Create_(64, 12 , #ILC_COLOR24,0, 0)
himl_origine2 = SendMessage_(GadgetID(ID_Gadget.l),#TVM_GETIMAGELIST,#TVSIL_STATE,0)
SendMessage_(GadgetID(ID_Gadget.l),#TVM_SETIMAGELIST,#TVSIL_STATE,himl2)
For Image=0 To 8
Index=CreateImage(#PB_Any,64,12)
If Index
StartDrawing(ImageOutput())
Box(0,0,64,12,RGB(255,0,0))
Box(0,0,x,12,RGB(0,0,255))
StopDrawing()
EndIf
ImageList_Add_(himl2,UseImage(Index),0)
If Image=0
;cette image ne servira pas
ImageList_Add_(himl2,UseImage(Index),0)
EndIf
FreeImage(Index)
x=x+64/8
Next Image
EndProcedure
Procedure Attach_Icon(ID_Gadget.l,Index_Item.l,Index_Icon.b)
hItem=GadgetItemID(ID_Gadget,Index_Item)
LPTVITEMEX.TVITEMEX
LPTVITEMEX\mask=#TVIF_IMAGE|#TVIF_SELECTEDIMAGE|#TVIF_HANDLE
LPTVITEMEX\hItem=hItem
LPTVITEMEX\iImage=Index_Icon
LPTVITEMEX\iSelectedImage=Index_Icon
lResult = SendMessage_(GadgetID(ID_Gadget),#TVM_SETITEM,0,LPTVITEMEX)
EndProcedure
Procedure Attach_Image(ID_Gadget.l,Index_Item.l,Index_Image.b)
hItem=GadgetItemID(ID_Gadget,Index_Item)
LPTVITEMEX.TVITEMEX
LPTVITEMEX\mask=#TVIF_HANDLE|#TVIF_STATE
LPTVITEMEX\hItem=hItem
LPTVITEMEX\stateMask=#TVIS_STATEIMAGEMASK
LPTVITEMEX\state=Index_Image<<12
lResult = SendMessage_(GadgetID(ID_Gadget),#TVM_SETITEM,0,LPTVITEMEX)
EndProcedure
If OpenWindow(0,0,0,370,180,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"TreeGadget") And CreateGadgetList(WindowID(0))
TreeGadget(0, 10,10,300,160)
AddGadgetItem (0, -1, "Normal Item")
AddGadgetItem (0, -1, "Node")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "Sub-Item 1")
AddGadgetItem(0, -1, "Sub-Item 2")
AddGadgetItem(0, -1, "Sub-Item 3")
AddGadgetItem(0, -1, "Sub-Item 4")
CloseTreeGadgetNode(0)
AddGadgetItem (0, -1, "File")
AddGadgetItem (0, -1, "File")
Creation_Imagelist_Image(0)
;l'index_icon doit commencer à 1
;un 0 signifie qu'il n'y a plus d'image associée
Attach_Image(0,0,4)
Attach_Image(0,1,4)
Attach_Image(0,2,6)
Creation_Imagelist_Icon(0)
;Par défaut tous les items auront l'icone d'index 0
Attach_Icon(0,0,0)
Attach_Icon(0,1,1)
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
ImageList_Destroy_(himl)
ImageList_Destroy_(himl2)
Dernière modification par nico le mer. 14/déc./2005 0:33, modifié 1 fois.
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Il y a pas un bug ?
Si tu changes le dernier paramètre, rien ne se passe !
Comment afficher des images différentes ?
Si tu changes le dernier paramètre, rien ne se passe !
Code : Tout sélectionner
Attach_Image(0,1,4)
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Je l'ai modifié et grace à toi, jai compris :
En fait, c'est comme le rtf, pour les couleurs, on gère une liste d'image, et on choisit via un nombre laquelle afficher, pareil pour les icones !
Me suis je trompé ?
En fait, c'est comme le rtf, pour les couleurs, on gère une liste d'image, et on choisit via un nombre laquelle afficher, pareil pour les icones !
Me suis je trompé ?
Code : Tout sélectionner
Structure TVITEMEX
mask.l
hItem.l
state.l
stateMask.l
pszText.l
cchTextMax.l
iImage.l
iSelectedImage.l
cChildren.l
lParam.l
iIntegral.l
EndStructure
Global himl,himl_origine,himl2,himl_origine2
Procedure Creation_Imagelist_Icon(ID_Gadget.l)
himl=ImageList_Create_(16, 16 , #ILC_COLOR24| #ILC_MASK,0, 0)
himl_origine = SendMessage_(GadgetID(ID_Gadget.l),#TVM_GETIMAGELIST,#TVSIL_NORMAL,0)
SendMessage_(GadgetID(ID_Gadget.l),#TVM_SETIMAGELIST,#TVSIL_NORMAL,himl)
LoadImage(0, "prime0.ico")
LoadImage(1, "prime1.ico")
LoadImage(2, "prime2.ico")
For Index=0 To 2
geticoninfo_(UseImage(Index), @ICONINFO.ICONINFO)
ImageList_Add_(himl,ICONINFO\hbmColor,ICONINFO\hbmMask)
FreeImage(Index)
Next
EndProcedure
Procedure Creation_Imagelist_Image(ID_Gadget.l)
himl2=ImageList_Create_(64, 12 , #ILC_COLOR24,0, 0)
himl_origine2 = SendMessage_(GadgetID(ID_Gadget.l),#TVM_GETIMAGELIST,#TVSIL_STATE,0)
SendMessage_(GadgetID(ID_Gadget.l),#TVM_SETIMAGELIST,#TVSIL_STATE,himl2)
For Image=0 To 10
Index=CreateImage(#PB_Any,64,12)
If Index
StartDrawing(ImageOutput())
Box(0,0,64,12,RGB(255,0,0))
Box(0,0,Image*10,12,RGB(0,0,255))
StopDrawing()
EndIf
ImageList_Add_(himl2,UseImage(Index),0)
If Image=0
;cette image ne servira pas
ImageList_Add_(himl2,UseImage(Index),0)
EndIf
FreeImage(Index)
x=x+64/8
Next Image
EndProcedure
Procedure Attach_Icon(ID_Gadget.l,Index_Item.l,Index_Icon.b)
hItem=GadgetItemID(ID_Gadget,Index_Item)
LPTVITEMEX.TVITEMEX
LPTVITEMEX\mask=#TVIF_IMAGE|#TVIF_SELECTEDIMAGE|#TVIF_HANDLE
LPTVITEMEX\hItem=hItem
LPTVITEMEX\iImage=Index_Icon
LPTVITEMEX\iSelectedImage=Index_Icon
lResult = SendMessage_(GadgetID(ID_Gadget),#TVM_SETITEM,0,LPTVITEMEX)
EndProcedure
Procedure Attach_Image(ID_Gadget.l,Index_Item.l,Index_Image.b)
hItem=GadgetItemID(ID_Gadget,Index_Item)
LPTVITEMEX.TVITEMEX
LPTVITEMEX\mask=#TVIF_HANDLE|#TVIF_STATE
LPTVITEMEX\hItem=hItem
LPTVITEMEX\stateMask=#TVIS_STATEIMAGEMASK
LPTVITEMEX\state=Index_Image<<12
lResult = SendMessage_(GadgetID(ID_Gadget),#TVM_SETITEM,0,LPTVITEMEX)
EndProcedure
If OpenWindow(0,0,0,370,180,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"TreeGadget") And CreateGadgetList(WindowID(0))
TreeGadget(0, 10,10,300,160)
AddGadgetItem (0, -1, "Normal Item")
AddGadgetItem (0, -1, "Node")
OpenTreeGadgetNode(0)
AddGadgetItem(0, -1, "Sub-Item 1")
AddGadgetItem(0, -1, "Sub-Item 2")
AddGadgetItem(0, -1, "Sub-Item 3")
AddGadgetItem(0, -1, "Sub-Item 4")
CloseTreeGadgetNode(0)
AddGadgetItem (0, -1, "File")
AddGadgetItem (0, -1, "File")
Creation_Imagelist_Image(0)
;l'index_Image doit commencer à 1
;un 0 signifie qu'il n'y a plus d'image associée
Attach_Image(0,0,2)
Attach_Image(0,1,4)
Attach_Image(0,2,6)
Creation_Imagelist_Icon(0)
;Par défaut tous les items auront l'icone d'index 0
Attach_Icon(0,0,0)
Attach_Icon(0,1,1)
Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
EndIf
ImageList_Destroy_(himl)
ImageList_Destroy_(himl2)
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
Oui c'est ça!
Les treeviews ont deux listes d'images:
La première sert pour afficher l'icone pour l'item dans son état normal ou dans son état sélectionné (elles peuvent être différentes en choisissant un index unique pour chaque item)
Cette liste sert aussi à gérer des icones de recouvrement qui se superpose à l'icone affichée! (pas utile dans notre cas)
La deuxième liste d'images sert à afficher une image où icone à coté du premier qui correspondra à son icone d'état. Typiquement elle sert à afficher un checkbox mais on peut s'en servir pour afficher une icone de son choix. On peut définir au maximum 15 icones dans cette liste (4 bits servent à déterminer son index d'où le décalage (<<12), l'index 0 bien qu'ayant une image ne sera pas affichée, si on l'utilise cette valeur l'image associée précédente disparait), j'en ai créé 8 dans l'exemple.
Les treeviews ont deux listes d'images:
Code : Tout sélectionner
SendMessage_(GadgetID(ID_Gadget.l),#TVM_SETIMAGELIST,#TVSIL_NORMAL,himl)
Cette liste sert aussi à gérer des icones de recouvrement qui se superpose à l'icone affichée! (pas utile dans notre cas)
Code : Tout sélectionner
SendMessage_(GadgetID(ID_Gadget.l),#TVM_SETIMAGELIST,#TVSIL_STATE,himl2)
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Ok ! On ne peut définir que 15 images ? pas plus ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Donc si on assigne 5 bits à l'index, 63 icones maisNico a écrit : On peut définir au maximum 15 icones dans cette liste (4 bits servent à déterminer son index d'où le décalage (<<12),
comment calcules tu le décalage ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Aprés test,
si on assigne 15 à une image, cela fonctionne
sinon on recommence à 0 !
Ainsi 16=0
17=1
etc...
Il est pas possible de créer deux lists d'images pour un meme gadget ?
si on assigne 15 à une image, cela fonctionne
sinon on recommence à 0 !
Ainsi 16=0
17=1
etc...
Il est pas possible de créer deux lists d'images pour un meme gadget ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net