質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual Basic 6.0

Microsoft Visual Basic 6.0(VB6)とはCOMプログラミングのためにMicrosoftが提供したプログラミング言語とintegrated develpment enviornment(IDE)のことです。

Q&A

解決済

1回答

2677閲覧

Visual Studio 6.0 英語版での文字化けについて

cojicoji

総合スコア7

Visual Basic 6.0

Microsoft Visual Basic 6.0(VB6)とはCOMプログラミングのためにMicrosoftが提供したプログラミング言語とintegrated develpment enviornment(IDE)のことです。

1グッド

0クリップ

投稿2017/11/03 05:58

###前提・実現したいこと
Visual Studio 6.0 英語版での文字化け解消
###発生している問題・エラーメッセージ

Visual Studio 6.0(英語版)をインストールし、VB6を勉強中の者です。
英語版のため、日本語表記が一部文字化けしてしまいます。

フォームのキャプションは日本語で表示できるのですが、
テキストボックスやコンボボックスのTextに日本語を入力すると文字化けしてしまいます。
文字化けには「vb6jp.dll」ファイルが関係しているということで
ランタイムをインストールしなおしましたが、改善されません。
(英語版で上記オブジェクトに日本語表示が可能なのかも分かりません)

有識者の方、解決策や糸口をご教授下さい。
よろしくお願いします。

TatsuroChiba👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

お使いのWindowsはどのバージョンでしょうか。また、プログラムを動作させる予定のWindows PC(ターゲットPC)のバージョンはどんな状況ですか。(日本語版、英語版含め)それらによっても対処の方法が変わる可能性があります。

Windowsのバージョンは置いておいて、2001年9月の掲示板のスレッドで参考になりそうなものがありました。英語ですが、ご一読を勧めます。
japanese language in English VB6

2001年ですからWindows 2000での動作の話にもなると思います。この内容によりますと標準のVBコントロールはUNICODEをサポートしていないこともあり、英語版で日本語フォントを表示させるのが困難な様子がうかがい知れます。一部の書き込みにはVisual BasicのStdFontにマルチバイトキャラクターセット(128)をセットし、”MS P Gothic"のフォントオブジェクトを生成してフォームのフォントとして使用するコードが紹介されていました。(2001/09/19のMervyno氏の記事)

以下はVBのStdFontのリファレンスです。
Visual Basic Reference - StdFont Object

この案を利用させてもらうことで、"MS P Gothic"がPCにインストールされていれば、英語版VB6でもフォーム毎に日本語フォントを表示できるようになるかもしれません。

ここからは推測ですが、英語版のVisual Basic 6.0は国際化対応としてまだ未完成で、なんらかの方法でvb6jp.dllへスイッチして利用できるようにはなっていないのかと思われます。掲示板のスレッドでも

A) Buy Unicode third party control (if you can find them)
B) Create your own Unicode controls, using owner draw, etc.
C) Upgrade to VB7, which has Unicode controls

と述べられています。


以下は私見です。
VB6をこれから時間をかけて勉強されるのでしょうか。Visual Studio 6.0環境も含めて、新たにこれから時間をかけて勉強するにはつらい状況だと思います。(Visual Studio 6.0の日本語版発売は1998年9月です)
情報も古く、新しいWindowsに適用できる話ではないことも多いです。使い続けることはむしろ、ある意味で高度(?)な作業だと思えます。

対象の業務が過去の製品の保守や、若干の機能追加作業であれば仕方ないかと思うのですが、.NET Frameworkベースの言語で開発して徐々にリプレースしていく等をご検討されることを強力にお勧めしたいです。


対処方法について追記
もしかしたら既にご覧になっているかもしれませんが、以下で紹介されている記事中の
VB6 のプログラムのフォームで文字が化ける

もう1つの理由は、VB6JP.dll は存在してもそのファイルにアクセス権がないことです。

の件も確認してみてください。


** 対応の方法を確認したので追記(2017/11/05)**

私の方でVisual Studio 6.0 英語版 + Windows 7 Enterprise 32ビット日本語版の環境下で試しました。VB6のフォームを日本語表示できるようになったので、その方法/手順をご案内します。
基本的には先にご案内した(microsoft.public.vb.general.discussion)の掲示板で紹介されていたものです。尚、Visual Studio 6.0のService Packは「6」が最新ですが、これは適用して試していませんのでご承知おきください。

