FB II Compiler

PG PRO

Debugging

Memory

System

Mathematics

Resources

Disk I/O

Windows

Controls

Menus

Mouse

Keyboard

Text

Fonts

Drawing

Sound

Clipboard

Printing

Communication

ASM

Made with FB

WINDOWS

Change the font in dialog and alert windows


Static texts in dialogs can be changed using standard FB if you set the dialog window to be the current window port.
' FB II code
oldRes = FN CURRESFILE                  ' get current res file
CALL USERESFILE (gAppRef%)            ' apps res fork
CALL GETPORT (oldport&)                 ' get FB window grafport
Dlg&=FN GETNEWDIALOG(303,0,-1)     'get hndl for DLOG resource
LONG IF Dlg& > 0                            'valid handle?
 CALL SETPORT(Dlg&)                     'set grafport
 CALL SELECTWINDOW (Dlg&)          'set output to DLOG window
 CALL TEXTFONT (2)                   ' set font for static texts
 CALL TEXTSIZE (10)                   ' set text size for static texts
 CALL DRAWDIALOG(Dlg&)             'draw DLOG window on screen
 DO
  CALL MODALDIALOG (0, butn%)          'get input from DLOG window
 UNTIL butn% = 1
 CALL DISPOSDIALOG (Dlg&)               ' dispose of dialog
 CALL SETPORT (oldport&)             ' set port back to FB window
 CALL USERESFILE (oldRes)        ' set res file to previous res file
END IF
Al Staffieri Jr.

Well, the solution turned out to be pretty simple. This will change the font of both the static and edit text items and, I presume, alert boxes.
% _dlgFont,_helvetica
To restore the system font for someone else's dialog boxes:
% _dlgFont,0
There doesn't seem to be an easy way of changing the size or style of the edit text. I suppose you could manually get the handles to all the edit fields in the dialog box and poke the desired values into the text edit fields, but this would be a lot of work. You would have to write a routine which cycled through all the items in the dialog, checked the item type, and worked only with items that were of the type editable text. The routine would looksomething like this:
LOCAL FN SetFontSize(dPtr&)
  item%=0
  DO
    INC(item%)
    CALL GETDITEM (dPtr&,item%,dItmType%,dItmH&,dItmRect)
    LONG IF dItmH&>0 AND dItmType%=_editText
      dItmH&..txFont%=_helvetica
      dItmH&..txSize%=12
    END IF
   UNTIL dItmH&=0
END FN
You would also have to set the font and size of the active edit field:
dPtr&.textH..txFont%=_helvetica
dPtr&.textH..txSize%=12
I haven't tried this so the values of the constants need to be checked against those in the dialog record and edit record. I don't this FB always uses the same values as IM. It also would skip over any items that were disabled.
Mark