Changer la taille des icone

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Changer la taille des icone

Message par microdevweb »

Bonjour,
Je ne suis pas super fort avec les appis. J'aimerais savoir comment changer la taille des icones d'un TreeGadget, et à tant qu'à faire également les icones d'une ToolBar.

Si Dob..... eu Spock passe par la :wink: , je sais qu'il excel dans ce domaine

Merci
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer la taille des icone

Message par falsam »

La méthode guimauve pour un ToolBar avec ToolBarImageButton.
http://www.purebasic.fr/english/viewtop ... 04#p148304
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Changer la taille des icone

Message par microdevweb »

Merci Falsam,

Une idée pour les icones du TreeGadget ?
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer la taille des icone

Message par falsam »

microdevweb a écrit :Une idée pour les icones du TreeGadget ?
Le temps de te concocter un code ...
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer la taille des icone

Message par falsam »

Changer la taille des icones (et des noeuds) d'un treeview (Windows Only)

Code : Tout sélectionner

Enumeration
  #MainForm
  #Tree
EndEnumeration


;Petite police pour faire jolie mais pas obligatoire 
If LoadFont(1, "Arial", 15)
  SetGadgetFont(#PB_Default, FontID(1))
EndIf


If OpenWindow(#MainForm, 0, 0, 700, 500, "TreeGadget Large icon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)  

  TreeGadget(#Tree, 10, 10, 680, 480)
  
  ;N'ayant pas le temps de faire quelques icones, je prends quelques icone de l'OS
  If OSVersion() > #PB_OS_Windows_2000 
    OpenLibrary(0, "uxtheme.dll") 
    
    ;Eventuellement on peut commenter ces deux lignes. A vous de voir
    ;commentez pour voir la différence
    CallFunction(0, "SetWindowTheme", GadgetID(#Tree), @" ", @" ") 
    SetThemeAppProperties_(1) 
    
    CloseLibrary(0) 
  EndIf 
  
  ;Taille des icones 
  IconSize = 32
  
  ;
  ImageList = ImageList_Create_(IconSize, IconSize, #ILC_COLOR32 | #ILC_MASK, 0, 10)
  
  ; Quelques icones de test extraites de shell32.dll
  ico0 = ExtractIcon_(0, "shell32.dll", 43) ;Etoile
  ico1 = ExtractIcon_(0, "shell32.dll", 44) ;Clé
  ico2 = ExtractIcon_(0, "shell32.dll", 45) ;Dossier
  ico3 = ExtractIcon_(0, "shell32.dll", 47) ;Cadenas
  ico4 = ExtractIcon_(0, "shell32.dll", 23) ;Point d'interogation
  
  ;AJoute des icone dans la liste d'icone
  ImageList_AddIcon_(ImageList, ico0)
  ImageList_AddIcon_(ImageList, ico1)
  ImageList_AddIcon_(ImageList, ico2)
  ImageList_AddIcon_(ImageList, ico3)
  ImageList_AddIcon_(ImageList, ico4)
    
  
  ;Création du tree-view 
  AddGadgetItem(#Tree, - 1, "Icon 43 ", ico0, 0)
  AddGadgetItem(#Tree, - 1, "Icon 44 ", ico1, 0)
  AddGadgetItem(#Tree, - 1, "Icon 45 ", ico2, 0)
  AddGadgetItem(#Tree, - 1, "Icon 47 ", ico3, 0)
  
  AddGadgetItem(#Tree, - 1, "Icon 23 ", ico4, 1)
  
  
  ;Et destruction (Pas sur que ce soit nécessaire) 
  DestroyIcon_(ico0)
  DestroyIcon_(ico1)
  DestroyIcon_(ico2)
  DestroyIcon_(ico3)
  DestroyIcon_(ico4)
    
  ;Le tour de magie
  SendMessage_(GadgetID(#Tree), #TVM_SETIMAGELIST, #TVSIL_NORMAL, ImageList)
    
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  
  ;Destruction de la liste d'images  (la aussi pas certain que ce soit nécessaire)
  ImageList_Destroy_(ImageList) 
  
EndIf
Testé sous Windows 8
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Changer la taille des icone

Message par microdevweb »

Un tout grand merci Falsam,

Je teste dans mon aplli et je dis si cela fonctionne
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer la taille des icone

Message par falsam »

Un autre code pour ta ToolBar

Code : Tout sélectionner

Enumeration
  #MainForm
  #ToolBar
EndEnumeration

If OpenWindow(#MainForm, 0, 0, 500, 250, "Toolbar Personnalisé", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  
  ;Taille des icones 
  IconSize = 32
  
  ;Quelques images 
  ico0 = ExtractIcon_(0, "shell32.dll", 43) ;Etoile
  ico1 = ExtractIcon_(0, "shell32.dll", 44) ;Clé
  ico2 = ExtractIcon_(0, "shell32.dll", 45) ;Dossier
  ico3 = ExtractIcon_(0, "shell32.dll", 47) ;Cadenas
  ico4 = ExtractIcon_(0, "shell32.dll", 23) ;Point d'interogation
    
  If CreateToolBar(#ToolBar, WindowID(#MainForm))
    
    ;Récupération de la liste des images composant le toolbar
    ;https://msdn.microsoft.com/en-us/library/windows/desktop/bb787337(v=vs.85).aspx
    ImageList = SendMessage_(ToolBarID(#ToolBar), #TB_GETIMAGELIST,0,0)
    
    ;Nouvelle taille 
    ImageList_SetIconSize_(ImageList, IconSize, IconSize)
    
    ;Envoie de la liste d'images au toolbar
    SendMessage_(ToolBarID(#ToolBar), #TB_SETIMAGELIST, 0, ImageList)
    
    ;Auto Resize du Tool Bar
    SendMessage_(ToolBarID(#ToolBar),#TB_AUTOSIZE, 0, 0)
    
    ;Ajout des boutons 
    ToolBarImageButton(1, ico0)
    ToolBarImageButton(2, ico1)
    ToolBarImageButton(3, ico2)
    ToolBarImageButton(4, ico3)
    ToolBarImageButton(5, ico4)
    
  EndIf
  
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: Changer la taille des icone

Message par Micheao »

Merci Falsam du partage
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Changer la taille des icone

Message par microdevweb »

Dans le cas de mon appli, cela ne fonctionne pas, j'utilise des png et des ico.
si je modifie ton code comme ceci, je n'ai que l'icone stop sur le premier noeud :?:

Code : Tout sélectionner

Enumeration
  #MainForm
  #Tree
EndEnumeration

UsePNGImageDecoder()
;Petite police pour faire jolie mais pas obligatoire
If LoadFont(1, "Arial", 15)
  SetGadgetFont(#PB_Default, FontID(1))
EndIf


If OpenWindow(#MainForm, 0, 0, 700, 500, "TreeGadget Large icon", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) 

  TreeGadget(#Tree, 10, 10, 680, 480)
 
  ;N'ayant pas le temps de faire quelques icones, je prends quelques icone de l'OS
  If OSVersion() > #PB_OS_Windows_2000
    OpenLibrary(0, "uxtheme.dll")
   
    ;Eventuellement on peut commenter ces deux lignes. A vous de voir
    ;commentez pour voir la différence
    CallFunction(0, "SetWindowTheme", GadgetID(#Tree), @" ", @" ")
    SetThemeAppProperties_(1)
   
    CloseLibrary(0)
  EndIf
 
  ;Taille des icones
  IconSize = 32
 
  ;
  ImageList = ImageList_Create_(IconSize, IconSize, #ILC_COLOR32 | #ILC_MASK, 0, 10)
 
  ; Create a blank NULL image for the list
  ImageList_ReplaceIcon_(NewImageList, - 1, ExtractIcon_(0, "Shell32.dll", 0))
 
 
  ; Quelques icones de test extraites de shell32.dll
;   ico0 = ExtractIcon_(0, "shell32.dll", 43) ;Etoile
;   ico1 = ExtractIcon_(0, "shell32.dll", 44) ;Clé
;   ico2 = ExtractIcon_(0, "shell32.dll", 45) ;Dossier
;   ico3 = ExtractIcon_(0, "shell32.dll", 47) ;Cadenas
;   ico4 = ExtractIcon_(0, "shell32.dll", 23) ;Point d'interogation
  LoadImage(0,"mathIco.ico")
  LoadImage(1,"stop.ico")
  ;AJoute des icone dans la liste d'icone
  ImageList_AddIcon_(ImageList, ImageID(0))
  ImageList_AddIcon_(ImageList, ImageID(1))
;   ImageList_AddIcon_(ImageList, ico1)
;   ImageList_AddIcon_(ImageList, ico3)
;   ImageList_AddIcon_(ImageList, ico1)
   
 
  ;Création du tree-view
  AddGadgetItem(#Tree, - 1, "Icon 43 ",ImageID(0), 0)
  AddGadgetItem(#Tree, - 1, "Icon 44 ", ImageID(1), 0)
;   AddGadgetItem(#Tree, - 1, "Icon 45 ", ico2, 0)
;   AddGadgetItem(#Tree, - 1, "Icon 47 ", ico3, 0)
;   AddGadgetItem(#Tree, - 1, "Icon 23 ", ico4, 1)
;  
 
  ;Et destruction (Pas sur que ce soit nécessaire)
  DestroyIcon_(ImageID(0))
  DestroyIcon_(ImageID(1))
;   DestroyIcon_(ico2)
;   DestroyIcon_(ico3)
;   DestroyIcon_(ico4)
   
  ;Le tour de magie
  SendMessage_(GadgetID(#Tree), #TVM_SETIMAGELIST, #TVSIL_NORMAL, ImageList)
   
  Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
 
  ;Destruction de la liste d'images  (la aussi pas certain que ce soit nécessaire)
  ImageList_Destroy_(ImageList)
 
EndIf
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Changer la taille des icone

Message par blendman »

L'autre solution (que j'utilise souvent) c'est de créer toi-même ta toolbar, avec un module par exemple, histoire de pouvoir le réutiliser dans d'autres codes.

Tu crées un container et dedans tu y places les gadgets que tu veux : bouton, image, combobox, checkbox... Bien plus intéressant qu'une simple toolbar ;).

.
En utilisant tes icones/png, tu peux changer la taille comme tu veux, il suffit de changer le paramètre hh (taille de la toolbar, mais aussi des boutons et autre gadgets internes à la toolbar.
Un petit exemple rapide :

Code : Tout sélectionner


DeclareModule ToolBarCustom
    
    Declare CreateToolBarCustom(toolbarid, windowid)    
    
EndDeclareModule

Module ToolBarCustom
  
  Procedure CreateToolBarCustom(toolbarid, windowid)
  
  w = WindowWidth(windowid)
  hh = 25
  If ContainerGadget(toolbarid,-2,0,w+4,hh+5,#PB_Container_Flat)
    xx = 5
    yy =2
    x1 = 2
    If ButtonGadget(1,xx,yy,40,hh,"Bouton") : xx + GadgetWidth(1)+x1 : EndIf
    If CreateImage(0, 20,20)
      If StartDrawing(ImageOutput(0))
        Circle(10,10,8,#Red)
        StopDrawing()
      EndIf
      If ButtonImageGadget(2,xx,yy,hh,hh,ImageID(0)) 
        xx + GadgetWidth(2)+x1
      EndIf
      If ButtonImageGadget(3,xx,yy,hh,hh,ImageID(0)) 
        xx + GadgetWidth(3)+x1
      EndIf
      If ButtonImageGadget(4,xx,yy,hh,hh,ImageID(0)) 
        xx + GadgetWidth(4)+x1
      EndIf
    EndIf 
    If ComboBoxGadget(10,xx, yy,50,hh)
      AddGadgetItem(10, 0, "Jeux")
      AddGadgetItem(10, 1, "Vidéo")
      AddGadgetItem(10, 2, "Slip")
    EndIf
    
    
    CloseGadgetList()
  EndIf
EndProcedure

EndModule

w = 1024
h= 768
OpenWindow(0, 0, 0, w, h, "Toolbar customized", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

ToolBarCustom::CreateToolBarCustom(0,0)
UseModule ToolBarCustom

CreateToolBarCustom(0,0)

Repeat
  Event = WaitWindowEvent()
  
  
Until Event = #PB_Event_CloseWindow
Bon, là, j'ai fait un truc simple, après il faudrait créer des procédures genre AddButonTB(), AddComboboxTB(), etc...
ce serait plus mieux :mrgreen:

Mais tu vois l'idée.
Avatar de l’utilisateur
falsam
Messages : 7317
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Changer la taille des icone

Message par falsam »

+ 1 avec Blendman : Pour un bon ToolBar rien ne vaut un Tool Bar sur mesure. Il y a que ça de vrai (Ton mère denis)
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
blendman
Messages : 2017
Inscription : sam. 19/févr./2011 12:46

Re: Changer la taille des icone

Message par blendman »

en plus, un toolbar perso sera plus facilement multiplateforme ^^
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Changer la taille des icone

Message par microdevweb »

@Blendman,

Oui je penses que cela reste une bonne solution.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Changer la taille des icone

Message par Mesa »

Multiples Toolbars pour windows.

Code : Tout sélectionner


If OpenWindow(0, 0, 0, 400, 400, "Exemple...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  IconWidth=32
  IconHeight=32
  ButtonIconWidth=32
  ButtonIconHeight=32
  ButtonIconMargin=2*6
  
  If CreateImage(0,IconWidth,IconHeight)
    StartDrawing(ImageOutput(0))
    Box(0,0,IconWidth,IconHeight,RGB(255,255,255))
    Box(4,4,IconWidth-8, IconHeight-8,RGB(255,0,0))
    StopDrawing();<
  EndIf
  
  If CreateMenu(0, WindowID(0)) 
    MenuTitle("Fichier") 
    MenuItem(1, "Ouvrir"   +Chr(9)+"Ctrl+O")
    MenuItem(2, "Sauvegarder"   +Chr(9)+"Ctrl+S")
    MenuBar() 
    MenuItem(4, "Quit"  +Chr(9)+"Alt+F4")
    
  EndIf 
  ico0 = ExtractIcon_(0, "shell32.dll", 43) ;Etoile
  ico1 = ExtractIcon_(0, "shell32.dll", 44) ;Clé
  ico2 = ExtractIcon_(0, "shell32.dll", 45) ;Dossier
  ico3 = ExtractIcon_(0, "shell32.dll", 47) ;Cadenas
  ico4 = ExtractIcon_(0, "shell32.dll", 23) ;Point d'interogation
  
  ;CONTAINER 0
  containerTB0=ContainerGadget(#PB_Any, 0, 0, 210, ButtonIconHeight+ButtonIconMargin)
  ;SetGadgetColor(containerTB0,#PB_Gadget_BackColor,$00ff00)
  hTB0=CreateToolBar(0, GadgetID(containerTB0))
  hOldIList = SendMessage_(hTB0, #TB_GETIMAGELIST, 0, 0);
  hNewIList = ImageList_Duplicate_(hOldIList)
  ImageList_Destroy_(hOldIList)
  ImageList_SetIconSize_(hNewIList, IconWidth, IconHeight)
  SendMessage_(hTB0, #TB_SETIMAGELIST, 0, hNewIList)
  SendMessage_(hTB0, #TB_SETBITMAPSIZE, 0, IconWidth|IconHeight<<16)
  SendMessage_(hTB0, #TB_SETBUTTONSIZE, 0, ButtonIconWidth|ButtonIconHeight<<16)
  SendMessage_(hTB0, #TB_AUTOSIZE, 0, 0)
  ToolBarImageButton(#PB_Any,ico0)
  ToolBarImageButton(#PB_Any,ico1)
  ToolBarImageButton(#PB_Any,ico2)
  ToolBarSeparator()
  ToolBarImageButton(#PB_Any,ico3)
  ToolBarImageButton(#PB_Any,ImageID(0)) 
  CloseGadgetList()
  
  ;CONTAINER 1
  containerTB1=ContainerGadget(#PB_Any, 0, GadgetHeight(containerTB0), 210, ButtonIconHeight+ButtonIconMargin)
  ;SetGadgetColor(containerTB1,#PB_Gadget_BackColor,$00ff00)
  hTB1=CreateToolBar(1, GadgetID(containerTB1))
  hOldIList1 = SendMessage_(hTB1, #TB_GETIMAGELIST, 0, 0);
  hNewIList1 = ImageList_Duplicate_(hOldIList1)
  ImageList_Destroy_(hOldIList1)
  ImageList_SetIconSize_(hNewIList1, IconWidth, IconHeight)
  SendMessage_(hTB1, #TB_SETIMAGELIST, 0, hNewIList1)
  SendMessage_(hTB1, #TB_SETBITMAPSIZE, 0, IconWidth|IconHeight<<16)
  SendMessage_(hTB1, #TB_SETBUTTONSIZE, 0, ButtonIconWidth|ButtonIconHeight<<16)
  SendMessage_(hTB1, #TB_AUTOSIZE, 0, 0)
  ToolBarImageButton(#PB_Any,ico0)
  ToolBarImageButton(#PB_Any,ico1)
  ToolBarImageButton(#PB_Any,ico2)
  ToolBarSeparator()
  ToolBarImageButton(#PB_Any,ico4)
  ToolBarImageButton(#PB_Any,ImageID(0)) 
  CloseGadgetList()
  
  PanelGadget(0, 8, GadgetY(containerTB1)+GadgetHeight(containerTB1)+50, 300, 100)
  AddGadgetItem (0, -1, "Onglet 1")
  ;CONTAINER 2
  containerTB2=ContainerGadget(#PB_Any, 0, 0, 210, ButtonIconHeight+ButtonIconMargin)
  ;SetGadgetColor(containerTB1,#PB_Gadget_BackColor,$00ff00)
  hTB2=CreateToolBar(2, GadgetID(containerTB2))
  ;>>>>>delete the upper line
  SendMessage_(hTB2,#TB_SETSTYLE,0,SendMessage_(hTB2,#TB_GETSTYLE,0,0)|#CCS_NODIVIDER)
  hOldIList2 = SendMessage_(hTB2, #TB_GETIMAGELIST, 0, 0);
  hNewIList2 = ImageList_Duplicate_(hOldIList2)
  ImageList_Destroy_(hOldIList2)
  ImageList_SetIconSize_(hNewIList2, IconWidth, IconHeight)
  SendMessage_(hTB2, #TB_SETIMAGELIST, 0, hNewIList2)
  SendMessage_(hTB2, #TB_SETBITMAPSIZE, 0, IconWidth|IconHeight<<16)
  SendMessage_(hTB2, #TB_SETBUTTONSIZE, 0, ButtonIconWidth|ButtonIconHeight<<16)
  SendMessage_(hTB2, #TB_AUTOSIZE, 0, 0)
  ToolBarImageButton(#PB_Any,ico0)
  ToolBarImageButton(#PB_Any,ico1)
  ToolBarImageButton(#PB_Any,ico2)
  ToolBarSeparator()
  ToolBarImageButton(#PB_Any,ico4)
  ToolBarImageButton(#PB_Any,ImageID(0)) 
  CloseGadgetList() 
  AddGadgetItem (0, -1,"Onglet 2")     
  CloseGadgetList()
  
  
  Repeat
    Event = WaitWindowEvent()
    
    Select Event
        
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1 
            CloseWindow(0)
            End  
        EndSelect
        
    EndSelect
  Until Event = #PB_Event_CloseWindow
EndIf

M.
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: Changer la taille des icone

Message par microdevweb »

Voici un module Tree que je développe (pas fini)
Image
Trop de lignes donc voila un zip
:arrow: http://www.microdevweb.com/source/Tree/PbTree.zip

Ouvrez le projet Tree.pbp avec purebasic
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre