VB6でのEXEが文字化け?

タグの編集
投稿者 Knyacky  (中学生) 投稿日時 2009/9/8 02:20:08
学校ので作ったソフトをEXEにして家で実行すると、
Captionプロパティに入っているコントロール(たとえばラベル)が文字化けします。
そうでなくても、文字が小さくなります。(たとえばコマンドボタン)
これはどういうことなのでしょうか?

家のパソコン
OS:Windows XP Professional SP3
プログラム環境:VB2008,VC#2008,VC++2008

学校のパソコン
OS:Windows XP Professional SP3
プログラム環境:VB6
投稿者 流れ者  (社会人) 投稿日時 2009/9/8 02:34:02
考えられる原因の一つは

ソフトで使われているフォントが家の環境に無い

でしょうか。

あと疑問ですが、VB6のEXEとなると、ランタイムが必要なはずですが、
家の環境にVB6ランタイムは入っていますか?
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/9/8 06:34:08
可能性1)
 学校のPCは、画面が 120dpi に設定されていて、
 自宅のPCは、標準の 96dpi のままになっている。
 http://support.microsoft.com/kb/880503/ja

確認のため、学校と自宅のそれぞれで、
 Label1.Caption = CStr(1440 / Screen.TwipsPerPixelX) & "dpi"
という処理を組み込んだアプリを実行してみてください。


可能性2)
 学校の PC は開発環境なので、当然、VB6 のランタイムが揃っているが、
 自宅の PC には VB6 のランタイムをインストールしたことがない。そのため、
 OS 自体が持つ、基本ライブラリのみで実行されているため、日本語版VB6の
 既定のフォントである「MS Pゴシック, 9pt」ではなく、
 「MS Sans Serif, 8.25Pt」や「Tahoma, 8.25pt」などになっている。

確認のため、学校と自宅のそれぞれで、
 Label2.Caption = Me.Font.Name & ", " & Me.Font.Size & "pt, Charset=" & Me.Font.Charset
という処理を組み込んだアプリを実行してみてください。
投稿者 Knyacky  (中学生) 投稿日時 2009/9/10 02:36:41
>家の環境にVB6ランタイムは入っていますか? 

これが原因でした。手に入れるにはどこから取ればいいですか?
投稿者 Knyacky  (中学生) 投稿日時 2009/9/10 02:48:13
そういえば、不思議なことに文字化けしないソフトもあるんです。
例えば、Visual Basic中学校の投稿プログラムのPANEKURA。
これは、フォントのボールド・イタリックが切れただけで、ちゃんと読めました。
一体何が違うのですか?
投稿者 流れ者  (社会人) 投稿日時 2009/9/10 02:55:06
>>家の環境にVB6ランタイムは入っていますか? 

>これが原因でした。手に入れるにはどこから取ればいいですか?

マイクロソフトのHPからダウンロードできます。

http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=7B9BA261-7A9C-43E7-9117-F673077FFB3C
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2009/9/10 07:19:15
ランタイムをきちんとインストールしておけば、こういった問題は発生しません。
EXE のみを配布するのではなく、VB6 付属の「ディストリビューション ウィザード」あるいは
「Visual Studio Installer」で、作成したアプリのインストーラを作ってみてください。

一度ランタイムを配布してしまえば、EXE のみでも動作しますけれどね。
(なお、ランタイム単独での再頒布は禁止されています)


> 文字化けしないソフトもあるんです。

ランタイムのひとつ VB6JP.DLL が無い場合、英語版として実行されます。

この場合、何もフォントを設定しないコントロールについては、先述したように
「MS Sans Serif」の 8.25ポイント (Charset = 0) が利用されます。
これは欧文フォントであるため、日本語は文字化けしてしまいます。

しかし、VB6JP.DLL がある場合には、こちらも先述したように、
「MS Pゴシック」の 9ポイント (Charset = 128) が利用されます。


既定のフォントは通常、それぞれの国で利用されるもっとも一般的な
フォントが割り当てられています。他の国では、このようなファイル名です。
 VB6JP.DLL 日本
 VB6FR.DLL フランス
 VB6DE.DLL ドイツ
 VB6IT.DLL イタリア
 VB6KO.DLL 韓国
 VB6ES.DLL スペイン
 VB6CHS.dll 中国(簡体字)
 VB6CHT.dll 中国(繁体字)


> 一体何が違うのですか? 

デザイン時(もしくは実行時)に、フォントを設定してあるコントロールについては、
既定のフォントではなく、指定したフォントが使用されるからです。

# なお、指定したフォントが実行環境に無い場合には、自動的に代替フォントが
# 利用される仕様になっています。
投稿者 Knyacky  (中学生) 投稿日時 2009/9/13 21:26:43
>EXE のみを配布するのではなく、VB6 付属の「ディストリビューション ウィザード」あるいは
>「Visual Studio Installer」で、作成したアプリのインストーラを作ってみてください。

じつは、ディストリビュージョンウィザードは、起動すると
『予期せぬエラーが発生しました。終了します。』と出てきて使えないので、EXEだけ配布、という事態になっているのです。