Le code ci-dessous ne fonctionne que sous Windows et permet d'afficher des images de plus grandes tailles grâce à l'utilisation conjointe des API:
ImageList_Create() pour créer une liste d'images.
Code : Tout sélectionner
ListImages = ImageList_Create_(460, 100 ,#ILC_MASK|#ILC_COLOR32, 0, 30)
ImageList_Add() pour ajouter une image à la liste d'images.
Code : Tout sélectionner
IndexImage = ImageList_Add_(ListImages, ImageID(#Image), 0)
La procédure AddGadgetItemImage(Gadget.l, Row.l, Col.i, Text$, ImageIndex.l) permet de mettre à jour le ListIconGadget.
le code complet.
Code : Tout sélectionner
EnableExplicit
Enumeration
#FontApp
#FontTitle
#Mainform
#ProducLlist
#Image
EndEnumeration
Global WindowStyle.i=#PB_Window_SystemMenu|#PB_Window_ScreenCentered
Global ListImages.l
Declare Start()
Declare MainFormOpen()
Declare OnProductSelect()
Declare OnClose()
Declare AddGadgetItemImage(Gadget.l, Row.l, Col.i, Text$, ImageIndex.l)
Start()
Procedure Start()
LoadFont(#FontApp, "Arial", 10)
LoadFont(#FontTitle, "Arial", 12, #PB_Font_Bold)
SetGadgetFont(#PB_Default, FontID(#FontApp))
MainFormOpen()
BindGadgetEvent(#ProducLlist, @OnProductSelect(), #PB_EventType_LeftClick)
BindEvent(#PB_Event_CloseWindow, @OnClose())
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndProcedure
Procedure MainFormOpen()
Protected IndexImage.l, N.i, Produit.s, PuTtc.s, MemPuTtc.d, Stock.s, Pair.b
OpenWindow(#Mainform, 0, 0, 530, 600, "Catalogue", WindowStyle)
ListIconGadget(#ProducLlist, 20, 30, 500, 550,"Info produits", 470, #PB_ListIcon_GridLines)
;Association d'une liste d'images à la ListIconGadget
;On crée la liste d'image avec l'API ImageList_Create
ListImages = ImageList_Create_(460, 100 ,#ILC_MASK|#ILC_COLOR32, 0, 30)
;On assigne la liste d'image à la ListIconGadget
SendMessage_(GadgetID(#ProducLlist), #LVM_SETIMAGELIST, #LVSIL_SMALL, ListImages)
;Sélection de la liste produits (En l'absence de la base de données, la liste est en datasection)
Restore Catalogue
For N=1 To 10
Read.s Produit
Read.s PuTtc
Read.s Stock
CreateImage(#Image, 460, 100)
StartDrawing(ImageOutput(#Image))
;Fond de l'image
If Pair
Box(0, 0, 460, 100, RGB(255, 255, 255))
Pair = #False
Else
Box(0, 0, 460, 100, RGB(210, 180, 140))
Pair = #True
EndIf
DrawingMode(#PB_2DDrawing_Outlined)
Box(0, 0, 460, 100, RGB(0, 0, 0))
DrawingMode(#PB_2DDrawing_Default)
;Image produit
Box(10, 10, 80, 80, RGB(255, 215, 0))
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(FontID(#FontApp))
DrawRotatedText(20, 10, "Image "+Produit, -45, RGB(169, 169, 169))
;Info produit
DrawingFont(FontID(#FontTitle))
DrawText(110, 10, Produit, RGB(105, 105, 105))
DrawingFont(FontID(#FontApp))
DrawText(110, 45, "P.u. Ttc", RGB(0, 0, 0))
DrawText(220, 45, PuTtc + " €", RGB(0, 0, 0))
DrawText(110, 70, "En stock", RGB(0, 0, 0))
If Stock="1"
DrawText(220, 70, "Oui", RGB(50, 205, 50))
Else
DrawText(220, 70, "Non", RGB(255, 0, 0))
EndIf
StopDrawing()
;On ajoute cette nouvelle image à la liste d'images à l'aide de l'API ImageList_AddIcon
IndexImage = ImageList_Add_(ListImages, ImageID(#Image), 0)
FreeImage(#image)
AddGadgetItemImage(#ProducLlist, N-1, 0, "", IndexImage)
Next
EndProcedure
Procedure OnProductSelect()
Debug "Vous avez sélectionner l'item " + Str(GetGadgetState(#ProducLlist))
EndProcedure
Procedure OnClose()
ImageList_Destroy_(ListImages)
End
EndProcedure
Procedure AddGadgetItemImage(Gadget.l, Row.l, Col.i, Text$, ImageIndex.l)
Protected var.LVITEM
var\Mask = #LVIF_IMAGE | #LVIF_TEXT
var\iItem = Row
var\iSubItem = Col
var\pszText = @Text$
var\iImage = ImageIndex
If Col<>0
SendMessage_(GadgetID(gadget), #LVM_SETITEM, 0, @var)
Else
SendMessage_(GadgetID(gadget), #LVM_INSERTITEM, 0, @var)
EndIf
EndProcedure
DataSection
Catalogue:
Data.s "Produit 1", " 10.00","1"
Data.s "Produit 2", " 15.19","0"
Data.s "Produit 3", " 10.55","1"
Data.s "Produit 4", " 36.50","1"
Data.s "Produit 5", "120.50","1"
Data.s "Produit 6", " 11.50","1"
Data.s "Produit 7", " 0.50","1"
Data.s "Produit 8", " 10.50","0"
Data.s "Produit 9", " 20.65","1"
Data.s "Produit 10", " 1.50","1"
EndDataSection
PS : Ce sujet a déjà été développé sur ce forum (2004), je le remet juste au gout du jour avec les fonctionnalité récentes de PureBasic.