■文字フォントのサイズ管理

一般的にいって、フォームやピクチャボックスなどで利用するスケールモードはピクセルである。というのは、その他の指定単位は実寸をベースにしたものであり、印刷が関連しない限りは利用頻度は低いからだ。

例えば、ゲームに使うグラフィックスやキャラクタパターンは、縦横のサイズをドットを基準にして作成する。当然、それを表示する際にもドット(ピクセル)が管理単位でないと都合が悪い。そもそも、実行時のディスプレイも確定していない状態では、実寸をベースにしたゲームなど成立しそうにない。

というわけで、たいていはデフォルトの Twip をピクセルに直して使うのだが、文字フォントだけはポイントで指定しなければならない。しかし、このポイントというのが曲者で、ディスプレイサイズの影響をモロに受けてしまう実寸指定なのである。そのため、開発時のサイズしか考慮していないと、異なったサイズのディスプレイやフォント指定(大きなフォント/小さなフォント)によっては、文字が隠れて見えなくなったり、逆に小さすぎて見にくくなったりしてしまう。

汎用のソフトウェアを作成する上で、これを「仕様だから……」などと逃げてしまうことは絶対に避けなければならない。よく「バグも宣言すれば仕様になる」などとのたまう御仁がおるが、これは「頂戴いたします」と言えば泥棒ではないとうそぶくようなもの。そんな論理は通用するわけがない。

したがって、レイアウトを考えて文字表示をする場合は、必ずピクセルから割り出したポイント数を指定する必要がある。詳しい計算根拠は、拙著『Visual Basic スーパープログラミング』で解説したので省くが、文字サイズの指定は次のようにすればよいのだ。

ポイント数=ピクセル数 × Screen.TwipsPerPixelY ÷ 20

気をつけなければならないのは、コンピュータにおける文字ポイントは上下の高さが基準になっており、左右は一定ではないということ。つまり、Font.Size プロパティで指定するのは文字の高さだけなのだ。

では、肝心の横幅はどのようにして調整するのかというと、TextWidth メソッドを使って文字幅を調べ、現在のX座標(CurrentX プロパティ)に加算して割り出すのだ。面倒なようだが、本気でユーザーのことを考えるなら当然のこと。このあたりにも、サンプルプログラムと本格プログラムとの違いが潜んでいるのである。