Top / TIPS / 日本語の文字化け

ランタイムはあるのに日本語が化ける

Windows 2000 以降、VB6.0 のランタイムである MSVBVM60.DLL が、OS に標準でついてくるようになりました。

VBの標準機能のみを使ったプログラムであれば、EXE をコピーするだけで、とりあえずは動きます。

しかし、コピーしただけでは、日本語の表示がうまくいかないことがあります。

常にうまくいかないなら、まだいいのですが、たまにちゃんと表示されるプログラムもあって困ってしまいます。

いったいどういう事なのでしょうか?

.frm を見る

VB の開発環境から、「ファイル」→「新しいプロジェクト」→「標準EXE」で、何も定義されていないフォームが生成されます。

そのまま、フォームをファイルに保存し、テキストエディタで見てみましょう。

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   1170
   ClientLeft      =   60
   ClientTop       =   360
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   1170
   ScaleWidth      =   4680
   StartUpPosition =   3  'Windows の既定値
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

よく見ると、フォントの情報が無い事に気付くと思います。

このフォームにテキストボックスを張ってみましょう。次のようになるはずです。

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   1170
   ClientLeft      =   60
   ClientTop       =   360
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   1170
   ScaleWidth      =   4680
   StartUpPosition =   3  'Windows の既定値
   Begin VB.TextBox Text1
      Height          =   405
      Left            =   150
      TabIndex        =   0
      Text            =   "日本語テスト"
      Top             =   90
      Width           =   4215
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

やはり、フォントの情報がありませんね。

このプログラムをコンパイルして EXE にし、素の状態のOSへコピーして動かすと、文字化けが発生します。

しかし、VBのランタイムを正常にインストールした環境では、MS Pゴシックの9PTで表示されます。

デフォルトのフォントを誰が決めているのか?

これが VB6JP.DLL なのです。

日本語を正しく表示するには

VB6JP.DLL が存在しない環境で、日本語を正常に表示するためには、どうすれば良いのでしょう?

答えは簡単、フォントの情報を持たせれば良いです。

もうひとつ、テキストボックスを追加し、プロパティ画面から、フォントをMSゴシックに設定してみましょう。

frm は、次のようになるはずです。

VERSION 5.00
Begin VB.Form Form1
   Caption         =   "Form1"
   ClientHeight    =   1170
   ClientLeft      =   60
   ClientTop       =   360
   ClientWidth     =   4680
   LinkTopic       =   "Form1"
   ScaleHeight     =   1170
   ScaleWidth      =   4680
   StartUpPosition =   3  'Windows の既定値
   Begin VB.TextBox Text2
      BeginProperty Font
         Name            =   "MS ゴシック"
         Size            =   9
         Charset         =   128
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   150
      TabIndex        =   1
      Text            =   "日本語テスト"
      Top             =   630
      Width           =   4245
   End
   Begin VB.TextBox Text1
      Height          =   405
      Left            =   150
      TabIndex        =   0
      Text            =   "日本語テスト"
      Top             =   90
      Width           =   4215
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

このプロジェクトをコンパイルして、exe ファイルを作ってみましょう。

VBの開発環境を終了し、windows\system32 フォルダの VB6JP.DLL をリネームして、exe ファイルを動かすと、次のような画面が表示されるはずです。

vb6jpdll.gif

この様に、コントロールにフォント情報を持たせれば、正常に表示されます。

デフォルトフォントである、MS Pゴシックの9PTを使いたいときは、フォームのフォントを変更してください。

つまり、こんな状態にするのです。

VERSION 5.00
Begin VB.Form Form1 
  Caption         =   "Form1"
  ClientHeight    =   3090
  ClientLeft      =   60
  ClientTop       =   450
  ClientWidth     =   4680
  BeginProperty Font 
     Name            =   "MS Pゴシック"
     Size            =   18
     Charset         =   128
     Weight          =   400
     Underline       =   0   'False
     Italic          =   0   'False
     Strikethrough   =   0   'False
  EndProperty
  LinkTopic       =   "Form1"
  ScaleHeight     =   3090
  ScaleWidth      =   4680
  StartUpPosition =   3  'Windows の既定値
  Begin VB.TextBox Text1 
     BeginProperty Font 
        Name            =   "MS Pゴシック"
        Size            =   9
        Charset         =   128
        Weight          =   400
        Underline       =   0   'False
        Italic          =   0   'False
        Strikethrough   =   0   'False
     EndProperty
     Height          =   315
     Left            =   450
     TabIndex        =   0
     Text            =   "Text1"
     Top             =   330
     Width           =   3525
  End
End

実行時にフォントを設定してもOKです。

Private Sub Form_Load()
   Dim myFont As New StdFont
   With myFont
       .Name = "MS Pゴシック"
       .Size = 9
       .Charset = 128
       .Weight = 400
   End With
   Set Text1.Font = myFont
End Sub



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2009-10-31 (土) 00:07:01 (2795d)