PureBasic

Forums PureBasic
Nous sommes le Mar 18/Juin/2013 5:41

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 1 message ] 
Auteur Message
 Sujet du message: Personnaliser les couleurs et police d'un listicongadget
MessagePosté: Jeu 29/Jan/2004 10:39 
Hors ligne
Avatar de l’utilisateur

Inscription: Mer 28/Jan/2004 20:58
Messages: 4311
Localisation: Clermont ferrand OU Olsztyn
Un code que Denis m'a filé qui vient surement du forum des anglais et j'ai du corrigé car il était buggé

il permet de modifier pour chaque case indépendamment la couleur de fond, de texte et la police. super pratique en clair

Code:
; 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

_________________
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 1 message ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye