SETFONT

グラフィックス関数:指定した特性の組に一致する単一フォントを検索し,OUTGTEXT 関数が使用する現在のフォントとしてそれを設定します。

モジュールUSE DFLIB

形式

result = SETFONT (options)

options
(入力) CHARACTER*(*)。フォント特性を表す文字列 (詳細は以下を参照)。

結果

結果の型は INTEGER(2) です。成功すれば,結果はフォントの指標数 (nx オプションで使用する x) で,そうでなければ -1 です。

SETFONT 関数は,options で指定した特性に一致するフォントを利用可能なフォント一覧で検索します。特性に一致するフォントがあれば,それが現在のフォントになります。現在のフォントは,引き続き呼び出されるすべての OUTGTEXT 関数で使用されます。現在のフォントは,だだ 1 つのフォントです。

options 引数は,要求するフォントを表す以下のような文字コードで構成されます。options パラメタには,大文字小文字の区別,場所の区別はありません。

t'fontname' 要求するタイプフェース名。インストールされているすべてのフォントを指定することができます。
hy 字高。y はピクセル数を表しています。
wx 字幅。x はピクセル数を表しています。
f 固定長フォントのみを選択 (p 特性とは一緒に使えません)。
p 可変長フォントのみを選択 (f 特性とは一緒に使えません)。
v ベクトル・マップ・フォントのみを選択 (r 特性とは一緒に使えません)。WNT では,Roman,Modern, および Script がベクトル・マップ・フォントの例です。これは,プロッタ・フォントとも呼ばれます。True Type フォント (たとえば,Arial,Symbol,および Times New Roman) はベクトル・マップ・フォントではありません。
r ラスタ・マップ・フォントのみを選択 (v 特性とは一緒に使えません)。WNT では,Courier,Helvetica,および Palatino がラスタ・マップ・フォントの例です。これは,スクリーン・フォントとも呼ばれます。Tru Type フォントはラスタ・マップ・フォントではありません。
e ボールド・テキスト書式を選択。フォントがボールド書式を許可していなければ,このパラメタは無視されます。
u 下線テキスト書式を選択。フォントが下線を許可していなければ,このパラメタは無視されます。
i イタリック・テキスト書式を選択。フォントがイタリック書式を許可していなければ,このパラメタは無視されます。
b 指定した他のパラメタに最もよく一致するフォントを選択。
nx フォント番号 x を選択。x は,INTIALIZEFONTS 関数が返す値よりも小さいか等しい数です。

単独で使用する nx を除いて,必要とする様々なオプションを指定することができます。相互に排他的 (たとえば,f/p または r/v の組) なオプションを指定した場合,SETFONT 関数はそれらを無視します。nx と非互換パラメタを一緒に使用してもエラーは発生しません。

b オプションが指定され,少なくとも 1 つのフォントが初期化されている場合,SETFONT は 1 つのフォントを設定し,成功したことを示す 0 を返します。

フォントを選択する場合,SETFONT 関数は以下の基準を上から下に使用します。

  1. ピクセル高

  2. タイプフェース

  3. ピクセル幅

  4. 固定長または可変長フォント

フォントに対するピクセル幅,ピクセル高を指定することもできます。どちらかに存在しない値を選択し,b オプションを指定した場合,SETFONT は最も近い値を選択します。

小さいフォント・サイズが大きいサイズよりも優先します。b オプションと共に Arial 12 を要求し,Arial 10 と Arial 14 のみが利用可能な場合,SETFONT は Arial 10 を選択します。

ピクセル高とピクセル幅に存在しない値を選択した場合,SETFONT 関数は適切なフォント・サイズを得るためにベクトル・マップ・フォントに拡大率を適用します。この自動拡大は,r オプション (ラスタ・マップ・フォント) を指定した場合,または,特定のタイプフェースを指定し,b オプションを指定しない場合には適用されません。

nx パラメタを指定した場合,SETFONT は指定した他のオプションすべてを無視し,x に対応するフォント番号のみを適用します。

字高が指定され,字幅が指定されていない場合,またはその逆の場合,SETFONT は正しいフォント特性を保つために指定されていない値を計算します。

字幅が指定され,字高が指定されない場合,SETFONT は,フォント・タイプ毎に様々な値を持つ基本字高を使用します。これにより文字が歪んだように表示されるかもしれません。特に,かなり横幅が広い文字を指定した場合に顕著です。この動作は,Win32 API CreateFontIndirect の場合と同じです。以下に示すサンプル・プログラムは,指定した字幅に対する正しい字高の計算方法を示しています。

フォント関数は,OUTGTEXT と現在のグラフィックス位置にのみ影響します。他の Fortran グラフィックス・ライブラリー関数はフォント使用で影響されません。

開いた各ウィンドウに対して,SETFONT を呼び出す前に INITIALIZEFONTS を呼び出さなければなりません。INITIALIZEFONTS は,続いて呼び出される SETFONT が成功するために,各新しい子ウィンドウが開かれた後に実行される必要があります。

互換性

STANDARD GRAPHICS QUICKWIN GRAPHICS LIB

関連情報

GETFONTINFOGETGTEXTEXTENTGRSTATUSINITIALIZEFONTSOUTGTEXTSETGTEXTROTATION

	! QuickWin または Standard Graphics アプリケーションでビルドします。
	USE DFLIB
	INTEGER(2) fontnum, numfonts
	TYPE (xycoord) pos
	numfonts = INITIALIZEFONTS ( )
	! タイプフェースを Arial,字高を 18,字幅を 10,イタリックを設定。
	fontnum = SETFONT ('t''Arial''h18w10i')
	CALL MOVETO (INT2(10), INT2(30), pos)
	CALL OUTGTEXT('Demo text')
	END

次に他の例を示します。

	! QuickWin または Standard Graphics アプリケーションでビルドします。
	!	
	! 以下のプログラムは,指定したフォント幅に対する適切なフォント高を
	! 計算する方法を示しています。
	USE DFLIB
	INTEGER(2) fontnum, numfonts
	TYPE (xycoord) pos
	TYPE (rccoord) rcc
	TYPE (FONTINFO) info
	CHARACTER*11 str, str1
	CHARACTER*22 str2
	real rh
	integer h, inw
	str = "t'Arial'bih"
	str1= " "
	numfonts = INITIALIZEFONTS ( )
	! 基本の字高と字幅。これは正しく動作します。
	! この設定から字幅と字高の比率を得ます。
	fontnum = SETFONT ("t'Arial'")
	ireturn = GETFONTINFO(info)
	rh =  real(info%pixheight)/real(info%avgwidth)

	! 40 の幅に対する高さを計算します
	write(*,*) 'Input desired width:'
	read(*,*) inw
	h =int(inw*rh)
	write(str1,'(I3.3)') h
	str2 = str//str1
	print *,str2
	fontnum = SETFONT (str2)
	CALL MOVETO (INT2(10), INT2(50), pos)
	CALL OUTGTEXT('ABCDEFGabcdefg12345!@#$%')
	CALL MOVETO (INT2(10), INT2(50+10+h), pos)
	CALL OUTGTEXT('123456789012345678901234')
	ireturn = GETFONTINFO(info)
	call settextposition(4,1, rcc)
	print *,  info%avgwidth, info%pixheight
	END