Requester's font
-
- Enthusiast
- Posts: 339
- Joined: Tue Jan 30, 2007 5:47 am
- Location: Hong Kong
Requester's font
Does anybody know how to change the font of the requesters, such as MessageRequester, FontRequester, etc?
Re: Requester's font
Here's my solution for MessageRequesters (Windows only), cobbled together from various tips found here.
It's not elegant, but it works!
The code Text + Space(1.0 * Len(Text)) + #LF$ + #LF$ + " " is my attempt to allow more space for the bigger font.
It requires some trial and error to make sure the text fits, especially because it varies depending on the font you use, as well as the Windows version.
If anyone knows how to have Windows automatically adjust the MessageRequester size based on the font, I would love to know.
It's not elegant, but it works!
The code Text + Space(1.0 * Len(Text)) + #LF$ + #LF$ + " " is my attempt to allow more space for the bigger font.
It requires some trial and error to make sure the text fits, especially because it varies depending on the font you use, as well as the Windows version.
If anyone knows how to have Windows automatically adjust the MessageRequester size based on the font, I would love to know.
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")
Re: Requester's font
It seems a second internal effect can disturb gurj :
Here, it seems that the higher 32 bits are set to the same status of Bit #31, what it seems to disturb some tests...
$FFFFFFFF80000000
"Normally" we could expect to this value :
$0000000080000000.
But the hardware is producing differently.
Code: Select all
Eax.L = $80000000
Define Rax.Q
Rax = Eax
$FFFFFFFF80000000
"Normally" we could expect to this value :
$0000000080000000.
But the hardware is producing differently.
Re: Requester's font
You need more code to change the MessageBox window contents. It is not cross platform and easier to create your own PB sticky window for such effects.
The nice thing about standards is there are so many to choose from. ~ Andrew Tanenbaum
-
- Enthusiast
- Posts: 143
- Joined: Fri Mar 29, 2013 4:55 pm
- Location: The Netherland
Re: Requester's font
How to "center" the above code on a existing window ?.
Kind regards,
Little-man
Kind regards,
Little-man
- Fangbeast
- PureBasic Protozoa
- Posts: 4747
- Joined: Fri Apr 25, 2003 3:08 pm
- Location: Not Sydney!!! (Bad water, no goats)
Re: Requester's font
EBS, this is useful stuff. I am running my widescreen in 2560x1080 at 125% upscaling and requesters were still tiny so your code is very, very useful.
Just had to change "hook" to "chookie" and another third party code was using it already.
Just had to change "hook" to "chookie" and another third party code was using it already.
Amateur Radio, D-STAR/VK3HAF
Re: Requester's font
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:
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)
- Fangbeast
- PureBasic Protozoa
- Posts: 4747
- Joined: Fri Apr 25, 2003 3:08 pm
- Location: Not Sydney!!! (Bad water, no goats)
Re: Requester's font
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)
Amateur Radio, D-STAR/VK3HAF