フォント(文字サイズ・表示スタイル)を指定する命令

文字フォント ゲームやツールの作成が可能なWindowsプログラミングツール「HSP」(フリーウェア)には、利用するフォントを指定する命令が 用意されてます。font命令sysfont命令です。font命令のパラメータはフォント名、フォントのサイズ、フォントのスタイルの3つです。

これは下の場面で利用します。

文字の描画

HSPのウィンドウ上に文字を表示する命令といえばmes命令(print命令)です。HSP講座サイトなんかでも第1番目に 登場する命令といってもいいぐらい超ベーシックですな。

	font "MS Pゴシック", 14, 1 | 4

	mes "Hello World!"

○ フォント名
 パソコンに導入されてるフォントから利用します。つまり、自分のパソコンで表示できたからといって、他人の パソコンで反映できるとは限りません。通常、「MS Pゴシック」「MS ゴシック」「MS 明朝」「MS P明朝」 (ここまでは英文字はすべて全角)、「MS UI Gothic」(すべて半角)といったところが、どのWindowsでも含まれてます。(黄色は半角スペース)

もし存在しないフォント(間違ったフォント名)が指定されてあったとしても、エラーは表示されません。 いちおうWindowsが自動で他のフォントを探しますが、環境によっては日本語が文字化けしてまったく読め ない場合があるので注意が必要です。

間違ったフォント名を指定してる人をたまに見かけてますが、フォント名の文字を正確に記述してください。 スペースは必ず半角です。英文字は半角のものもあれば、全角のものもあります。

○ 文字サイズ
 文字の表示サイズ(高さ)です。数値が大きければ大きいだけ文字が大きく表示されます。

○ スタイル
 文字の表示スタイルです。太字(ボールド)、斜体(イタリック)、打ち消し線(取り消し線)、下線 (アンダーライン)があります。数字を組み合わせることで、複数のスタイルを同時に適用できます。

そして、アンチエイリアス処理も用意されてます。 文字のギザギザをなくすスムージング処理を施す機能で、Windows XP以降で反映されます。(他にも条件あるので、font命令の講座ページを参照)

オブジェクトの文字列

HSPがサポートするオブジェクトに対してフォント(文字の大きさサイズ、太字などのスタイル)を適用します。ボタン(button命令)、 チェックボックス(chkbox命令)、入力ボックス(input命令)、メッセージボックス(mesbox命令)、 リストボックス(listbox命令)、コンボボックス(combox命令)の全6種です。ただ、オブジェクトはfont命令だけ ではダメで、objmode命令(モード2)を一度だけ呼んでおく必要があります。

//	オブジェクトのフォント1

	objmode 2	// ← 必須!
	font "MS UI Gothic", 30, 1 | 16

	objsize 100, 50
	button "ボタン", *jump

*jump
//	オブジェクトのフォント2

	objmode 2	// ← 必須!
	font "MS UI Gothic", 42, 1

	sdim buf
	input buf, 400, 50

;	通常のデフォルトフォントに戻す
	objmode 1

	input buf, 400, 22
//	オブジェクトのフォント3

	objmode 2	// ← 必須!

	objsize 250

	font "MS UI Gothic", 40, 1 | 16
	listbox value, 200, "HSP\nリストボックス\n文字\nフォント\nサイズ"

	font "MS UI Gothic", 26, 2 | 16
	combox value, 100, "HSP\nコンボボックス\n文字\nフォント\nサイズ"

ちなみに、リストボックスとコンボボックスで項目ごとにフォントを変更するというのは大変です。あえて やるとすれば、Win32 API関数を駆使してオーナードロー(オーナー描画)という、かなーり面倒な処理を用意 する必要があります。
 また、入力ボックスやメッセージボックスで、一部の文字フレーズ(単語)だけ別のフォント(文字色も)にする のは100%ムリです。リッチエディトコントロールなど別のコントロールを利用する必要があります。 (HSP3スクリプトエディタは「Footy2」というエディトコントロールエンジンが採用されてます。)

その他のネタ

指定したフォントを別のフォントに切り替える (オブジェクト)
 オブジェクトの内容(文字列)・状態を維持したままフォントだけ別のものに変更するのは、標準命令では ムリです(clrobj命令して再設置する方法はありますが)。Win32 API関数を利用して論理フォントを生成し、 オブジェクトに対してフォントを再適用するWM_SETFONTメッセージを送信する処理が必要です。

システムフォント
 sysfont命令のフォント番号の17番(デフォルトGUIフォント)は、一般的なWindowsプログラムで使われている フォントが反映されます。他のプログラムと比べて違和感のないインターフェイスにしたい場合はこれを利用しま しょう。HSP3のオブジェクト上の文字列はこのフォントがデフォルトで適用されてますが、mes命令の文字列は 高さ14相当のフォントが適用されてます。

//	デフォルトフォントの高さ&フォント名の取得

//	font "MS UI Gothic", 20

	mes "あいうえおABCDEFG"

;	BMSCR構造体
	mref BMSCR, 67

	mes "高さ : "+-BMSCR.49+""

	sdim lfFaceName
	dupptr lfFaceName, varptr(BMSCR.56), 32, 2
	mes "フォント名 : "+lfFaceName+""

上のサンプルのようなBMSCR構造体を見てフォント情報(フォント名、高さサイズ、スタイル)をスクリプト上から取得する 処理については、コチラを参照。

font命令はパフォーマンスを食う
 ループ内で何度もfont命令を呼びまくると、ムダにパフォーマンスを食います。font命令はパソコンにあるフォント ファイルを読みにいってフォントハンドルというのを生成する処理を内部で行うので、サイズやスタイルの違いがない 同じフォント指定をひたすら呼ぶというのは、意味がないばかりか処理パフォーマンスに響きます。

下のサンプルだと、実行結果そのものは同じですが、自分の環境下では倍くらいのスピード差が出ました。

	repeat 2000
		font "MS UI Gothic", 30

		mes "HSPの世界へようこそ!"
	loop
	font "MS UI Gothic", 30

	repeat 2000
		mes "HSPの世界へようこそ!"
	loop

ムダにパフォーマンスを食わせたくないプログラム(ゲームなど)の場合は、特定フォントを適用させた バッファ画面(buffer命令)を用意しておいて、そこで描画させた文字列をgcopy命令でイメージとして切り出し てくるような工夫が必要かもしれません。

キーワード de HSP

HSPミニ講座

★ Yahoo!経由用ページ : ファイル | フォルダ | メニュー | マウス | ウィンドウ | オブジェクト | 文字列 | システム | 関数 | sendmsg命令 | その他 | サイトマップ | リンク