Page 1 sur 1

Police de caractère sur ListIconGadget

Publié : ven. 28/oct./2016 12:21
par omega
Bonjour à tous

J'aimerais savoir si c'est possible de modifier (ou définir) une police de caractère d'une cellule (col,ligne) d'un ListIconGadget.
Il s'agit en fait d'un ancien programme assez volumineux développé en pb4.2. Je n'ai pas envie de migrer cette version pour éviter des surprises de mise à niveau... Donc, il faudrait que cette possibilité soit acceptable par pb4.2.

Merci

Re: Police de caractère sur ListIconGadget

Publié : ven. 28/oct./2016 14:35
par Mesa
La cellule 3,3 à une police spécifique.
Code de ebs qui fonctionnait avec pb4.0

Code : Tout sélectionner

; Author: ebs (updated for PB4.00 by blbltheworm)
; Date: 07. May 2003
; OS: Windows
; Demo: No


#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 

Global ListGadget.l 

; window callback routine to color listview rows 
Declare.l NotifyCallback(WindowID.l, Message.l, wParam.l, lParam.l) 

; load fonts 
Global FontReg.l, FontBold.l 
FontReg = LoadFont(1, "Tahoma", 9) 
FontBold = LoadFont(2, "Tahoma", 9, #PB_Font_Bold) 
LoadFont(3,"Arial", 12, #PB_Font_StrikeOut)

hwnd.l = OpenWindow(0, 0, 0, 356, 697, "Color List View Rows", #PB_Window_ScreenCentered | #PB_Window_SystemMenu) 

; create list with seven columns 
ListGadget = ListIconGadget(1, 10, 10, 336, 677,"", 70, #PB_ListIcon_GridLines | #LVS_NOSORTHEADER) 
AddGadgetColumn(1, 1, "Sun", 35) 
AddGadgetColumn(1, 2, "Mon", 35) 
AddGadgetColumn(1, 3, "Tue", 35) 
AddGadgetColumn(1, 4, "Wed", 35) 
AddGadgetColumn(1, 5, "Thu", 35) 
AddGadgetColumn(1, 6, " Fri", 35) 
AddGadgetColumn(1, 7, "Sat", 35) 

; add some rows 
AddGadgetItem(1, -1, "  9:00 am" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  9:30 am" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "10:00 am" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "10:30 am" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "11:00 am" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "11:30 am" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "12:00 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "12:30 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  1:00 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  1:30 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  2:00 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  2:30 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  3:00 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  3:30 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  4:00 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  4:30 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 
AddGadgetItem(1, -1, "  5:00 pm" + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX" + Chr(10) + Chr(10) + "XXX") 

; set callback routine 
SetWindowCallback(@NotifyCallback()) 

Repeat 
Until WaitWindowEvent()=#PB_Event_CloseWindow 

End 

; window callback routine to color listview rows 
Procedure.l NotifyCallback(WindowID.l, Message.l, wParam.l, lParam.l) 
  ; process NOTIFY message only 
  If Message = #WM_NOTIFY 
    ; set stucture pointer 
    *LVCDHeader.NMLVCUSTOMDRAW = lParam 
    ; CUSTOMDRAW message from desired gadget? 
    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 
          ; simple example - change background colors every other row 
          ;                  change text colors every other row, only in column 3 
          ;                  text in first column is bold 
          Row.l = *LVCDHeader\nmcd\dwItemSpec 
          Col.l = *LVCDHeader\iSubItem 
          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 
          
          If col=3 And row=3 ;<============================ Cellule 3,3
            SelectObject_(*LVCDHeader\nmcd\hDC, FontID(3))
          EndIf
          
          ProcedureReturn #CDRF_NEWFONT 
      EndSelect 
    EndIf 
  Else 
    ProcedureReturn #PB_ProcessPureBasicEvents 
  EndIf 
EndProcedure
Mesa.

Re: Police de caractère sur ListIconGadget

Publié : ven. 28/oct./2016 15:05
par Micoute
Très intéressant, merci pour le partage.

Re: Police de caractère sur ListIconGadget

Publié : ven. 28/oct./2016 16:05
par Marc56
S'il s'agit de mettre en valeur une cellule (ou ligne ou colonne) tu peux le faire avec les fonctions natives de PB avec SetGadgetItemColor
Couleur du texte et couleur du fond

Je remet ici l'exemple fourni dans l'aide sur SetGadgetItemColor()
(car il y a une faute de frappe dans l'exemple original: un @ en trop ligne 8 )

Code : Tout sélectionner

  If OpenWindow(0, 0, 0, 300, 300, "SetGadgetItemColor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ListIconGadget(0, 10, 10, 280, 280, "Colonne 0", 100)
    AddGadgetColumn(0, 1, "Colonne 1", 100)
    For i = 1 To 10
      AddGadgetItem(0, -1, "Texte "+Str(i)+Chr(10)+"Texte "+Str(i))
    Next 
                                                                  ; la numérotation commence à 0 pour les éléments/colonnes
    SetGadgetItemColor(0, #PB_All, #PB_Gadget_FrontColor, $0000FF,  1) ; tous les éléments de la 2ème colonne en rouge
    SetGadgetItemColor(0,  3, #PB_Gadget_BackColor,  $00FFFF, -1) ; le 4ème élément de toutes les colonnes sur fond jaune
    SetGadgetItemColor(0,  9, #PB_Gadget_BackColor,  $FFFF00,  1) ; le 10ème élément de la 2ème colonne sur fond bleu   
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
:wink:

Re: Police de caractère sur ListIconGadget

Publié : ven. 28/oct./2016 19:14
par Micoute
Et en plus, c'était ça qui m'avait dérouté.

Re: Police de caractère sur ListIconGadget

Publié : ven. 28/oct./2016 21:05
par omega
@mesa:
Merci beaucoup pour ton aide -(je vais tester)

@Marc56:
Il ne s'agit pas de la couleur mais du type de caractères (fontID)


Merci pour tout

(Dommage que SetGadgetItemFont n'est pas prévu pour ces types de gadgets, peut être que FRED va l'ajouter ...)