Setting fonts
Fonts in Word are controlled by the Font dialog on the Format menu (shown in
Figure 4
). That dialog controls the font
Figure 4 . Specifying fonts. The Font dialog controls font, size, style, and color, as well as unusual options like kerning and spacing between characters. In Automation, the Font object manages all of these features.
Range, Selection, and Style (discussed in the section "Working with styles" later in this chapter), as well as many other objects, each have a Font property that points to a Font object. Changing the properties of the Font object modifies the font of that portion of the document. For example, to change all the customer information shown in Figure 2 to 12-point Arial, you can use this code:
oRange = oDocument.Range()
oRange.Font.Name = "Arial"
oRange.Font.Size = 12
To simplify matters, just set the desired font before sending the text to the document. Here’s another version of the program to send the customer address. This one uses 12-point Arial from the start:
#DEFINE CR CHR(13)
USE _SAMPLES + "TasTrade\Data\Customer"
LOCAL oDocument, oRange
oDocument = oWord.Documents.Add() && Use the Normal template
oRange = oDocument.Range()
oRange.Font.Name = "Arial"
oRange.Font.Size = 12
LOCAL cText
cText = ""
cText = Customer_ID + ": " + Company_Name + CR
cText = cText + "Attn: " + TRIM(Contact_Name) + " - " + Contact_Title + CR
cText = cText + Address + CR
cText = cText + TRIM(City) + " " + TRIM(Region) + Postal_Code + CR
cText = cText + UPPER(Country) + CR
oRange.Text = ""
oRange.InsertAfter(cText)
In fact, this isn’t the best way to set the font for a whole document. It’s better to use a template where the font of the Normal style has been set as needed. (For more information, see the section "Working with styles" later in this chapter.)
Table 3 lists Font properties you’re likely to want to work with, along with Word constants for them, where appropriate.
Table 3 . Font properties. The Font object controls the appearance of the font, from the font face to its size, style, and much more. This table shows the more common properties. Check Help for more unusual settings.
|
Property |
Type |
Description |
|
Name |
Character |
The name of the font. |
|
Size |
Numeric |
The size of the font, in points. |
|
Bold |
Numeric or Logical |
Indicates whether the text is bold. |
|
Italic |
Numeric or Logical |
Indicates whether the text is italic. |
|
Underline |
Numeric |
The type of underline. wdUnderlineNone
wdUnderlineDouble 3 wdUnderlineSingle 1 wdUnderlineDotted 4 wdUnderlineWords 2 wdUnderlineThick 6
|
|
Superscript, Subscript |
Numeric or Logical |
Indicates whether the text is superscript or subscript. |
It’s possible for the text in a range (or whatever area the Font object covers) to have more than one font setting. When that happens, the various numeric properties get the value wdUndefined (9999999). (That’s also why properties that you’d expect to be logical are listed as numeric or logical.) Font.Name is the empty string in that situation.
The
IF oFont.Bold
That’s because of Bold’s dual numeric/logical capabilities. When you assign logical values, Word
You can allow the user to choose the font by calling VFP’s GetFont() function first. Here’s a function that lets the
SetUserFont(oRange.Font)
Listing 1 shows the code for SetUserFont (it’s also included in the Developer Download files available at www.hentzenwerke.com ).
Listing 1 . This function lets the user choose a font, prompting with the name, size, and style of the font object it receives as a parameter.
* SetUserFont.PRG
* Let the user specify a font, then set
* a passed font object to use it.
#DEFINE TRUE -1
#DEFINE FALSE 0
LPARAMETERS oFont
* oFont = Reference to a font object
LOCAL cName, nSize, cStyle
LOCAL cFontString, aFontInfo[3]
* Did we get a font object to work with?
IF VarType(oFont) <> "O"
RETURN .F.
ENDIF
* Get current settings of font object.
WITH oFont
cName = .Name
nSize = .Size
cStyle = ""
IF .Bold = TRUE && Can't use VFP .T. here
cStyle = cStyle + "B"
ENDIF
IF .Italic = TRUE && or here
cStyle = cStyle + "I"
ENDIF
ENDWITH
* Ask the user for a font
cFontString = GetFont(cName, nSize, cStyle)
IF EMPTY(cFontString)
* User cancelled
RETURN .F.
ELSE
* Parse the
cFontString = CHRTRAN(cFontString, ",", CHR(13))
ALINES(aFontInfo,cFontString)
* Apply them to the font object
WITH oFont
.Name = aFontInfo[1]
.Size = VAL(aFontInfo[2])
IF "B"$aFontInfo[3]
.Bold = .T. && .T. works here
ENDIF
IF "I"$aFontInfo[3]
.Italic = .T.
ENDIF
ENDWITH
ENDIF
RETURN .T.
Copyright 2000 by Tamar E. Granor and Della Martin All Rights Reserved