WinBatch Tech Support Home

Database Search

If you can't find the information using the categories below, post a question over in our WinBatch Tech Support Forum.

TechHome

Dialog Editor version 6.X
plus
plus

Can't find the information you are looking for here? Then leave a message over on our WinBatch Tech Support Forum.

Change Font in Dialog Controls


Question:

I would like to have the font change based on what item is selected in a dialogbox. for example selecting a radiobutton the text would bold and/or italisize, I can get it to change color but would ratherjust have the font change. I have looked at dialogcontrolset but there does not seem to be a feature for this. is there any easy way of doing this??

Answer:

Sorry there is currently no real way to change a controls font.

However, maybe you could create a control for each of the font types (Regular, Bold and Italic) you would like displayed, then use the DialogControlState Invisible style on each control then remove that style to display that control to the user...

Sample code that uses invisible controls:


;============================================================
;============================================================
;============================================================


#DefineFunction MyDialogCallbackProc(MyDialog_Handle,MyDialog_Message,MyDialog_ID,rsvd1,rsvd2)
   ;DialogprocOptions Constants
   MSG_INIT=0                ; The one-time initialization
   MSG_TIMER=1               ; Timer event
   MSG_BUTTONPUSHED=2        ; Pushbutton or Picturebutton
   MSG_RADIOPUSHED=3         ; Radiobutton clicked
   MSG_CHECKBOX=4            ; Checkbox clicked
   MSG_EDITBOX=5             ; Editbox or Multilinebox
   MSG_FILESELECT=6          ; Filelistbox
   MSG_ITEMSELECT=7          ; Itembox
   MSG_COMBOCHANGE=8         ; Combobox/Droplistbox
   MSG_CALENDAR=9            ; Calendar date change
   MSG_SPINNER=10            ; Spinner number change
   MSG_CLOSEVIA49=11         ; Close clicked (Enabled via Intcontrol 49)
   MSG_FILEBOXDOUBLECLICK=12 ; Get double-click message on a FileListBox
   MSG_ITEMBOXDOUBLECLICK=13 ; Get double-click message on an ItemBox
   DPO_DISABLESTATE=1000     ; codes -1=GetSetting 0=EnableDialog 1=DisableDialog
   DPO_CHANGEBACKGROUND=1001 ; -1=GetSetting otherise bitmap or color string
   ;DialogControlState Constants
   DCSTATE_SETFOCUS=1        ; Give Control Focus
   DCSTATE_QUERYSTYLE=2      ; Query control's style
   DCSTATE_ADDSTYLE=3        ; Add control style
   DCSTATE_REMOVESTYLE=4     ; Remove control style
   DCSTATE_GETFOCUS=5        ; Get control that has focus
   DCSTYLE_INVISIBLE=1       ; Set Control Invisible
   DCSTYLE_DISABLED=2        ; Set Control Disabled
   DCSTYLE_NOUSERDATA=4      ; Note: Setable via DialogControlState function ONLY SPINNER control only
   DCSTYLE_READONLY=8        ; Sets control to read-only (user cannot type in data) EDITBOX MULTILINEBOX SPINNER
   DCSTYLE_PASSWORD=16       ; Sets 'password mode' where only *'s are displayed EDITBOX
   DCSTYLE_DEFAULTBUTTON=32  ; Sets a button as the default button PUSHBUTTON PICTUREBUTTON
   DCSTYLE_DIGITSONLY=64     ; Set edit box to accept digits only EDITMOX MULTILINEBOX
   DCSTYLE_FLAT=128          ; Makes a 'flat' hyperlink-looking button PUSHBUTTON PICTUREBUTTON
   DCSTYLE_NOADJUST=256      ; Turns off auto-height adjustment  ITEMBOX FILELISTBOX
   DCSTYLE_TEXTCENTER=512    ; Center text in control VARYTEXT STATICTEXT
   DCSTYLE_TEXTRIGHT=1024    ; Flush-Right text in control VARYTEXT STATICTEXT
   ;DialogControlSet / DialogControlGet Constants
   DC_CHECKBOX=1             ; CHECKBOX
   DC_RADIOBUTTON=2          ; RADIOBUTTON
   DC_EDITBOX=3              ; EDITBOX MULTILINEBOX
   DC_TITLE=4                ; PICTURE RADIOBUTTON CHECKBOX PICTUREBUTTON VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON
   DC_ITEMBOXCONTENTS=5      ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_ITEMBOXSELECT=6        ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_CALENDAR=7             ; CALENDAR
   DC_SPINNER=8              ; SPINNER
   DC_MULTITABSTOPS=9        ; MULTILINEBOX
   DC_ITEMSCROLLPOS=10       ; ITEMBOX FILELISTBOX
   DC_BACKGROUNDCOLOR=11     ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FILELISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX
   DC_PICTUREBITMAP=12       ; PICTURE PICTUREBUTTON
   DC_TEXTCOLOR=13           ; RADIOBUTTON CHECKBOX VARYTEXT STATICTEXT GROUPBOX PUSHBUTTON ITEMBOX FIELLISTBOX DROPLISTBOX SPINNER EDITBOX MULTILINEBOX
   DC_ITEMBOXADD=14          ; ITEMBOX FILELISTBOX DROPLISTBOX
   DC_ITEMBOXREMOVE=15       ; ITEMBOX FILELISTBOX DROPLISTBOX


   switch MyDialog_Message
      case MSG_INIT
         ;DialogProcOptions(MyDialog_Handle,MSG_TIMER,1000)
         DialogProcOptions(MyDialog_Handle,MSG_BUTTONPUSHED,@TRUE)
         DialogProcOptions(MyDialog_Handle,MSG_RADIOPUSHED,@TRUE)
         return(-1)

     case MSG_BUTTONPUSHED
        switch MyDialog_ID
           case 001
              return(-1)

           case 002
              return(-1)

        endswitch    ;MyDialog_ID
        return(-1)      ;  Do default processing

     case MSG_RADIOPUSHED
        switch MyDialog_ID
           case 006 ;Regular
			      ;Make all invisible
					if !DialogControlState(MyDialog_Handle,003,2,1) then DialogControlState(MyDialog_Handle,003,3,1)
					if !DialogControlState(MyDialog_Handle,004,2,1) then DialogControlState(MyDialog_Handle,004,3,1)
					if !DialogControlState(MyDialog_Handle,005,2,1) then DialogControlState(MyDialog_Handle,005,3,1)
					;Make regular visible
					DialogControlState(MyDialog_Handle,003,4,1)
					return(-1)

           case 007 ;Italic
			      ;Make all invisible
					if !DialogControlState(MyDialog_Handle,003,2,1) then DialogControlState(MyDialog_Handle,003,3,1)
					if !DialogControlState(MyDialog_Handle,004,2,1) then DialogControlState(MyDialog_Handle,004,3,1)
					if !DialogControlState(MyDialog_Handle,005,2,1) then DialogControlState(MyDialog_Handle,005,3,1)
					;Make Italic visible
					DialogControlState(MyDialog_Handle,004,4,1)
					return(-1)

           case 008  ;Bold
			      ;Make all invisible
					if !DialogControlState(MyDialog_Handle,003,2,1) then DialogControlState(MyDialog_Handle,003,3,1)
					if !DialogControlState(MyDialog_Handle,004,2,1) then DialogControlState(MyDialog_Handle,004,3,1)
					if !DialogControlState(MyDialog_Handle,005,2,1) then DialogControlState(MyDialog_Handle,005,3,1)
					;Make Bold visible
					DialogControlState(MyDialog_Handle,005,4,1)
					return(-1)

        endswitch    ;MyDialog_ID
        return(-1)      ;  Do default processing

   endswitch       ; MyDialog_Message
   return(-1)      ;  Do default processing
