PanelGadget() avec 1 image

Sujets variés concernant le développement en PureBasic
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

PanelGadget() avec 1 image

Message 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.... :D
fweil
Messages : 505
Inscription : dim. 16/mai/2004 17:50
Localisation : Bayonne (64)
Contact :

Message par fweil »

Je pense qu'il est permi de créer un imagegadget dont la position correspond à l'onglet ?
Mon avatar reproduit l'image de 4x1.8m présentée au 'Salon international du meuble de Paris' en janvier 2004, dans l'exposition 'Shades' réunisant 22 créateurs autour de Matt Sindall. L'original est un stratifié en 150 dpi.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message 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 

;===============================================================================
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Merci Régis, :wink:

j'ai pas essayé, j'ai fait une petite recherche sur le forum anglais avant de couler dans la doc SDK de MS...
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ben pas de quoi, je l'ai corrigé et traduit pour l'ajouter à ma biblio de code perso ;)
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

merci :wink:
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message 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 
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est du tout bon ça :D
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

... :D j'avais pas relu l'aide depuis et je pensai que c'était pas prévu à l'origine... merci Fred :D
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Je l'ai déjà écrit ...


Pourquoi faire simple alors que l'on peut faire compliqué :D

Merci Fred de nous rappeler les fonctions de base que l'on oublie vite
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message 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
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

Ah oui pas con... faudra améliorer ceci, merci encore !
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message 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)
Avatar de l’utilisateur
Ulix
Messages : 315
Inscription : ven. 04/juin/2004 14:27
Localisation : Frontignan

Message 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 :!: :lol:

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 !
Répondre