まず、Visual Studio のフォームのデザイナーでLabelとTextBox中の文字列が化けている例を示します。
イメージ説明

フォントは初期状態が"MS Sans Serif"なので日本語文字列を指定して化けて当然なのですが、"MS Pゴシック"に指定しても化けます。これを、プログラムの実行開始時のMainモジュールで日本語フォントでStdFontを用意し、LabelとTextBoxのフォントにセットするようにします。

' Visual Basic6 ' Modules/Module1.bas Option Explicit Public gForm As Form1 Public gStandardFont As StdFont Sub Main() Set gStandardFont = New StdFont ' FontSize=14 SetJapaneseFont gStandardFont, 14 Set gForm = New Form1 gForm.Show End Sub Public Sub SetJapaneseFont(oFont As StdFont, iFontSize As Integer) ' Use DBCS(Double-byte character set) for Japanese version of Windows Const CHARSET_SHIFTJIS As Integer = 128 With oFont .Charset = CHARSET_SHIFTJIS .Size = iFontSize ' "MS P Gothic" .Name = ChrW(&HFF2D) & ChrW(&HFF33) & ChrW(&H20) & ChrW(&HFF30) & ChrW(&H30B4) & ChrW(&H30B7) & ChrW(&H30C3) & ChrW(&H30AF) End With End Sub

StdFont.Nameプロパティに"MS Pゴシック"をUNICODE(UTF16 BigEndian)でセットします。"MS Pゴシック"をUTF16 BigEndian の16進数表記で並べると以下のようになりますので、
FF2D FF33 0020 FF30 30B4 30B7 30C3 30AF
他のフォント、例えば"MS P明朝"などを使用するときも同様にしてください。

更に、VBの"Project Properties"で、Startup Object を "Sub Main"とし、Main()モジュールから実行を開始させるようにて、Formtの表示前に正しく初期化するようにします。Form1はこのMainから表示します。

メニューバーの「Project」->メニューの一番下「Project1 Properties...」で表示される「Project Peoperties」ダイアログボックスの「General」タブ、「Startup Object:」コンボボックスで、"Sub Main"を選択指定してください。ダイアログボックスの例を以下に示します。
イメージ説明

尚、質問者様のコメントで

フォームロード時にフォントをセットする部分(.font)で型不一致のエラーとなってしまいました。

となったのは、StdFontの初期化がされていなかったので Nothing が.Font へセットされようとしてエラーになっていたのが原因だと思われます。

次に、Form1でMainモジュールで生成したStdFontをForm, Label, TextBoxコントロールの.Fontプロパティにセットします。

' Visual Basic6 ' Forms/Form1.frm Option Explicit Private Sub Form_Load() Me.Font = gStandardFont Set lblText1.Font = gStandardFont Set lblText2.Font = gStandardFont Set txtText1.Font = gStandardFont End Sub

これで、以下のように表示されるようになります。Windows 7上での実行結果です。
イメージ説明
Windows 8では試していませんが、Windows 10(Pro. 64ビット日本語版)でもOKでしたので大丈夫だと思います。

上記をもとにしていただいてモジュール化を適切に進めれば、最小の手間で対応できるかと考えます。

投稿2017/11/03 07:30

編集2017/11/04 20:22
dodox86

総合スコア9183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

samudra

2017/11/03 08:18

横から失礼いたします。 質問者さんがどの様な意図で英語版のVB6を使用するのか分かりませんが、いまだにVB6が現役で使用されているある巨大なシステムを拝見した事があります。(3~4年前) ・・・あれは、リプレース出来るような代物ではないですね・・・ なので、ニッチな要件として、そういう要件は無きにしも非ずかと・・・。 フランスの空港でWindows3.1が使用されていてその障害で空港が一時閉鎖というニュースも記憶に新しいですが。 色々と思い出したので、横から失礼いたしました。
dodox86

2017/11/03 08:27

コメントありがとうございます。Windows 2000やXPを含め、古い環境で稼働しているものがあるのは存じておりますし、組み込み/制御機器としてとらえると存在を否定しきれないのも承知しています。私自身も古い機器やプログラムの保守は経験があります。難しいですよね。ただ、VB6にこれから新しく時間を割くのはエンジニアとして勿体無い感がありましたので述べさせていただいた次第です。ご気分を害されたら申し訳ありません。
samudra

