Page 1 sur 2
PanelGadget() avec 1 image
Publié : sam. 12/juin/2004 20:49
par julien
salut,
Est ce que qq sait comment ajouter une image à une tab du gadget PanelGadget ?
Por ceux qui connaissent l'interface de Kaspersky 5, j'aurai voulu faire une interface de ce type....

Publié : sam. 12/juin/2004 20:57
par fweil
Je pense qu'il est permi de créer un imagegadget dont la position correspond à l'onglet ?
Publié : sam. 12/juin/2004 21:01
par Anonyme2
Je ne sais pas si c'est ce que tu souhaite mais voici un code de Freak posté sur le forum anglais
Le message du forum est ici
http://purebasic.myforums.net/viewtopic.php?t=5739
Code : Tout sélectionner
;===============================================================================
; Enable Images for a Panel Gadget
; It can be enabled for as many PanelGadgets as needed
; MaxItems is the maximum number of Items your PanelGadget will have.
; If this returns 0, no Images can be added to the Panel
Procedure EnablePanelImages(Gadget.l, MaxItems.l)
Protected hIml.l
hIml = ImageList_Create_(16, 16, #ILC_COLOR32|#ILC_MASK, MaxItems, MaxItems)
If hIml
SendMessage_(GadgetID(Gadget), #TCM_SETIMAGELIST, 0, hIml)
ProcedureReturn #TRUE
Else
ProcedureReturn #FALSE
EndIf
EndProcedure
; Add an Image to a Panel Item
; You can call this Function again for the same Item, to set a new Image.
Procedure SetPanelImage(Gadget.l, Position.l, ImageID.l)
Protected hIml.l, pitem.TC_ITEM
hIml = SendMessage_(GadgetID(Gadget), #TCM_GETIMAGELIST, 0,0)
pitem\imask = #TCIF_IMAGE
SendMessage_(GadgetID(Gadget), #TCM_GETITEM, Position, @pitem)
If pitem\iImage = 0
pitem\iImage = ImageList_AddIcon_(hIml, ImageID)
Else
pitem\iImage = ImageList_ReplaceIcon_(hIml, pitem\iImage, ImageID)
EndIf
SendMessage_(GadgetID(Gadget), #TCM_SETITEM, Position, @pitem)
EndProcedure
;===============================================================================
;- Code Example
;===============================================================================
; Load needed Icons (change the Path for your PB dir)
LoadImage(0, "C:\Program Files\PureBasic\Examples\Sources\Data\CdPlayer.ico")
LoadImage(1, "C:\Program Files\PureBasic\Examples\Sources\Data\NewProject.ico")
LoadImage(2, "C:\Program Files\PureBasic\Examples\Sources\Data\SaveProject.ico")
#Panel = 1
; Create Window
OpenWindow(0,0,0,300,300,#PB_Window_SystemMenu|#PB_Window_Screencentered, "Panel Images")
CreateGadgetList(WindowID())
; Create Panel
PanelGadget(#Panel, 20, 20, 260, 260)
AddGadgetItem(#Panel, 0, "Item0")
AddGadgetItem(#Panel, 1, "Item1")
AddGadgetItem(#Panel, 2, "Item2")
ClosePanelGadget()
; Enable Images for this Panel (only 3 Items)
If EnablePanelImages(#Panel, 3)
; Add the loaded Icons to the Panel Items
SetPanelImage(#Panel, 0, UseImage(0))
SetPanelImage(#Panel, 1, UseImage(1))
SetPanelImage(#Panel, 2, UseImage(2))
EndIf
; Wait for Quit
Repeat
Until WaitWindowEvent() = #PB_EventCloseWindow
End
;===============================================================================
Publié : sam. 12/juin/2004 23:16
par Le Soldat Inconnu
je le remet corrigé car c'est un code fait sur une vieille version de PB :
Code : Tout sélectionner
Procedure EnablePanelImages(Gadget.l, MaxItems.l, Size.l)
; Active la possibilité de mettre une image dans un PanelGadget
; Gadget : Numéro du PanelGadget
; MaxItems : Nombre d'onglet du PanelGadget
; Size : Taille des images ou icones que l'on souhaite insérer dans le PanelGadget
Protected hIml.l
hIml = ImageList_Create_(Size, Size, #ILC_COLOR32 | #ILC_MASK, MaxItems, MaxItems)
If hIml
SendMessage_(GadgetID(Gadget), #TCM_SETIMAGELIST, 0, hIml)
ProcedureReturn #True
Else
ProcedureReturn #False
EndIf
EndProcedure
Procedure SetPanelImage(Gadget.l, Position.l, ImageID.l)
; Associer une image à un onglet du PanelGadget
; Gadget : Numéro du PanelGadget
; Position : Numéro de l'onglet (commence à 0)
; ImageID : Handle de l'image
Protected hIml.l, pitem.TC_ITEM
hIml = SendMessage_(GadgetID(Gadget), #TCM_GETIMAGELIST, 0, 0)
pitem\mask = #TCIF_IMAGE
SendMessage_(GadgetID(Gadget), #TCM_GETITEM, Position, @pitem)
If pitem\iImage = 0
pitem\iImage = ImageList_AddIcon_(hIml, ImageID)
Else
pitem\iImage = ImageList_ReplaceIcon_(hIml, pitem\iImage, ImageID)
EndIf
SendMessage_(GadgetID(Gadget), #TCM_SETITEM, Position, @pitem)
EndProcedure
;- Exemple
; Chargement des images
LoadImage(0, "C:\Program Files\PureBasic\Examples\Sources\Data\CdPlayer.ico")
LoadImage(1, "C:\Program Files\PureBasic\Examples\Sources\Data\NewProject.ico")
LoadImage(2, "C:\Program Files\PureBasic\Examples\Sources\Data\SaveProject.ico")
#Panel = 1
OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Panel Images")
CreateGadgetList(WindowID())
; Création du PanelGadget
PanelGadget(#Panel, 20, 20, 260, 260)
AddGadgetItem(#Panel, 0, "Item0")
AddGadgetItem(#Panel, 1, "Item1")
AddGadgetItem(#Panel, 2, "Item2")
CloseGadgetList()
; On active le support des images pour le PanelGadget
If EnablePanelImages(#Panel, 3, 20)
; On met les images sur les onglets du PanelGadget
SetPanelImage(#Panel, 0, UseImage(0))
SetPanelImage(#Panel, 1, UseImage(1))
SetPanelImage(#Panel, 2, UseImage(2))
EndIf
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
Publié : dim. 13/juin/2004 6:33
par Anonyme2
Merci Régis,
j'ai pas essayé, j'ai fait une petite recherche sur le forum anglais avant de couler dans la doc SDK de MS...
Publié : dim. 13/juin/2004 15:01
par Le Soldat Inconnu
ben pas de quoi, je l'ai corrigé et traduit pour l'ajouter à ma biblio de code perso

Publié : dim. 13/juin/2004 16:49
par julien
merci

Publié : mer. 16/juin/2004 11:18
par Fred
La suggestion du jour
Code : Tout sélectionner
;- Exemple
; Chargement des images
LoadImage(0, "C:\Program Files\PureBasic\Examples\Sources\Data\CdPlayer.ico")
LoadImage(1, "C:\Program Files\PureBasic\Examples\Sources\Data\NewProject.ico")
LoadImage(2, "C:\Program Files\PureBasic\Examples\Sources\Data\SaveProject.ico")
#Panel = 1
OpenWindow(0, 0, 0, 300, 300, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Panel Images")
CreateGadgetList(WindowID())
; Création du PanelGadget
PanelGadget(#Panel, 20, 20, 260, 260)
AddGadgetItem(#Panel, 0, "Item0", UseImage(0))
AddGadgetItem(#Panel, 1, "Item1", UseImage(1))
AddGadgetItem(#Panel, 2, "Item2", UseImage(2))
CloseGadgetList()
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
Publié : mer. 16/juin/2004 11:37
par nico
C'est du tout bon ça

Publié : mer. 16/juin/2004 11:44
par julien
...

j'avais pas relu l'aide depuis et je pensai que c'était pas prévu à l'origine... merci Fred

Publié : mer. 16/juin/2004 12:12
par Anonyme2
Je l'ai déjà écrit ...
Pourquoi faire simple alors que l'on peut faire compliqué
Merci Fred de nous rappeler les fonctions de base que l'on oublie vite
Publié : mer. 16/juin/2004 15:46
par Le Soldat Inconnu
et pour changer la taille de l'image avec cette méthode, on fait comment ?
car ça affiche toujours en 16 * 16 alors que l'image du cd fait 32*32
Publié : mer. 16/juin/2004 17:36
par julien
Ah oui pas con... faudra améliorer ceci, merci encore !
Publié : sam. 06/mai/2006 8:22
par julien
je fait remonter le sujet, le code ne fonctionne plus avec la 3.94 et v4 beta 11
C'est cette ligne qui génère une erreur (multiple .data....)
pitem\iImage = ImageList_AddIcon_(hIml, ImageID)
Publié : sam. 06/mai/2006 11:13
par Ulix
Le code que Fred nous proposé est excellent !
C'est une possibilité que je ne connaissais pas.
Voilà un exemple d'utilisation qu'il faudrait inclure dans l'aide !
RegisLG où le Comtois voyez si c'est possible ? En tout cas je pense qu'une aide la plus démonstrative possible des capacités du PB est un plus et même indispensable pour valorisé le PB. Un tel exemple va dans ce sens.
Merci Fred
Au faite, Fred : A quand les icones dans les menus du PB, en natif bien sûr ?
Car là aussi c'est une façon de valorisé PB !