TreeGadget Item Font
Verfasst: 22.04.2012 23:34
Ich möchte die Schriftart eines einzelnen Items ändern. Habe dazu schon ein Code gefunden, allerdings werden die TreeGadgets in eine LinkedList gespeichert. Zudem kommt das durch den Wert von SetGadgetItemData() bestimmt wird wie es "umgestyled" wird.
Code: Alles auswählen
#CDDS_ITEM = $10000
#CDDS_PREPAINT = 1
#CDDS_ITEMPREPAINT = #CDDS_ITEM | #CDDS_PREPAINT
#CDRF_NEWFONT = 2
#CDRF_NOTIFYITEMDRAW = $20
#CDRF_DODEFAULT = 0
; --> Load our underline font
Global hFont
hFont = LoadFont(0, "Courier New", 8, #PB_Font_Underline)
Procedure WinCallback(hwnd, msg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select msg
Case #WM_NOTIFY
*pNMHDR.NMHDR = lParam
If *pNMHDR\code = #NM_CUSTOMDRAW And *pNMHDR\hwndFrom = GadgetID(1)
*pTVcd.NMTVCUSTOMDRAW = lParam
Select *pTVcd\nmcd\dwDrawStage
Case #CDDS_PREPAINT
result = #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
; --> Here we get the text of the TreeGadget item being drawn
tvi.TV_ITEM\mask = #TVIF_TEXT | #TVIF_HANDLE
tviText$ = Space(100)
tvi\pszText = @tviText$
tvi\cchTextMax = 100
tvi\hItem = *pTVcd\nmcd\dwItemSpec
SendMessage_(*pNMHDR\hwndFrom, #TVM_GETITEM, 0, @tvi)
; --> Now we underline "Item 0" and "Item 4" in blue
Select tviText$
Case "Item 0"
; --> Select underlined font into item 0 dc
SelectObject_(*pTVcd\nmcd\hdc, hFont)
SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 0, 255))
result = #CDRF_NEWFONT
Case "Item 4"
; --> Select underlined font into item 4 dc
SelectObject_(*pTVcd\nmcd\hdc, hFont)
SetTextColor_(*pTVcd\nmcd\hdc, RGB(0, 200, 255))
result = #CDRF_NEWFONT
Default
result = #CDRF_DODEFAULT
EndSelect
EndSelect
EndIf
EndSelect
ProcedureReturn result
EndProcedure
If OpenWindow(0, 0, 0, 355, 180, "",#PB_Window_SystemMenu | #PB_Window_ScreenCentered) And CreateGadgetList(WindowID(0))
TreeGadget(1, 10, 10, 160, 160)
SetWindowCallback(@WinCallback())
For i = 0 To 10
AddGadgetItem (1, -1, "Item "+Str(i))
SetGadgetItemData(1,0,-1)
Next i
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
End