2017/11/03 08:30

いや、特に気分を害した訳ではありません。 こちらこそ横からすみませんでした。 色々懐かしく思い出させて頂きました。 d(^_^o)
cojicoji

2017/11/04 02:56

>dodox86さま、samudraさま ご回答ありがとうございます。 使用端末はWIndows7で、プログラムを動作させる予定の端末はWindows8(どちらも日本語版)です。 リンクを貼っていただいた記事を参照しました。 記載のコードを試してみたところ、フォームロード時にフォントをセットする部分(.font)で 型不一致のエラーとなってしまいました。 コードを全コピーで実行では難しいのですかね。 自分の知識がまだとても浅く、都度インターネットでエラー原因を調べているので時間がかかりそうですが、 この教えていただいた方法をもう少し試してみようと思います。 ですがdodox86さまも仰るとおり、英語版での日本語表記は難しいようですね。 (追記いただいたアクセス権については、試しておりますがダメでした。) 私は開発経験のないSEでして、半年程前からVB6で作られたシステムの導入、保守案件をやっております。 このシステムは新規開発もVB6で行っており、リプレースも困難とのことです。 業務上、デバッグやソースコードの調査でVB6の知識が必要となり、独学で勉強を始めた次第です。 MSDNをインストールできずヘルプ参照が行えないのと、 言語自体が古いためか関数Referenceのページ等もなかなか見つけ出せず苦戦しております。。 趣味+勉強のために個人ツールを1本作成してみようと思っておりますが、 とりあえずラベルやコマンドボタンの表記は英語で作成し、フォントの件は時間のある時にもう少し頑張ってみます。 早々にご回答頂きまして、ありがとうございました。
samudra

2017/11/04 03:35 編集

やはり、そうなのですね。 今更VB6という事は、リプレース出来ないシステムなのだろうと思いました。 私が3~4年前に見たVB6の巨大システムは、作り直したとしても、ざっと見積もっても数億円以上かかるであろう代物でした。(画面系処理だけで数千画面あるシステム。。。バッチ処理等も含めると考えただけでも恐ろしい。。。) しかも24/365に稼働しているクリティカルなシステムだったので、システムを止める事はあり得ない・・・。 きっとクライアントがWindows10化されても、何としてでも無理やりでも動かして行くんだろうなと・・・。 古本であると思いますが、お勧めの書籍は、以下となります。辞書代わりにつかっていました。 Visual Basic Ver.6.0 初級プログラミング入門〈上〉 (Microsoft Languageシリーズ) https://www.amazon.co.jp/Visual-Ver-6-0-%E5%88%9D%E7%B4%9A%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80%E3%80%88%E4%B8%8A%E3%80%89-Microsoft-Language%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA/dp/4774108596 いまだに捨てられず、VBAツール開発の足しになるかなと職場に持って行ってます。
dodox86

2017/11/04 20:14 編集

Visual Studio 6.0 英語版をWindows 7日本語版にインストールして確認しました。追記しましたのでご参考になさってください。
cojicoji

2017/11/06 13:51

>samudraさま 私にとってVB6はもう古い言語と思っていましたが、現在もVB6を使用し続けている(し続けざるをえない。。)システムがまだまだあるのですね。 お勧めいただいた書籍、購入してみます。いまVB6を新たに始めようとすると情報があまりないので、経験のある技術者の方が参考にされている書籍の情報はとてもありがたいです。ありがとうございます。 >dodox86さま 対処法の追記、ありがとうございます。 記載いただいた内容を試してみたところ、無事日本語でキャプションの表示が行えました。 親切な解説とイメージで初心者の自分でも何とかなりました。ありがとうございます。 フォントオブジェクトについて勉強して、自分なりにアレンジできるように頑張ります。 お二方とも、アドバイスをいただきありがとうございました。今後もVB6の学習を進めていく中で、また質問させてもらうこともあるかと思いますが、よろしくお願いします。
dodox86

2017/11/07 01:07 編集

経過のご報告ありがとうございます。お役に立ててよかったです。もともと掲示板(メーリングリストかニュースグループ?)で紹介された案ですので、私も過去の資産に感謝、です。海外のサイトにも目を向けると貴重な情報が眠っているので、今後機会があったときはそれらも探してみると良いかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問