Seite 1 von 2
ListIconGadget - Zelle Fett?
Verfasst: 14.01.2009 19:50
von pickelrobert
Hallo.
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?
Danke schonmal.
Verfasst: 14.01.2009 22:58
von Dare Devil
Das geht, indem du einen Leerstring als fontname uebergibst. Dadurch benutzt dein Programm den "Standardfont"
Sofern du Windows benutzt, koennte folgender Link fuer dich interessant sein:
http://www.purearea.net/pb/CodeArchiv_v ... or+Font.pb
Verfasst: 15.01.2009 18:51
von Shardik
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?
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:
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
Edit: Das fälschlicherweise hineingerutschte If...EndIf bei der Abfrage der Compiler-Version gegen CompilerIf...CompilerEndIf getauscht! Danke an edel für den Hinweis.

Verfasst: 16.01.2009 17:49
von Andesdaf
interessant... schöne Lösung, auch wenn du (nebenbei gesagt) CreateGadgetLis
weglassen könntest...
Verfasst: 16.01.2009 18:25
von Shardik
Andesdaf hat geschrieben:interessant... schöne Lösung, auch wenn du (nebenbei gesagt) CreateGadgetLis weglassen könntest...
Dankeschön, daß Dir meine Lösung gefallen hat...
Zu Deinem Vorschlag des Weglassens von CreateGadgetList() habe ich allerdings eine andere Meinung. Ich persönlich arbeite parallel mit PB 4.20 und 4.30 (teilweise habe ich sogar noch einige in PB 3.94 programmierte größere Anwendungen in Produktion bei Kunden, die ich wahrscheinlich auch nicht mehr portieren werde). Es sind doch nur 3 zusätzliche Zeilen, die aber bewirken, daß der Code ohne Fehlermeldung in 4.00 - 4.20 läuft und in 4.30 keinen nervigen Hinweis ausgibt. Es gibt auch genug Beschwerden im deutschen und englischen Forum über diese Meldungen von Anfängern, aber auch von Fortgeschrittenen, die die Abschaffung von CreateGadgetList() noch nicht mitbekommen haben, weil sie vielleicht auch nur von Zeit zu Zeit ins Forum schauen...
Verfasst: 16.01.2009 18:31
von Andesdaf
> Ich persönlich arbeite parallel mit PB 4.20 und 4.30 (teilweise habe ich sogar noch einige in PB 3.94 programmierte größere Anwendungen in Produktion bei Kunden, die ich wahrscheinlich auch nicht mehr portieren werde)
Ja gut ist ja nicht ersichtlich...
Mir ist es auch egal wer wann was für einen veralteten Befehl nutzt, solange
der Code noch geht ist alles in Budda
Verfasst: 16.01.2009 18:50
von hjbremer
Alles sehr schön und affengeil, nur dann taucht wieder das alte Problem auf.
es funktionieren die PB Farbbefehle außerhalb des Callbacks nicht mehr.

und das kann sehr nervig sein.
Verfasst: 16.01.2009 19:56
von edel
Statt "If" sollte das dann aber besser "CompilerIf" heissen.
@hjbremer
Wo ist da das Problem? Malen mit API ist doch genauso einfach
wie mit PB. Zumal es aber auch dafuer Loesungen gibt.
Verfasst: 16.01.2009 21:05
von Shardik
edel hat geschrieben:Statt "If" sollte das dann aber besser "CompilerIf" heissen.
Danke für den Hinweis, edel. Ich hatte das CompilerIf zu Anfang drin, habe dann aber noch eine Änderung gemacht, das komplette Beispiel noch einmal überschrieben und dabei auch das CompilerIf überklatscht...
Jetzt verstehe ich auch Andesdafs Bemerkung

Verfasst: 18.01.2009 14:11
von Andesdaf
Shardik hat geschrieben:Jetzt verstehe ich auch Andesdafs Bemerkung

Ja, meine Bemerkungen versteht man immer erst auf den zweiten Blick
