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