il permet de modifier pour chaque case indépendamment la couleur de fond, de texte et la police. super pratique en clair
Code : Tout sélectionner
; Constantes nécessaires a la procedure ListIconGadget_CustomDraw
#NM_CUSTOMDRAW = #NM_FIRST - 12
#CDDS_ITEM = $10000
#CDDS_SUBITEM = $20000
#CDDS_PREPAINT = $1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDDS_SUBITEMPREPAINT = #CDDS_SUBITEM | #CDDS_ITEMPREPAINT
#CDRF_DODEFAULT = $0
#CDRF_NEWFONT = $2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_NOTIFYSUBITEMDRAW = $20
; window callback permettant de personnaliser l'affichage du ListIconGadget
Declare.l ListIconGadget_CustomDraw(WindowID.l, Message.l, wParam.l, lParam.l)
; On charge des polices de caractères
Global FontReg.l, FontBold.l
FontReg = LoadFont(1, "Tahoma", 9)
FontBold = LoadFont(2, "Tahoma", 9, #PB_Font_Bold)
; On crée une fenêtre
OpenWindow(0, 0, 0, 356, 197, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, "ListIconGadget_CustomDraw")
CreateGadgetList(WindowID(0))
; On crée un ListIconGadget avec 8 colonnes
Global ListGadget.l
ListGadget = ListIconGadget(1, 10, 10, 336, 177,"", 70, #PB_ListIcon_GridLines | #PB_ListIcon_FullRowSelect)
; il est important de stocker le Handle du ListIconGadget dans une variable global car il est utile pour la procedure ListIconGadget_CustomDraw()
AddGadgetColumn(1, 1, "Lun", 35)
AddGadgetColumn(1, 2, "Mar", 35)
AddGadgetColumn(1, 3, "Mer", 35)
AddGadgetColumn(1, 4, "Jeu", 35)
AddGadgetColumn(1, 5, "Ven", 35)
AddGadgetColumn(1, 6, "Sam", 35)
AddGadgetColumn(1, 7, "Dim", 35)
; On ajoute quelque ligne dans le ListIconGadget
For n = 0 To 23
AddGadgetItem(1, -1, Str(n) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX")
; Le chr(10) permet de passer à la case suivante (vers la droite)
Next
; On appelle la procedure permettant de personnaliser le ListIconGadget
SetWindowCallback(@ListIconGadget_CustomDraw())
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
End
; window callback permettant de personnaliser l'affichage du ListIconGadget
Procedure.l ListIconGadget_CustomDraw(WindowID.l, Message.l, wParam.l, lParam.l)
If Message = #WM_NOTIFY
*LVCDHeader.NMLVCUSTOMDRAW = lParam
If *LVCDHeader\nmcd\hdr\hWndFrom = ListGadget And *LVCDHeader\nmcd\hdr\code = #NM_CUSTOMDRAW
Select *LVCDHeader\nmcd\dwDrawStage
Case #CDDS_PREPAINT
ProcedureReturn #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
ProcedureReturn #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_SUBITEMPREPAINT
; Modifier la couleur de fond
; *LVCDHeader\clrTextBk = RGB(255, 255, 223)
; Modifier la couleur du texte
; *LVCDHeader\clrText = RGB(0, 0, 255)
; Modifier la police
; SelectObject_(*LVCDHeader\nmcd\hDC, FontBold)
; On récupère les coordonnées de la case à colorier
Row.l = *LVCDHeader\nmcd\dwItemSpec
Col.l = *LVCDHeader\iSubItem
; On personnalise la case
If Col = 0
SelectObject_(*LVCDHeader\nmcd\hDC, FontBold)
Else
SelectObject_(*LVCDHeader\nmcd\hDC, FontReg)
EndIf
If (Row/2) * 2 = Row
*LVCDHeader\clrTextBk = RGB(255, 255, 223)
If Col = 3
*LVCDHeader\clrText = RGB(255, 0, 0)
EndIf
Else
*LVCDHeader\clrTextBk = RGB(208, 208, 176)
If Col = 3
*LVCDHeader\clrText = RGB(0, 0, 255)
EndIf
EndIf
ProcedureReturn #CDRF_NEWFONT
Default
ProcedureReturn #PB_ProcessPureBasicEvents
EndSelect
Else
ProcedureReturn #PB_ProcessPureBasicEvents
EndIf
Else
ProcedureReturn #PB_ProcessPureBasicEvents
EndIf
EndProcedure
; Les structures utilisées dans la procedure ListIconGadget_CustomDraw
; Structure NMCUSTOMDRAW
; hdr.NMHDR
; dwDrawStage.l
; hdc.l
; rc.RECT
; dwItemSpec.l
; uItemState.l
; lItemlParam.l
; EndStructure
; Structure NMLVCUSTOMDRAW
; nmcd.NMCUSTOMDRAW
; clrText.l
; clrTextBk.l
; iSubItem.l
; dwItemType.l
;
; clrFace.l
; iIconEffect.l
; iIconPhase.l
; iPartId.l
; iStateId.l
;
; rcText.RECT
; uAlign.l
; EndStructure