[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2005/07/08(Fri) 23:10
投稿者名:TN
Eメール:
URL :http://www.boreas.dti.ne.jp/~tosin/index.html
タイトル:
ラベルの文字化け
いつも拝見し勉強をさせていただいておりますが、投稿は初めてです。よろしくお願いいたします。

さて、VB6(SP6)で作成したプログラムを、セットアップディスクを作りVBの入っていないWindowsXPに
インストールしました。しかし、一部のラベル(MS Pゴシック9p)が文字化けを起こしました。
具体的には、VB6JP.DLLがないときに化けるのと同じような化け方です。

(詳細情報)
・VB6JP.DLLなど、日本語の表示に必要なDLLは存在する。
・VB6のランタイムをダウンロードしインストールしたが状況は変わらない。
・管理者権限のあるユーザーでは正常に表示される。
・制限つきユーザーでは、画面の設定が管理者権限のあるユーザーと同じでも文字化けを起こす。

そのフォームまたはラベルのプロパティでフォントダイアログを表示させ、[OK]をクリックしてから
作った場合は、文字化けを起こしません。フォームのファイルをテキストエディタで開くと、
フォントの設定をした場合のみ、
   BeginProperty Font
      Name            =   "MS Pゴシック"
      Size            =   9
      Charset         =   128
      Weight          =   400
      Underline       =   0   'False
      Italic          =   0   'False
      Strikethrough   =   0   'False
   EndProperty
というコードが書かれています。この中のCharsetの記述がないと、化ける環境があることまでは
わかりました。
(参考URL)
hhttp://hpcgi1.nifty.com/MADIA/VBBBS/wwwlng.cgi?print+200406/04060061.txt

この件に関して、
(1) Microsoftの公式情報、あるいはVB関連のHPでの情報
(2) 効果的な修正方法(1つ1つフォームでフォントを設定しなおすのが大変なため)
の2点、ご存知でしたらアドバイスいただけませんでしょうか。

よろしくお願いいたします。

投稿時間:2005/07/11(Mon) 00:28
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: ラベルの文字化け
> ・管理者権限のあるユーザーでは正常に表示される。
> ・制限つきユーザーでは、画面の設定が管理者権限のあるユーザーと同じでも文字化けを起こす。

インストーラは、どのようにして作成されたのでしょうか。
たとえばVisual Studio Installerの場合、ALLUSERSは設定してありますか?
hhttp://www.bcap.co.jp/hanafusa/vbbbs/wforum.cgi?mode=allread&no=2514&page=0

投稿時間:2005/07/11(Mon) 10:31
投稿者名:TN
Eメール:
URL :
タイトル:
Re^2: ラベルの文字化け
魔界の仮面弁士さん、ご返答をありがとうございます。そのお名前、私が見つけた参考URLの中でも
ご回答をされていた方と同一人物でいらっしゃるのですね?

さて、インストーラですが、ディストリビューションウィザードで作成しました。設定は初期値の
ままで、変更はしておりません。フォームにラベルを貼り付けただけの別プロジェクトを作って
試してみましたが、状況は同じでした。ほかに試したことは、

・フォントキャッシュファイル(fntcache.dat)の削除
・PowerユーザーにもC:\Windowsフォルダへのフルアクセス権限をセット
・Powerユーザーにもインストールフォルダへのフルアクセス権限をセット
・画面のプロパティでスタイルとフォントの変更

ですが、結果は同じでした。

ほかに何かお心当たりがございましたら、ご教授いただけると助かります。
よろしくお願いいたします。

投稿時間:2005/07/12(Tue) 01:20
投稿者名:Starfish
Eメール:
URL :
タイトル:
Re^3: ラベルの文字化け
> ・画面のプロパティでスタイルとフォントの変更

 外れているとは思いますが、コントロールパネルで影響するなら
「画面のプロパティ」ではなく「地域と言語のオプション」のほうですね。
 念のため、ご確認ください。

 あと、現象が発生するのは特定の1台だけですか?それとも、すべてのXPで
発生するのでしょうか?

投稿時間:2005/07/12(Tue) 10:48
投稿者名:TN
Eメール:
URL :
タイトル:
Re^4: ラベルの文字化け
Starfish さん、ご返答ありがとうございます。

書き忘れて申し訳なかったのですが、「地域と言語のオプション」もチェックし、正常に表示されるPC
および正常に表示される管理者ユーザーでの設定と同じであることを確認しました。
>
>  あと、現象が発生するのは特定の1台だけですか?それとも、すべてのXPで
> 発生するのでしょうか?

今のところ、特定の1台のみです。正常なPCと異常なPCとで相違点を探すのが定石だとは思いますが、
原因を絞り込めずに苦労しております。ですので、一度フォントダイアログを表示させてフォントを
セットしなくても、フォームのファイルにCharset=128というコードを出力させる方法があるならば、
それも1つの回避策になるのではないかと思案しております(それも行き詰っているのですが)。

C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects\Form1.frm
を書き換えてもみたのですが、ぜんぜん関係ありませんでした。

方法は何でも構いませんので、ヒントだけでもいただけると助かります。
よろしくお願いいたします。

投稿時間:2005/07/12(Tue) 11:17
投稿者名:花ちゃん
Eメール:
URL :
タイトル:
Re^5: ラベルの文字化け
> セットしなくても、フォームのファイルにCharset=128というコードを出力させる方法があるならば、
> それも1つの回避策になるのではないかと思案しております(それも行き詰っているのですが)。

下記ではだめですか?(根本的な解決策ではないですが)
Private Sub Form_Load()
    On Error Resume Next
    Dim obj As Object
    For Each obj In Form1.Controls
        obj.Font.Charset = 128
    Next
End Sub

hhttp://www.bcap.co.jp/hanafusa/logbbs/wforum.cgi?mode=allread&no=893#905

投稿時間:2005/07/12(Tue) 11:56
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^5: ラベルの文字化け
> C:\Program Files\Microsoft Visual Studio\VB98\Template\Projects\Form1.frm
> を書き換えてもみたのですが、ぜんぜん関係ありませんでした。

それって、開発環境用の設定ですよね。
既に作成したアプリに関しては、影響しないと思いますよ。


気になるのは、最初の発言の
> ・管理者権限のあるユーザーでは正常に表示される。
> ・制限つきユーザーでは、画面の設定が管理者権限のあるユーザーと同じでも文字化けを起こす。
ですね。となると、権限絡みの問題のように思えます。

> ・PowerユーザーにもC:\Windowsフォルダへのフルアクセス権限をセット
> ・Powerユーザーにもインストールフォルダへのフルアクセス権限をセット
これに加えて、レジストリ設定の違いや、レジストリの各項目へのアクセス権限なども
考えられますね。

正常に動作するXP環境と、化けてしまうXP環境とで、レジストリの内容を比較してみては如何でしょ
う。

また、ディストリビューション ウィザードをやめて、Visual Studio Installer + Orca で
インストーラを生成した場合はどうなりますか?


> フォームのファイルにCharset=128というコードを出力させる方法があるならば、
実行時設定でよければ、コントロールをFor Each で列挙する方法が使えます。
この場合、Fontプロパティを持たないコントロールに備え、On Errorする事も忘れずに。

投稿時間:2005/07/12(Tue) 13:30
投稿者名:TN
Eメール:
URL :
タイトル:
Re^5: ラベルの文字化け
花ちゃんさん、魔界の仮面弁士さん、ご返答をありがとうございます。

>フォームのファイルにCharset=128というコードを出力させる
という表現にあいまいさがあって申し訳なかったのですが、可能であればプログラム実行時に
「obj.Font.Charset = 128」のようなコードを実行する方法ではなく、フォントダイアログを
表示させなくてもfrmファイルに
BeginProperty Font
Name = "MS Pゴシック"
Size = 9
Charset = 128
というコードが書かれるようにする方法はないものかと思案した次第です。

Template\Projects\Form1.frmをいじったのも、新規にフォームを追加した際にこのファイルが
テンプレートとして使われているならば、少なくとも今後追加するフォームについてはトラブルを
回避できるのではないかと考えたためです。

同じPCでも管理者と制限ユーザーで違いがあるので、私も権限が一番怪しいと推測しているのですが、
レジストリの比較は辛い作業になりそうですね。Visual Studio Installer + Orca でのインストーラ
作成とあわせ、検討してみたいと思います。

本当にありがとうございました。