This may be information overkill but it's all I have. 8O
Code: Select all
; --> Array for ListViewGadget tabstops
Dim tStop(0)
Procedure doFontStuff()
; --> Request font and use currently select font if available
If myFont <> 0
result = FontRequester(SelectedFontName(), SelectedFontSize(), SelectedFontStyle())
Else
result = FontRequester("Arial", 12, 0)
EndIf
; --> Load the font
If result <> 0
myFont = LoadFont(0, SelectedFontName(), SelectedFontSize(), SelectedFontStyle())
EndIf
If myFont <> 0
SetGadgetFont(1, UseFont(0))
SetGadgetText(1, SelectedFontName())
; --> Get DC for TextGadget that will contain our loaded font
hdc = GetDC_(GadgetID(1))
SelectObject_(hdc, myFont)
; --> Get font info
GetTextMetrics_(hdc, @tm.TEXTMETRIC)
; --> Get font weight
Select tm\tmweight
Case 100
fontWeight$ = "#FW_THIN"
Case 200
fontWeight$ = "#FW_EXTRALIGHT or #FW_ULTRALIGHT"
Case 300
fontWeight$ = "#FW_LIGHT"
Case 400
fontWeight$ = "#FW_NORMAL or #FW_REGULAR"
Case 500
fontWeight$ = "#FW_MEDIUM"
Case 600
fontWeight$ = "#FW_SEMIBOLD or #FW_DEMIBOLD"
Case 700
fontWeight$ = "#FW_BOLD"
Case 800
fontWeight$ = "#FW_EXTRABOLD or FW_ULTRABOLD"
Case 900
fontWeight$ = "#FW_HEAVY or FW_BLACK"
EndSelect
; --> Is it Italic style
If tm\tmItalic = 0
italic$ = "No"
Else
italic$ = "Yes"
EndIf
; --> Is it Underline style
If tm\tmUnderlined = 0
underline$ = "No"
Else
underline$ = "Yes"
EndIf
; --> Is it Strikeout style
If tm\tmStruckOut = 0
strikeout$ = "No"
Else
strikeout$ = "Yes"
EndIf
; --> Get pitch info
pitch$ = ""
If (tm\tmPitchAndFamily&$F) & #TMPF_DEVICE
pitch$ + "Device "
EndIf
If (tm\tmPitchAndFamily&$F) & #TMPF_TRUETYPE
pitch$ + "TrueType "
EndIf
If (tm\tmPitchAndFamily&$F) & #TMPF_VECTOR
pitch$ + "Vector "
EndIf
If (tm\tmPitchAndFamily&$F) & #TMPF_FIXED_PITCH
pitch$ + "Variable Pitch " ; Yes, this is correct for bit enabled
EndIf
; --> Get family info
family$ = ""
If (tm\tmPitchAndFamily &$F0) & #FF_DECORATIVE
family$ = "Decorative"
EndIf
If (tm\tmPitchAndFamily&$F0) & #FF_DONTCARE
family$ = "Dont Care"
EndIf
If (tm\tmPitchAndFamily&$F0) & #FF_MODERN
family$ = "Modern"
EndIf
If (tm\tmPitchAndFamily&$F0) & #FF_ROMAN
family$ = "Roman"
EndIf
If (tm\tmPitchAndFamily&$F0) & #FF_SCRIPT
family$ = "Script"
EndIf
If (tm\tmPitchAndFamily&$F0) & #FF_SWISS
family$ = "Swiss"
EndIf
; --> Get character set
Select tm\tmCharSet
Case #ANSI_CHARSET
charSet$ = "ANSI_CHARSET"
Case #BALTIC_CHARSET
charSet$ = "BALTIC_CHARSET"
Case #CHINESEBIG5_CHARSET
charSet$ = "CHINESEBIG5_CHARSET"
Case #DEFAULT_CHARSET
charSet$ = "DEFAULT_CHARSET"
Case #EASTEUROPE_CHARSET
charSet$ = "EASTEUROPE_CHARSET"
Case #GREEK_CHARSET
charSet$ = "GREEK_CHARSET"
Case #MAC_CHARSET
charSet$ = "MAC_CHARSET"
Case #OEM_CHARSET
charSet$ = "OEM_CHARSET"
Case #RUSSIAN_CHARSET
charSet$ = "RUSSIAN_CHARSET"
Case #SHIFTJIS_CHARSET
charSet$ = "SHIFTJIS_CHARSET"
Case #SYMBOL_CHARSET
charSet$ = "SYMBOL_CHARSET"
Case #TURKISH_CHARSET
charSet$ = "TURKISH_CHARSET"
Default
charSet$ = Str(tm\tmCharSet)
EndSelect
; --> Resize TextGadget height to fit our font height
ResizeGadget(1, -1, -1, -1, tm\tmheight)
; --> Display our font info
ClearGadgetItemList(2)
AddGadgetItem(2, -1,"Font Name: " + Chr(9) + SelectedFontName())
AddGadgetItem(2, -1,"Weight: " + Chr(9) + Str(tm\tmweight) + " " + fontWeight$)
AddGadgetItem(2, -1,"Italic: " + Chr(9) + italic$)
AddGadgetItem(2, -1,"Underlined: " + Chr(9) + underline$)
AddGadgetItem(2, -1,"Strike Out: " + Chr(9) + strikeout$)
AddGadgetItem(2, -1,"Pitch: " + Chr(9) + pitch$)
AddGadgetItem(2, -1,"Family: " + Chr(9) + family$)
AddGadgetItem(2, -1,"Char Set: " + Chr(9) + charSet$)
AddGadgetItem(2, -1, "Height: " + Chr(9) + Str(tm\tmheight))
AddGadgetItem(2, -1, "Ascent: " + Chr(9) + Str(tm\tmAscent))
AddGadgetItem(2, -1,"Descent: " + Chr(9) + Str(tm\tmDescent))
AddGadgetItem(2, -1,"Internal Leading: " + Chr(9) + Str(tm\tmInternalLeading))
AddGadgetItem(2, -1,"External Leading: " + Chr(9) + Str(tm\tmExternalLeading))
AddGadgetItem(2, -1,"Avg Char Width: " + Chr(9) + Str(tm\tmAveCharWidth))
AddGadgetItem(2, -1,"Max Char Width: " + Chr(9) + Str(tm\tmMaxCharWidth))
AddGadgetItem(2, -1,"Overhang: " + Chr(9) + Str(tm\tmOverhang))
AddGadgetItem(2, -1,"Digitized AspectX: " + Chr(9) + Str(tm\tmDigitizedAspectX))
AddGadgetItem(2, -1,"Digitized AspectY: " + Chr(9) + Str(tm\tmDigitizedAspectY))
AddGadgetItem(2, -1,"First Char: " + Chr(9) + "Chr(" + Str(tm\tmFirstChar) +") " + Chr(tm\tmFirstChar))
AddGadgetItem(2, -1,"Last Char: " + Chr(9) + "Chr(" + Str(tm\tmLastChar) +") " + Chr(tm\tmLastChar))
AddGadgetItem(2, -1,"Default Char: " + Chr(9) + "Chr(" + Str(tm\tmDefaultChar) +") " + Chr(tm\tmDefaultChar))
AddGadgetItem(2, -1,"Break Char: " + Chr(9) + "Chr(" + Str(tm\tmBreakChar) +") " + Chr(tm\tmBreakChar))
; --> Set our ListViewGadget tabstops
tStop(0) = 75
SendMessage_(GadgetID(2), #LB_SETTABSTOPS, 1, @tStop(0))
InvalidateRect_(GadgetID(2), 0, 1)
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 600, 520, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "Font Information") And CreateGadgetList(WindowID(0))
ButtonGadget(0, 10, 10, 100, 20, "Select Font")
TextGadget(1, 10, 50, 580, 40, "")
ListViewGadget(2, 10, 200, 380, 300, #LBS_USETABSTOPS)
Repeat
event = WaitWindowEvent()
If event = #PB_EventGadget And EventGadgetID() = 0
doFontStuff()
EndIf
Until event = #PB_Event_CloseWindow
; --> Clean up
ReleaseDC_(GadgetID(1), hdc)
EndIf
End