.NET TIPS 機種依存文字のJIS90字体とJIS2004字体を同時に表示するには?[3.0、3.5、C#、VB]デジタルアドバンテージ 一色 政彦2008/05/10 |
![]() |
Windows Vistaでは、「JIS2004」(JIS X 0213:2004)という新バージョンのJIS漢字コードに対応した日本語フォントとして、「メイリオ」や、MSゴシック3書体(「MS ゴシック」、「MS P ゴシック」、「MS UI Gothic」)、MS明朝2書体(「MS 明朝」「MS P 明朝」)が導入された。VistaではこのJIS2004対応フォントが標準で使われるが、JIS2004では字体の変更や文字の追加が行われているため、従来のWindows XPやWindows Server 2003などと文字の表示が異なる場合がある(なお、従来バージョンのJIS漢字コードは「JIS90」と呼ばれる)。
このような文字の表示の違いはアプリケーションに何らかの影響を及ぼす可能性がある(詳しくは「特集:VB6アプリのWindows Vista対応(後編)」の「フォント問題」を参考にしてほしい)。そのため、従来のXPとVistaでどのように文字が変わるのかを検証したいこともあるだろう。しかし、OSをXPとVistaで切り替えながら、文字を見比べるのは大変である。
実は、Vistaに導入されたJIS2004フォントは、JIS90の字体(いわゆる異体字)も内部に持っている。通常、この字体は表示できないが、.NET Framework 3.0以降で追加された新描画技術のWPF(Windows Presentation Foundation)にはこれを表示する機能(=OpenTypeアウトラインを持つフォントの日本語字体を切り替えるFeature Tagを指定する機能)が搭載されている。そこで本稿では、この機能を活用して、JIS90の字体とJIS2004の字体を同時に表示する方法を紹介する。
なお以降では、JIS90とJIS2004で字体が異なる文字は「機種依存文字」と呼ぶ。
WPFアプリケーションの作成
まずは、機種依存文字を入力/表示するためのWPFアプリケーション(サンプル・アプリケーション)を作成しよう。次の画面のようなサンプル・アプリケーションを開発する。詳しい手順は後述の説明を参考にしてほしい。
![]() |
サンプル・アプリケーションの開発例 |
WPFアプリケーションのプロジェクトを作成するには、メニュー・バーの[ファイル]−[新規作成]−[プロジェクト]を選択して[新しいプロジェクト]ダイアログを表示する。その[新しいプロジェクト]ダイアログで、左側の[プロジェクトの種類]のツリー表示の中から[Visual C#]もしくは[Visual Basic]の配下にある[Windows]を選択し、右側の[テンプレート]の一覧から「WPF アプリケーション」のテンプレートを選択して[OK]ボタンをクリックする。
今回のサンプル・アプリケーションでは、TextBoxコントロールが見やすくなるように、WPFフォーム(ウィンドウ)の背景色を黄色に設定する。具体的には、WPFフォームを選択した状態で[プロパティ]ウィンドウので[Background]プロパティに「#FFFFFFCC」を設定すればよい。
次に、テキストを入力/表示するためのTextBoxコントロールを2つ配置する。WPFフォーム・デザイナで1つ目のTextBoxコントロールを選択して[プロパティ]ウィンドウの上部にある[Name]設定欄に「textBoxJis90」を入力する。2つ目も同様の手順で「textBoxJis04」を入力する。
そして、それぞれのTextBoxコントロールの入力内容が変化したときに、もう一方のTextBoxコントロールにその内容が反映するようにしておく。これには、TextBoxコントロールをダブルクリックするとTextChangedイベント・ハンドラが追加されるので、これを両方のTextBoxコントロールに対して行い、次の太字部分のコードを追加する。
|
||
TextChangedイベント・ハンドラの実装(上:C#、下:VB) |
さらに、起動したときに「葛飾 辻堂 進捗」という機種依存文字を自動的に入力するようにしておこう。
これには、C#の場合では、コード・エディタを開き、WPFフォームの「Window1」のコンストラクタの内部で、InitializeComponentメソッドの呼び出しの下に(=フォーム上のコントロールの配置が完了した後に)、「textBoxJis90.Text = "葛飾 辻堂 進捗";」を記述する(=1つ目のTextBoxコントロールのTextプロパティに「葛飾 辻堂 進捗」を設定する)。
一方Visual Basicでは、WPFフォーム・デザイナでWindowフォームをダブルクリックしてLoadedイベント・ハンドラを追加し、(コード・エディタでコードが表示されるので)そのLoadedイベント・ハンドラの内部で1つ目のTextBoxコントロールのTextプロパティに「葛飾 辻堂 進捗」を設定すればよい。
なお、先ほどの実装により、片方のTextBoxコントロールに設定すればもう1方にも自動的に文字列が設定されるようになっているため、2つ目のコントロールには文字列は設定しなくてよい。具体的には次の太字のコードを追加する。
|
||
機種依存文字の自動入力の実装(上:C#、下:VB) |
最後に、TextBoxコントロールの意味内容を示すためのLabelコントロールを、それぞれのTextBoxコントロールの上に配置しておこう。1つ目のLabelコントロールを選択して[プロパティ]ウィンドウで[Content]プロパティの「Jis90(Windows XP)」を設定し、2つ目には「Jis04(Windows Vista)」を設定すれば、Labelコントロールのテキスト内容を変更できる。
以上でWPFアプリケーションの基本部分の開発は完了だ。ここまでの作成で先ほど提示した画面のようなWPFフォームが出来上がる。なお、今回のTextBoxコントロールのフォント名は「メイリオ」となっている。
JIS90の字体とJIS2004の字体を同時に表示するには?
ここからが本TIPSの本題となる。
今回のサンプル・アプリケーションでは、1つ目のTextBoxコントロールの内容はJIS90の字体で表示し、2つ目はJIS2004の字体で表示するようにしよう。
これには、XAMLエディタで直接<TextBox>要素内にTypography.EastAsianLanguage属性を書き込む必要がある(※[プロパティ]ウィンドウではこの属性を設定できない)。属性の値は、JIS90の場合は「Jis90」、JIS2004の場合は「Jis04」である。従って、例えばJIS90を指定したいなら、「Typography.EastAsianLanguage="Jis90"」と記述すればよい(※Vistaでは、デフォルトではJIS2004の字体で表示される)。実際に書き込むと次の画面の赤い枠部分のようになる。
![]() |
JIS90やJIS2004などの字体を指定するTypography.EastAsianLanguage属性の指定 |
以上で対応は完了だ。
次の画面はサンプル・アプリケーションを実行したところだ。なお、見やすくなるように、TextBoxコントロールのフォントを大きくしている。
![]() |
Windows Vista上で実行したサンプル・アプリケーションの例 |
この画面はWindows Vista上で実行している例だが、当然ながらJIS2004フォントはVistaに搭載されているのでVistaで実行する必要がある。赤い下線を引いた部分の文字に注目していただきたい。同じ内容を表示しているはずが、JIS90とJIS2004で異なる字体が表示されているのが分かるだろう。
ちなみにこれを、Windows XPやWindows Server 2003で実行すると次のような画面になる(実行には.NET Framework 3.0あるいは3.5が必要)。
![]() |
Windows Server 2003で実行したサンプル・アプリケーションの例 |
ご覧のとおり、JIS90とJIS2004を指定しても字体は変更されない。JIS2004フォントがインストールされていないためだ。
なお、従来のOSでもJIS2004フォントを使うことは可能だ。これを行いたい場合には、「Windows TIPS:従来のOSで新しいJIS2004フォントを利用する」を参照してほしい。
カテゴリ:クラス・ライブラリ 処理対象:文字列 カテゴリ:WPF/XAML 処理対象:TextBoxコントロール 使用キーワード:Typography.EastAsianLanguage属性 |
![]() |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
![]() |
|
|
|
![]() |