Police de caractère sur ListIconGadget

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Police de caractère sur ListIconGadget

Message 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
Win7 (x64) 64 bits Pb 5.72
Mesa
Messages : 1126
Inscription : mer. 14/sept./2011 16:59

Re: Police de caractère sur ListIconGadget

Message 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.
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Police de caractère sur ListIconGadget

Message par Micoute »

Très intéressant, merci pour le partage.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Police de caractère sur ListIconGadget

Message 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:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Police de caractère sur ListIconGadget

Message par Micoute »

Et en plus, c'était ça qui m'avait dérouté.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
omega
Messages : 633
Inscription : sam. 26/nov./2011 13:04
Localisation : Alger

Re: Police de caractère sur ListIconGadget

Message 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 ...)
Win7 (x64) 64 bits Pb 5.72
Répondre