はじめに
Visual Basic 6でテキストを描画するのは、プロセスも結果も非常に単純でした。まずフォームまたはPictureBoxのCurrentX
プロパティとCurrentY
プロパティを設定し、それからPrint
メソッドを呼び出します。
それに対し、.NETが提供するテキスト描画ツールはもっと強力です。ただし、能力が増大すれば複雑さも増すものです。.NETではテキストに対して驚くほど多様な操作を行えますが、それだけ学ぶべきことも多くあります。まずは単純なテキスト表示から始めて、フォントや位置合わせの変更、クリッピング、折り返し、シェーディング、変形・移動といった新たな技法を少しずつ覚えていけば、しだいに.NETのテキスト表示機能に精通するようになるでしょう。
本稿のサンプルコードには、これらの技法の具体例を示す一連の小さなアプリケーションが含まれています。このコードをそのまま使用することもできますし、これをテンプレートとして使用して、独自のアプリケーションを作成してもよいでしょう。なお、本稿の例ではVB.NETを使用していますが、ダウンロードできるサンプルコードにはVB.NETバージョンとC#バージョンが含まれています。
.NETにおけるテキストの基礎
.NETアプリケーションでテキストを描画するときは、必ずGraphics
オブジェクトが必要になります。このオブジェクトには、テキストはもとより、直線、多角形、曲線、イメージを描画するのに必要なツールが備わっています。テキストはDrawString
メソッドで描画します。
.NETのグラフィックスで素晴らしいことの1つは、Graphics
オブジェクトを使って何にでも描画できることです。描画する対象はフォーム、PictureBox、オーナー描画メニュー、プリンタ、あるいはもっと風変わりなものでもかまいません。つまり、1種類の描画方法を学べば、後はどんなサーフェスへの描画操作も同じように行えるということです。
本稿の例では、フォームのPaint
イベントハンドラで描画を行っています。このイベントハンドラのe.Graphics
パラメータが、描画すべきグラフィックスオブジェクトを提供します。
.NETのテキスト描画ツールは複雑かもしれませんが、テキストを最も単純な形で描画するのは難しくありません。例えば、フォームのPaint
イベントハンドラの中に次のコードを記述すれば、フォームの左上隅からのピクセル数として指定した点(10, 10)に「BasicText」というテキストを描画できます。テキストはフォームの現在のフォントで描画され、ブルーになります。このコードはVB.NETのものですが、サンプルコードにはVB.NETバージョンとC#バージョンが含まれています。
e.Graphics.DrawString("BasicText", Me.Font, Brushes.Blue, 10, 10)
このコードを使うのは非常に簡単です。デザイン時にフォームのフォントを変更すれば、テキストを好みのフォントで描画できます。ただし、描画するテキストがすべて同じフォントになるという難点があります。
この問題に対処するため、次のような少しだけ複雑なバージョンで、このわずかなテキストのために独自のフォントを用意します。このコードは、24ポイントのボールドのComic Sans MSフォントを作成する、Usingステートメントで始まります。Usingステートメントの後のEnd Usingステートメントに達すると、VB.NETによってそのフォントのDispose
メソッドが自動的に呼び出されます。フォントを作成した後は、先ほどのコードと同じようにDrawString
を呼び出しますが、今度は新しいフォントを渡す点が異なります。
Using the_font As New Font("Comic Sans MS", 24, FontStyle.Bold) e.Graphics.DrawString("BasicText", the_font, _ Brushes.Blue, 10, 20) End Using
図1は、この2つのDrawString
呼び出しの結果を示しています。Graphics
オブジェクトのDrawString
メソッドはテキストを描画し、フォームのフォントを使用することも、カスタムフォントを作成することもできます。
DrawString
はキャリッジリターンやタブなどの特殊文字も処理します。図2は前記の例と同じような描画コードの実行結果ですが、この例ではキャリッジリターンとラインフィードの対およびタブを含んだテキストを描画しています。DrawString
はキャリッジリターンとラインフィードの組み合わせで新しい行を開始し、タブで水平スペースを追加します。
VB.NETバージョンでは"The quick brown fox" & vbCrLf & "jumps over" & vbTab & "the lazy dog"
という文字列を描画し、C#バージョンでは"The quick brown fox\njumps over\tthe lazy dog"
という文字列を描画します。