Verfasst: 15.01.2009 18:51
Eine "einfache" Möglichkeit kenne ich nicht, aber ich kann eine Teil-Lösung anbieten, um mit einem Callback den Schriftstil einer einzelnen Zelle abzuändern. Ohne einen zusätzlichen Font zu laden wird wohl kaum eine Lösung zu finden sein, da der Callback ja ein Handle für einen zusätzlich geladenen Font mit verändertem Stil benötigt. Wie man den in einem bestimmten Gadget verwendeten Font-Namen, die Font-Größe und den Font-Stil ermittelt, hat edel bereits demonstriert:pickelrobert hat geschrieben:Gibt es eine einfache Möglichkeit eine Zelle in einem ListIconGadget "Fett", "Kursiv" usw. zu machen, OHNE irgendwelche Fonts zu laden? Also Quasi den standardmäßig verwendeten Font zu benutzen?
http://www.purebasic.fr/german/viewtopi ... 91&start=5
Mit diesen Routinen ließe sich mein Beispiel erweitern, um den in einem ListIconGadget verwendeten Font-Namen und seine Größe zu ermitteln und dann diesen Font noch einmal erneut mit dem gewünschten veränderten Stil zu laden.
Code: Alles auswählen
EnableExplicit
#WindowHeight = 112
#WindowWidth = 239
Define i
Define ModRow = 1
Define ModColumn = 1
Define RegularFont = FontID(LoadFont(#PB_Any, "Arial", 10))
Define BoldFont = FontID(LoadFont(#PB_Any, "Arial", 10, #PB_Font_Bold))
Define Style = 1
Define WindowEvent
Procedure WindowCallback(WindowID, Message, wParam, lParam)
Shared BoldFont
Shared RegularFont
Shared ModRow
Shared ModColumn
Shared Style
Protected *NMLVCustomDraw.NMLVCUSTOMDRAW
If Message = #WM_NOTIFY
*NMLVCustomDraw = lParam
If *NMLVCustomDraw\nmcd\hdr\hWndFrom = GadgetID(0) And *NMLVCustomDraw\nmcd\hdr\code = #NM_CUSTOMDRAW
Select *NMLVCustomDraw\nmcd\dwDrawStage
Case #CDDS_PREPAINT
ProcedureReturn #CDRF_NOTIFYITEMDRAW
Case #CDDS_ITEMPREPAINT
ProcedureReturn #CDRF_NOTIFYSUBITEMDRAW
Case #CDDS_ITEMPREPAINT | #CDDS_SUBITEM
If *NMLVCustomDraw\nmcd\dwItemSpec = ModRow And *NMLVCustomDraw\iSubItem = ModColumn And Style
SelectObject_(*NMLVCustomDraw\nmcd\hDC, BoldFont)
Else
SelectObject_(*NMLVCustomDraw\nmcd\hDC, RegularFont)
EndIf
ProcedureReturn #CDRF_NEWFONT
EndSelect
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 100, 100, #WindowWidth, #WindowHeight, "Demo für Schriftstil-Wechsel", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CompilerIf #PB_Compiler_Version < 430
CreateGadgetList(WindowID(0))
CompilerEndIf
SetGadgetFont(#PB_Default, RegularFont)
ListIconGadget(0, 5, 5, #WindowWidth - 10, #WindowHeight - 35, "Spalte 1", 75, #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Spalte 2", 75)
AddGadgetColumn(0, 2, "Spalte 3", 75)
ButtonGadget(1, 25, #WindowHeight - 25, 189, 20, "Ändere Schriftstil von Z2S2")
For i = 1 To 3
AddGadgetItem(0, -1, "Z" + Str(i) + "S1" + #LF$ + "Z" + Str(i) + "S2" + #LF$ + "Z" + Str(i) + "S3")
Next i
SetWindowCallback(@WindowCallback(), 0)
Repeat
WindowEvent = WaitWindowEvent()
If WindowEvent = #PB_Event_Gadget
If EventGadget() = 1
Style ! 1
SendMessage_(GadgetID(0), #LVM_REDRAWITEMS, ModRow, ModRow)
UpdateWindow_(GadgetID(0))
EndIf
EndIf
Until WindowEvent = #PB_Event_CloseWindow
EndIf
