Toolbar et image 24 bits

Sujets variés concernant le développement en PureBasic
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Toolbar et image 24 bits

Message par nico »

Quelqu'un aurait un code ou une lib pour afficher des images 24 bits dans une Toolbar ?

Merci d'avance! :)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Salut Nico

on avait discuté de ça il y a plusieurs années, c'est ici (ça a été laborieux :roll: )

http://www.purebasic.fr/french/viewtopic.php?t=739

Voici un exemple (code final de Chris) avec des icônes 32x32 mais sous Vista, il manque quelques pixels en bas du bouton (pas cherché pourquoi).

Code : Tout sélectionner

#Fenetre = 0
#BarreOutil = 1

#Image1 = 1000
#Image2 = 2000
#Image3 = 3000

#TB_SETIMAGELIST = 1072
#TB_GETIMAGELIST = #WM_USER + 49

;- Taille des icônes : Modifier ces valeurs pour tout modifier
Hauteur.w = 32
Largeur.w = 32

;-Soit, on charge les images, au format .ico ou autre
CatchImage(#Image1, ?FlecheGauche)
CatchImage(#Image2, ?Drapeau)
CatchImage(#Image3, ?FlecheVerticale)

;- Soit on les crée soi-même
; If CreateImage(#Image1,Largeur,Hauteur)
;   StartDrawing(ImageOutput())
;   Box(0,0,Largeur,Hauteur,RGB($0,$0,$FF))
;   StopDrawing()
; EndIf
;
; If CreateImage(#Image2,Largeur,Hauteur)
;   StartDrawing(ImageOutput())
;   Box(0,0,Largeur,Hauteur,RGB($0,$FF,$0))
;   StopDrawing()
; EndIf

;- Ouverture de la fenêtre
If OpenWindow(#Fenetre, 0, 0, 200, 320, "Toolbars "+Str(Largeur)+" x "+ Str(Hauteur), #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
 
  ;/ Creation de la toolbar vide
  hToolBar = CreateToolBar(#BarreOutil, WindowID(#Fenetre))
 
  ;/ Réglage de la taille des boutons, du style et de la position de la barre
  SendMessage_(hToolBar, #TB_SETBUTTONSIZE, 0, Largeur + (Hauteur<<16))
  SendMessage_(hToolBar, #TB_SETSTYLE , 0, SendMessage_(hToolBar,#TB_GETSTYLE,0,0)|#CCS_TOP )
 
  If hToolBar
    ;/ on récupère le handle de la listimage si elle existe
    ListImageHwnd = SendMessage_(hToolBar, #TB_GETIMAGELIST, 0, 0)
   
    If ListImageHwnd
     
      ;/ on redimensionne la taille des images de la listimage en 32x 32
      ;/ après redimensionnement, la listeIlmage est vide
      If ImageList_SetIconSize_(ListImageHwnd, Largeur, Hauteur)
       
        ;/ si ImageList_SetIconSize réussi, le resultat retourné est <> 0
        ;/ on ajoute la première image puisque la liste est vide
       
        ToolBarImageButton(#PB_Any , ImageID(#Image1))
        ToolBarImageButton(#PB_Any , ImageID(#Image2))
        ToolBarImageButton(#PB_Any , ImageID(#Image3))
       
        ;/ etc ...
      EndIf
    EndIf
  Else
    End
  EndIf
 
  While WaitWindowEvent() <> #PB_Event_CloseWindow And EventWindow() <> WindowID(#Fenetre)
  Wend
EndIf     
End

datasection
FlecheGauche:
Data.l $00010000, $10100001, $00010000, $03680018, $00160000, $00280000
Data.l $00100000, $00200000, $00010000, $00000018, $03000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $B5B50000, $000000B5, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF000000, $00002060, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF2060FF, $0000C0FF, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FFC0FFFF, $000080FF, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $60FF0000, $C0FFFF20, $FF80FFFF, $000080FF, $2060FF00, $FF2060FF
Data.l $7EFA2060, $2181FE1E, $002482FF, $00000000, $00000000, $FF000000
Data.l $FFFF2060, $80FFFFC0, $FF20C0FF, $FFFF80FF, $80FFFFC0, $FF80FFFF
Data.l $80FF2080, $2080FF20, $002080FF, $00000000, $00000000, $FF2060FF
Data.l $FFFFC0FF, $20C0FF80, $FF20C0FF, $C0FF20C0, $20C0FF20, $FF20C0FF
Data.l $80FF2080, $2080FF20, $002080FF, $00000000, $00000000, $00000000
Data.l $80FF0000, $20C0FF20, $FF20C0FF, $80FF2080, $2080FF20, $FF2080FF
Data.l $80FF2080, $2080FF20, $002080FF, $00000000, $00000000, $00000000
Data.l $00000000, $2080FF00, $FF20C0FF, $00002080, $00000000, $04000000
Data.l $02020404, $01010202, $00080C12, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF2080FF, $00002080, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF000000, $00002080, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $FFFF0000, $7FFF0000, $7FFE0000
Data.l $7FFC0000, $7FF80000, $01F00000, $01E00000, $01C00000, $01E00000
Data.l $01F00000, $7FF80000, $7FFC0000, $7FFE0000, $7FFF0000, $FFFF0000
Data.b  0, 0, -1, -1, 0, 0

FlecheVerticale:
Data.l $00010000, $10100001, $00010000, $03680018, $00160000, $00280000
Data.l $00100000, $00200000, $00010000, $00000018, $03000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2482FF00, $FF2080FF, $80FF2080, $080C1220, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2181FE00, $FF2080FF, $80FF2080, $01010220, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $1E7EFA00, $FF2080FF, $80FF2080, $02020220, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FF2080FF, $80FF2080, $04040420, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FF80FFFF, $80FF20C0, $00000020, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FF80FFFF, $80FF20C0, $00000020, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $B5B5B500, $00000000
Data.l $00000000, $00000000, $FFC0FFFF, $80FF20C0, $00000020, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $FF2060FF
Data.l $FFFFC0FF, $80FFFF80, $FF80FFFF, $80FF20C0, $2080FF20, $FF2080FF
Data.l $00002080, $00000000, $00000000, $00000000, $00000000, $FF000000
Data.l $FFFF2060, $80FFFFC0, $FF20C0FF, $C0FF20C0, $20C0FF20, $002080FF
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $60FF0000, $C0FFFF20, $FF80FFFF, $C0FF20C0, $2080FF20, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $2060FF00, $FFC0FFFF, $80FF80FF, $00000020, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF2060FF, $0000C0FF, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $FF000000, $00002060, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $FFFF0000, $3FF80000, $3FF80000
Data.l $3FF80000, $3FF80000, $3FF80000, $3FF80000, $03800000, $07C00000
Data.l $0FE00000, $1FF00000, $3FF80000, $7FFC0000, $FFFE0000, $FFFF0000
Data.b  0, 0, -1, -1, 0, 0

Drapeau:
Data.l $00010000, $20200002, $00000010, $02E80000, $00260000, $10100000
Data.l $00000010, $01280000, $030E0000, $00280000, $00200000, $00400000
Data.l $00010000, $00000004, $02800000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $80000080, $80000000, $00800080
Data.l $00800000, $80800080, $80800000, $C0C00080, $000000C0, $FF0000FF
Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $000000FF
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $CC0C0000
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF
Data.l $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF
Data.l $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF
Data.l $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF
Data.l $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF
Data.l $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF
Data.l $999999F9, $CC0C9099, $CFCCCCCC, $FFFFFFFF, $999999F9, $CC0C9099
Data.l $CFCCCCCC, $FFFFFFFF, $999999F9, $00009099, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $FFFF0000, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
Data.l $0000FFFF, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $FFFF0000, $FFFFFFFF, $FFFFFFFF
Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $0028FFFF, $00100000, $00200000
Data.l $00010000, $00000004, $00C00000, $00000000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $80000080, $80000000, $00800080
Data.l $00800000, $80800080, $C0C00000, $808000C0, $00000080, $FF0000FF
Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $000000FF
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $CC0C0000, $99FFFFCC, $CC0C9099, $99FFFFCC, $CC0C9099
Data.l $99FFFFCC, $CC0C9099, $99FFFFCC, $CC0C9099, $99FFFFCC, $CC0C9099
Data.l $99FFFFCC, $CC0C9099, $99FFFFCC, $CC0C9099, $99FFFFCC, $00009099
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.l $00000000, $FFFF0000, $FFFF0000, $FFFF0000, $00000000, $00000000
Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
Data.b  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0, -1, -1, 0, 0

EndDataSection
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Effectivement, il y a un petit problème d'affichage!

Sinon j'ai trouvé cette macro qui marche bien de Guimauve:
http://www.purebasic.fr/french/viewtopi ... ariconsize

Code : Tout sélectionner

Macro SetToolBarIconSize(ToolBar, IconSize)
    SendMessage_(ToolBarID(ToolBar), #TB_SETBITMAPSIZE, 0, (IconSize << 16) + IconSize)
    ImageList_SetIconSize_(SendMessage_(ToolBarID(ToolBar), #TB_GETIMAGELIST, 0, 0) , IconSize , IconSize)
    SendMessage_(ToolBarID(ToolBar), #TB_AUTOSIZE, 0, 0)
EndMacro 
Je croyais qu'il fallait absolument re-créer une imagelist au format 24 bits et l'assigner à la Toolbar pour que ça marche, mais apparemment non!

Marche très bien avec les icônes XP True color si on active les thèmes.

Merci Denis pour ton aide. :)
Répondre