tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re^5: VB6 上で表示化け
投稿日: 2018/10/12(Fri) 01:33
投稿者魔界の仮面弁士
> > 正確なフォント名とフォントサイズが分かるなら、提示してもらえると助かります。
> フォント名は MS明朝、フォントサイズは 10 です。

それは≪正確な≫フォント名では無いように見えます。

"MS明朝" や "MS明朝" ではなく、
"MS 明朝" なのではありませんか? (英語表記では "MS Mincho")

ちなみにプロポーショナル版の方は、
"MS P明朝" が正式表記です。(英語表記では "MS PMincho")

※多言語対応アプリケーションの場合、英語表記での指定をお奨めします。


たとえば下記の場合、Label1 や Label2 のフォント名はシステムに存在しないため、
代替フォント(たとえば、"MS Pゴシック" や "Arial" など)で表示される可能性があります。

Private Sub Form_Load()
    Label1.Font.Name = "MS明朝"
    Label2.Font.Name = "MS明朝"
    Label3.Font.Name = "MS 明朝"
    Label4.Font.Name = "MS Mincho"
    
    '下記が無いと、欧文フォント(Charset = 0)になってしまう
    Label1.Font.Charset = 128
    Label2.Font.Charset = 128
    Label3.Font.Charset = 128
    Label4.Font.Charset = 128
    
    Label1.Caption = Label1.Font.Name
    Label2.Caption = Label2.Font.Name
    Label3.Caption = Label3.Font.Name
    Label4.Caption = Label4.Font.Name
End Sub




> 起動時に日本語表示か英語表示かのフラグを読み込んで
> フォントの名称やCharsetをプログラムで設定してメインフォームを表示します。

切り替えるための文字列情報は、どこから得ていますか?
外部ファイル? プログラム内に Const 等で埋め込み?

もしも、VB6 の LoadResString 関数を用いて読み込んでいるのだとしたら、
ストリングテーブルの ID がズレているのでは無いでしょうか。

古いバージョンの exe は正常表示されているとのことなので、
古い exe を、埋め込みリソースを読めるアプリ(Visual Studio 6.0 など)で
開いてみて、文字列リソースの内容を比較してみると良いかもしれません。


また、多言語対応実装ということで「ロケールID」の扱いは大丈夫でしょうか。
たとえば、StrConv の第 3 引数などで使われる ID のことです。(GetUserDefaultLCID API など)
https://msdn.microsoft.com/ja-jp/library/cc392381.aspx
http://www1.kokusaika.jp/advisory/org/ja/vb_resource.html



> 雑談用掲示板に貼り付けたように、デザイン画面上では正常に表示されています。
> おかしくなる前に作成した exe ファイルを起動して正常な画面を貼り付けます。
メニューの [ファイル(&F)] が、[終了(&F)] になっているのは『文字化け』とは違いそうですが、
その隣の [ヘルプ(&H)] が [ホル?把持長(&H)] は『文字化け』っぽいですね…。


プログラムで Caption を書き換えているようなので、
 mnuHelp.Caption = 新しい文字列
の行を、
 Dim raw() As Byte
 raw = 新しい文字列
 mnuHelp.Caption = raw
  Dim dump As String
 With CreateObject("Microsoft.XMLDOM").createElement("h")
  .DataType = "bin.hex"
  .NodeTypedValue = raw
  dump = .Text
 End With
  MsgBox dump, vbInformation Or vbSystemModal, raw
に置き換えて、そもそも想定通りの文字列を渡しているかどうかを、
文字コードのレベルから確認してみてはいかがでしょう。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。