Page 1 sur 1

Mettre des images facilement dans les menus

Publié : dim. 05/mars/2006 18:18
par nico
C'est un code de Danilo pris sur le Forum German sur l'utilisation de l'api SetMenuItemBitmaps.

Code : Tout sélectionner

hwnd=OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Menu") 

If hwnd 
     
     CX_CMark=GetSystemMetrics_(#SM_CXMENUCHECK) 
     CY_CMark=GetSystemMetrics_(#SM_CYMENUCHECK) 
     
     If CreateImage(0, CX_CMark, CY_CMark) 
          If StartDrawing(ImageOutput()) 
               Box(0,0,CX_CMark,CY_CMark,GetSysColor_(#COLOR_MENU)) 
               Circle(CX_CMark/2,CY_CMark/2,CX_CMark/3,GetSysColor_(#COLOR_MENUTEXT)) 
               StopDrawing() 
          EndIf 
     EndIf 
     
     If CreateImage(1, CX_CMark, CY_CMark) 
          If StartDrawing(ImageOutput()) 
               Box(0,0,CX_CMark,CY_CMark,GetSysColor_(#COLOR_MENU)) 
               Circle(CX_CMark/2,CY_CMark/2,CX_CMark/3,RGB(0,0,255)) 
               StopDrawing() 
          EndIf 
     EndIf
     
     If CreateImage(2, CX_CMark, CY_CMark) 
          If StartDrawing(ImageOutput()) 
               Box(0,0,CX_CMark,CY_CMark,GetSysColor_(#COLOR_MENU)) 
               Circle(CX_CMark/2,CY_CMark/2,CX_CMark/3,RGB(255,0,0)) 
               StopDrawing() 
          EndIf 
     EndIf
     
     hMenu=CreateMenu(0, hwnd) : If hMenu 
          MenuTitle("Datei") 
          MenuItem(1, "Test") 
          OpenSubMenu("SubMenu 1") 
          MenuItem(2, "Sub1\Item1") 
          CloseSubMenu() 
          MenuItem(3,"Test 2") 
          MenuTitle("Bearbeiten") 
          MenuItem(4,"Ausschneiden") 
          MenuItem(5,"Kopieren") 
          MenuItem(6,"Einfgen") 
          
          ;SetMenuItemBitmaps_(Menu, x, #MF_BYCOMMAND, bitmap1, bitmap2) 
          ;menu: handle du menu
          ;x: id de la commande
          ;bitmap1:handle du bitmap UnChecked (affichage par défaut)
          ;bitmap1:handle du bitmap Checked   (affichage si item coché) 
          
          SetMenuItemBitmaps_(hMenu, 1, #MF_BYCOMMAND, UseImage(0), UseImage(0)) 
          SetMenuItemBitmaps_(hMenu, 2, #MF_BYCOMMAND, UseImage(1), UseImage(1)) 
          SetMenuItemBitmaps_(hMenu, 3, #MF_BYCOMMAND, UseImage(2), UseImage(2)) 
          
     EndIf 
     
     Repeat 
          Event=WaitWindowEvent() 
     Until Event=#PB_Event_CloseWindow 
     
EndIf 

End 

Publié : dim. 05/mars/2006 18:20
par Dr. Dri
Pas compatible 98

Dri

Publié : dim. 05/mars/2006 18:31
par nico
Pourtant sur le site, il dise que c'est compatible win95!

Publié : dim. 05/mars/2006 18:50
par Dr. Dri
exportation manquante:
user32.dll (SetLayeredWindowAttributes)

Dri :-?

Publié : dim. 05/mars/2006 19:34
par nico
Ben en fait j'ai pas collé le bon code, là c'est mieux. :lol:

Publié : lun. 06/mars/2006 11:44
par Ulix
Salut a tous,

Sur XP, nickel !

Ce code tombe a pic. Je désire mettre des icone dans mes menus, et je l'avais mis dans liste des demandes pour PB4. Hélas ! peut-être pour plus tard.

Pour ma part j'ai un peu modifié le code, pour chargé directement les images (uniquement en format BMP, dommage pas les ICO) avec un LOADIMAGE, puis un RESIZEIMAGE. Ca marche !

Merci beaucoup :wink:

Publié : lun. 06/mars/2006 11:57
par Ulix
Ps : pour ceux qui utilise PB4 il faut replacé les USEIMAGE par IMAGE
ID

comme ceux-ci :

SetMenuItemBitmaps_(hMenu, 1, #MF_BYCOMMAND, ImageID(0), ImageID(0))

:wink:

Publié : lun. 06/mars/2006 12:33
par flaith
Par contre avec la V4 j'ai ca :

---------------------------
PureBasic
---------------------------
Ligne 9: ImageOutput(): Incorrect number of parameters.
---------------------------
OK
---------------------------
:?:

Publié : lun. 06/mars/2006 12:43
par Ulix
Exact, avec PB4 l'instruction a changé, il faut mettre : ImageOutput(#image).

Mise a part cette mise a jour de l'instruction, l'exemple donné marche aussi avec PB4.

Par contre si quelqu'un sait comme utilisé directement les icones ou lieu de fichier.BMP je suis interresé...

:lol:

Publié : lun. 06/mars/2006 13:21
par flaith
Arghh, merci, c'est dans l'aide en plus, la prochaine fois je nettoyerais mes lunettes ;)

Publié : lun. 06/mars/2006 17:42
par nico
Pour les icônes, c'est un peu plus compliqué faut faire de l'ownerdraw, ce qui veut dire qu'après faut s'occuper de la gestion des menus, fini les commandes PB.

Denis a fait une Lib, le mieux, c'est de l'utiliser.

Publié : ven. 10/mars/2006 18:11
par Anonyme2
Salut à tous,

faut que je m'y remette et que j'essaye de terminer cette librairie :lol:

Publié : ven. 10/mars/2006 18:27
par nico
Bon ça va, je suis pas le seul. :lol:

Publié : ven. 10/mars/2006 18:32
par Anonyme2
j'ai fait une escapade du côté de VBA pour moi, je retourne à PB c'est baucoup plus simple

Publié : ven. 10/mars/2006 19:10
par Jacobus
Ah tiens te revoilà toi :D
Je me demandais où tu étais passé. Ca fais plaisir de savoir que tu reviens à PB, et que tu vas nous terminer cette lib :P