Requester's font
Posted: Fri Dec 07, 2018 2:56 am
Does anybody know how to change the font of the requesters, such as MessageRequester, FontRequester, etc?
http://www.purebasic.com
http://forums.purebasic.com/english/
Code: Select all
;- dialog hook to set font in MessageRequester
Global Hook.L
Global IDYesText.S, IDNoText.S, IDCancelText.S
Global FontID_12Regular.L, FontID_12Bold.L
Procedure ChangeTextFont(hwnd, lParam)
; find messagebox text control and buttons
CN.S = Space(#MAX_PATH)
GetClassName_(hwnd, @CN, #MAX_PATH)
Select UCase(CN)
Case "STATIC"
If GetWindowLong_(hwnd, #GWL_STYLE) & #SS_BITMAP = 0
; change font
SendMessage_(hwnd, #WM_SETFONT, FontID_12Regular, 1)
UnhookWindowsHookEx_(Hook)
ProcedureReturn #False
EndIf
Case "BUTTON"
If GetWindowLong_(hwnd, #GWL_STYLE) & #SS_BITMAP = 0
; change font
SendMessage_(hwnd, #WM_SETFONT, FontID_12Bold, 1)
ProcedureReturn #True
EndIf
EndSelect
ProcedureReturn #True
EndProcedure
Procedure.L HookProc(nCode, wParam, lParam)
If nCode = #HCBT_ACTIVATE
; find text control and change font
EnumChildWindows_(wParam, @ChangeTextFont(), 0)
; change button(s) text
If IDYesText
SetDlgItemText_ (wParam, #IDYES, IDYesText)
SetDlgItemText_ (wParam, #IDNO, IDNoText)
SetDlgItemText_ (wParam, #IDCANCEL, IDCancelText)
EndIf
UnhookWindowsHookEx_ (Hook)
EndIf
;ProcedureReturn CallNextHookEx_(Hook, nCode, wParam, lParam)
EndProcedure
;- message requester with customized font/button captions
Procedure.L MessageRequesterEBS(Title.S, Text.S, flags.L = #PB_MessageRequester_Ok, YesText.S = #Null$, NoText.S = #Null$, CancelText.S = #Null$)
; set button(s) text
; NB: "Yes" text controls all buttons:
; if set, ALL buttons are changed
; if empty, NO buttons are changed
IDYesText = YesText
IDNoText = NoText
IDCancelText = CancelText
Hook = SetWindowsHookEx_(#WH_CBT, @HookProc(), #Null, GetCurrentThreadId_())
; add more space for bigger font
; NB: specific changes for Windows 10!!!
MaxLength.L = Len(Text)
result.L = MessageRequester(Title, Text + Space(1.0 * Len(Text)) + #LF$ + #LF$ + " ", flags)
ProcedureReturn result
EndProcedure
FontID_12Regular = LoadFont(0, "Tahoma", 12, #PB_Font_HighQuality)
FontID_12Bold = LoadFont(1, "Tahoma", 12, #PB_Font_Bold|#PB_Font_HighQuality)
MessageRequesterEBS("Change Font in Message Requester", "This is a bigger font (12 pt)" + #LF$ + "in a Message Requester", #MB_ICONINFORMATION|#PB_MessageRequester_YesNoCancel, "One", "Two", "Three")
Code: Select all
Eax.L = $80000000
Define Rax.Q
Rax = Eax
Code: Select all
; adjust size
SetWindowPos_(hwnd, 0, 0, 0, 70, 25, #SWP_NOMOVE|#SWP_NOZORDER)
Will do that today. I used a few requesters in my Keeper code and will 'massage' them today:):)ebs wrote:fangbeast,
Thanks!
A minor improvement to make the buttons slightly larger, so the text fits better.
Just add this line to the ChangeTextFont procedure, under the "Button" case:Code: Select all
; adjust size SetWindowPos_(hwnd, 0, 0, 0, 70, 25, #SWP_NOMOVE|#SWP_NOZORDER)