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
Police de caractère sur ListIconGadget
Police de caractère sur ListIconGadget
Win7 (x64) 64 bits Pb 5.72
Re: Police de caractère sur ListIconGadget
La cellule 3,3 à une police spécifique.
Code de ebs qui fonctionnait avec pb4.0
Mesa.
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
Re: Police de caractère sur ListIconGadget
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Police de caractère sur ListIconGadget
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 )

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

Re: Police de caractère sur ListIconGadget
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 !
Un homme doit être poli, mais il doit aussi être libre !
Re: Police de caractère sur ListIconGadget
@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 ...)
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