Thanks, RASHAD. Combining your latest code for the header column bold settings with earlier code that handles column bold settings for the gadget items, I've prepared the solution below. I've included a combobox where the user selects the column to be displayed bold.
Code: Select all
Global oldCB
Procedure sizeCB()
ResizeGadget(0,#PB_Ignore,#PB_Ignore,#PB_Ignore,#PB_Ignore)
EndProcedure
Procedure winCB(hWnd,uMsg,wParam,lParam)
Protected Result, Col
Protected *pnmh.NMHDR,*LVCDHeader.NMLVCUSTOMDRAW
Protected BoldCol
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
; Debug "IsGadget(0)=" + IsGadget(0)
If IsGadget(0) ; list
*pnmh.NMHDR = lParam
*LVCDHeader.NMLVCUSTOMDRAW = lParam
If *LVCDHeader\nmcd\hdr\hwndFrom = GadgetID(0)
Select *LVCDHeader\nmcd\dwDrawStage
Case #CDDS_ITEMPREPAINT | #CDDS_SUBITEM
BoldCol = GetGadgetState(1) - 1
If *LVCDHeader\iSubItem = BoldCol
SelectObject_(*LVCDHeader\nmcd\hdc, FontID(1))
Else
SelectObject_(*LVCDHeader\nmcd\hdc, FontID(0))
EndIf
EndSelect
EndIf
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
Procedure liCB(hWnd, uMsg, WParam, LParam)
Protected *NMCUSTOMDRAW.NMCUSTOMDRAW
Protected *NMHDR.NMHDR
Protected Result
Protected BoldCol
Result = CallWindowProc_(oldCB,hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_NOTIFY
*NMHDR = LParam
If *NMHDR\code = #NM_CUSTOMDRAW
*NMCUSTOMDRAW = LParam
Select *NMCUSTOMDRAW\dwDrawStage
Case #CDDS_PREPAINT
Result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
BoldCol = GetGadgetState(1) - 1
If *NMCUSTOMDRAW\dwItemSpec = BoldCol
SelectObject_(*NMCUSTOMDRAW\hdc,FontID(1))
Else
SelectObject_(*NMCUSTOMDRAW\hdc,FontID(0))
EndIf
EndSelect
EndIf
EndSelect
ProcedureReturn Result
EndProcedure
LoadFont(0,"Georgia",12)
LoadFont(1,"Georgia",12,#PB_Font_Bold)
flags = #PB_Window_SystemMenu| #PB_Window_MaximizeGadget| #PB_Window_MinimizeGadget| #PB_Window_ScreenCentered | #PB_Window_SizeGadget
OpenWindow(0, 0, 0, 800, 300, "ListIconGadget with colored header text",Flags)
SetGadgetFont(#PB_Default, FontID(0))
ListIconGadget(0, 10, 10, 780, 200, "Name", 200, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Address", 400)
AddGadgetColumn(0, 2, "Phone", 100)
AddGadgetItem(0, -1, "Harry Rannit" + #LF$ + "12 Parliament Way, Battle Street, By the Bay" + #LF$ + "12345678")
AddGadgetItem(0, -1, "Ginger Brokeit" + #LF$ + "130 PureBasic Road, BigTown, CodeCity" + #LF$ + "555666")
AddGadgetItem(0, -1, "Didi Foundit" + #LF$ + "321 Logo Drive, Mouse House, Downtown" + #LF$ + "none")
TextGadget(2,5,242,120,24,"Select column",#PB_Text_Right)
ComboBoxGadget(1,130,240,100,26)
AddGadgetItem(1,-1,"")
AddGadgetItem(1,-1,"Name")
AddGadgetItem(1,-1,"Address")
AddGadgetItem(1,-1,"Phone")
SetGadgetState(1,0)
SetWindowCallback(@winCB())
Header = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
SendMessage_(Header, #WM_SETFONT, FontID(0), 0)
oldCB = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
BindEvent(#PB_Event_SizeWindow,@sizeCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = 1 ; combobox
If EventType() = #PB_EventType_Change
For n = 0 To CountGadgetItems(1) - 1
SetGadgetItemColor(0, n, #PB_Gadget_BackColor, #PB_Default, #PB_All)
Next n
EndIf
EndIf
Case #PB_Event_CloseWindow
Quit = 1
EndSelect
Until Quit = 1