#EndFunction       ;End of Dialog Callback MyDialogCallbackProc

;============================================================
;============================================================
;============================================================


MyDialogFormat=`WWWDLGED,6.1`

MyDialogCaption=`WIL Dialog 1`
MyDialogX=002
MyDialogY=053
MyDialogWidth=187
MyDialogHeight=124
MyDialogNumControls=008
MyDialogProcedure=`MyDialogCallbackProc`
MyDialogFont=`DEFAULT`
MyDialogTextColor=`DEFAULT`
MyDialogBackground=`DEFAULT,DEFAULT`
MyDialogConfig=0

MyDialog001=`017,087,033,011,PUSHBUTTON,DEFAULT,"OK",1,1,32,DEFAULT,DEFAULT,DEFAULT`
MyDialog002=`074,087,034,011,PUSHBUTTON,DEFAULT,"Cancel",0,2,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog003=`065,031,075,021,STATICTEXT,DEFAULT,"Text",DEFAULT,3,0,"Microsoft Sans Serif|11059|40|34","0|0|0",DEFAULT`
MyDialog004=`066,033,070,017,STATICTEXT,DEFAULT,"Text",DEFAULT,3,1,"Microsoft Sans Serif|11059|140|34","0|0|0",DEFAULT`
MyDialog005=`065,031,075,021,STATICTEXT,DEFAULT,"Text",DEFAULT,3,1,"Microsoft Sans Serif|11059|70|34","0|0|0",DEFAULT`
MyDialog006=`014,025,071,011,RADIOBUTTON,MyRadioVar,"Regular",1,6,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog007=`014,038,041,010,RADIOBUTTON,MyRadioVar,"Italic",2,7,DEFAULT,DEFAULT,DEFAULT,DEFAULT`
MyDialog008=`014,050,041,011,RADIOBUTTON,MyRadioVar,"Bold",3,8,DEFAULT,DEFAULT,DEFAULT,DEFAULT`

ButtonPushed=Dialog("MyDialog")

More...

Note this probably can be done but would by making calls directly to Windows APIs with dllcall and binary buffers.

Here is a link to a tech article about creating and setting fonts using the Windows API and dllcall: http://techsupt.winbatch.com/webcgi/webbatch.exe?techsupt/nftechsupt.web+WinBatch/Boxes~Functions+Using~Other~Fonts~in~Boxes.txt

This example is for the advanced user and uses boxes instead of a dialog but the principle is the same.

Note: WB dialog push buttons are a highly customized versions of a standard Windows button. They simple ignore the WM_SETFONT message. Most of the other dialog controls will accept the message and dutifully change their font.

Use this ability with extreme caution. Some WB dialog controls use their initial font size to determine their overall size and changing font size can make a mess of the rendering process. This is the primary reason that font changes were not added to the dialogs. I think that there is some possibility that we may be able to add it to a future version (with some restrictions.) I will see that it is added to the list of suggested enhancements.


Article ID:   W16405
File Created: 2014:07:18:09:50:36
Last Updated: 2014:07:18:09:50:36