En général, pour tous les gadgets, il faudrait disposer de moyens pour récupérer l’ensemble des caractéristiques qu’il est permis de spécifier :
Deux exemples, pour une ListIconGadget :
- Il est possible de spécifier l’état de la Checkbox d’un élément ET il est possible de récupérer cet état
- Il est possible de spécifier l’image d’un élément MAIS il n’est pas possible de récupérer cette valeur (#Image)
Accéder à l'ensemble des caractéristiques d'un Gadget
oui c'est vrai. je soutiens cette demande.
autre example,
avec le Panel/ListIcon/TreeGadget, on peut spécifier une icone.
mais on ne peut ni récupérer le pointeur sur l'image ni changer l'icone dynamiquement.
Set/GetGadgetAttribute() et Set/GetGadgetItemAttribute() devraient être beaucoup plus exploités !
D'ailleurs, je propose que tout ceux qui ont des idées aux sujet de ces 4 commandes le partage ici (sous réserve que Fred puissent implémenter ces options sur tous les OS).
#PB_ListIcon_ShowHeader ; montrer/cacher l'entete
#PB_ListIcon_Icon ; définir/récupérer l'icone d'une ligne
#PB_Tree_Icon
#PB_Panel_Icon
autre example,
avec le Panel/ListIcon/TreeGadget, on peut spécifier une icone.
mais on ne peut ni récupérer le pointeur sur l'image ni changer l'icone dynamiquement.
Set/GetGadgetAttribute() et Set/GetGadgetItemAttribute() devraient être beaucoup plus exploités !
D'ailleurs, je propose que tout ceux qui ont des idées aux sujet de ces 4 commandes le partage ici (sous réserve que Fred puissent implémenter ces options sur tous les OS).
#PB_ListIcon_ShowHeader ; montrer/cacher l'entete
#PB_ListIcon_Icon ; définir/récupérer l'icone d'une ligne
#PB_Tree_Icon
#PB_Panel_Icon
Toujours disposé à bénéficier d’autant de fonctionnalité Get qu’il y a de fonctionnalité Set, je dois avouer qu’il ne peut y avoir toujours stricte équivalence.
Ainsi, en cherchant le moyen de récupérer l’image d’un élément d’un ListIconGadget, j’ai constaté qu’il n’etait pas évident que cette fonction retourne le #image qui a servit lors de la création.
C’est d’ailleurs normal, car il est légitime de vouloir aussi récupérer une image d’un ListIconGadget que l’on n’a pas construit.
Donc un pointeur sur image dans ce cas est une possibilité.
Pour ma part, voici ma solution actuelle :
Pour un ListIconGadget donné #Gadget, la fonction GetListIconItemImage() retourne un identifiant PB de l’image associée à l’élément Item, après l'avoir reconstituée.
On peut modifier le code pour imposer l'identifiant de l'image, mais je ne vois pas de solution à base de pointeur...
Ainsi, en cherchant le moyen de récupérer l’image d’un élément d’un ListIconGadget, j’ai constaté qu’il n’etait pas évident que cette fonction retourne le #image qui a servit lors de la création.
C’est d’ailleurs normal, car il est légitime de vouloir aussi récupérer une image d’un ListIconGadget que l’on n’a pas construit.
Donc un pointeur sur image dans ce cas est une possibilité.
Pour ma part, voici ma solution actuelle :
Code : Tout sélectionner
Procedure.l GetListIconItemImage(Gadget.l, Item.l)
lv.LVITEM\mask = #LVIF_IMAGE
lv\iItem = item
If SendMessage_(GadgetID(Gadget), #LVM_GETITEM, 0, @lv.LVITEM); on récuppère les info sur l'élément du ListIconGadget à traiter
Hwnd_ListSmall = SendMessage_(GadgetID(Gadget), #LVM_GETIMAGELIST, #LVSIL_SMALL, 0); on récuppère la liste des images du ListIconGadget
If Hwnd_ListSmall
ImageList_GetImageInfo_(Hwnd_ListSmall, 0, @pImageInfo.IMAGEINFO); on récupère les info d'une image de la liste (ici la premiere)
Image=CreateImage (#PB_Any, pImageInfo\rcImage\right, pImageInfo\rcImage\bottom); pour en connaitre les dimensions et crée notre image
hDC=StartDrawing (ImageOutput (Image))
ImageList_Draw_(Hwnd_ListSmall,lv\iImage,hDC,0, 0,#ILD_TRANSPARENT); on dessine l'image demandée
StopDrawing ()
EndIf
EndIf
ProcedureReturn Image; on retourne l'image
EndProcedure
On peut modifier le code pour imposer l'identifiant de l'image, mais je ne vois pas de solution à base de pointeur...
je me suis écrit quelques fonctions il y a quelques mois et j'ai procédé autrement pour récupérer les infos de l'imagelist
Je tiens une liste chaînée à jour avec les éléments voulus :
Par exemple pour le header
J'ai une fonction Setimage qui affiche l'image voulue. Cette fonction va scruter la liste chainée et si l'image passée en paramètre existe dans la liste chaînée (pour n'importe quel élément , que l'image soit le handle ou l'ID static) , on connait son index dans la listImage du système, on peut soit ajouter un nouvel élément à la liste ou modifier celui qui existe.
C'est très rapide, on peut stoker plusieurs Header de plusieurs Listicon, ca va très vite.
J'ai écrit plusieurs fonctions (RemoveHeaderImage(Gadget.l, Colonne.l) etc
Je pense mettre ces commandes dans la prochaine version de ma lib mais je bosse pas trop en ce moment (fait soif
)
Je tiens une liste chaînée à jour avec les éléments voulus :
Par exemple pour le header
Code : Tout sélectionner
Structure HeaderImage
HeaderID.l
ListImageAdresse.l
HwndImage.l ; handle image ajouté à la liste
IndexImage.l ; index de l'image ajouté correspondant à HwndImage
EndStructure
C'est très rapide, on peut stoker plusieurs Header de plusieurs Listicon, ca va très vite.
J'ai écrit plusieurs fonctions (RemoveHeaderImage(Gadget.l, Colonne.l) etc
Je pense mettre ces commandes dans la prochaine version de ma lib mais je bosse pas trop en ce moment (fait soif
