9646
VB6でUnicode文字(BLACK VERTICAL RECTANGLE)を表示する正しい方法は何ですか?
試しChrW(9646)
てみると表示されます?
。
9646
VB6でUnicode文字(BLACK VERTICAL RECTANGLE)を表示する正しい方法は何ですか?
試しChrW(9646)
てみると表示されます?
。
これは、探索するためのチュートリアルです。黒い縦の長方形については、この記事をご覧ください。
Unicode がオンになっていると仮定すると、次の文字列をウィンドウに送信して表示します。
Wchar_t mStr[] = {9646,0,0};
参照。このコード スニペットとリファレンスは、C++ でよりインライン化されています。次の手順を使用して、Visual C++ で UNICODE をオフ/オンにする場所:
VS2008/2010 でプロジェクトを開きます。
ソリューション エクスプローラーでプロジェクトを右クリックし、[プロパティ] をクリックします。
を選択Configuration Properties-> General
し、 を選択Character Set
して に変更current value
しUse Multi-Byte Character Set
ます。(電源を切る)
VB での UNICODE の表示に関する良い記事です。
textbox
でコントロールを操作している場合は、 を参照ライブラリとしてForm
追加します。Microsoft Forms 2.0 Object Library
このコンポーネントは、テキストボックス、ラベル、コマンド ボタン、リスト ボックス、コンボ ボックス、チェックボックス、ラジオ ボタン、トグル ボタン、画像、タブストリップ、複数ページ コントロールなどのUnicode 対応コントロールを提供します。
VB6 で作業し、US-ANSI 以外の文字を表示するには、次の 3 つの主な事柄を理解する必要があります。
変換後Unicode-to-ANSI
、VB6 はコントロールのプロパティに従って文字データを表示しようとしますFont.Charset
。このプロパティを変更しない場合は、ANSI 文字セットと同じになります。コントロールをFont.Charset
変更すると、VB6 が "ANSI" バイトを解釈する方法が変わります。つまり、バイトを「ANSI」ではなく他の文字エンコーディングとして扱うようにVB6に指示しています。
たとえば、コンピューターでUnicode Japanese
文字列を表示しようとすることを検討してください: (日本語の場合) を設定しますが、Unicode 文字列はすべて疑問符文字として表示されます。これは、VB6 が最初に日本語の Unicode 文字列を ANSI (英語のコンピューターの Windows-1252 ) に変換しようとしているためです。日本語の文字は、Windows-1252 では表現できません。各文字は変換に失敗し、疑問符に置き換えられます。たとえば、TextBox コントロールのプロパティ設定で日本語スクリプトを選択することは、実行時に Font.Charset を設定することと同じです。English
Font.Charset = 128
Jukka が言っ たようFont
に、フォント内で文字を使用できることを考えると、UNICODE を示す重要な役割を果たします。ハンスが言ったように、glyph
サポートされていないフォントは長方形を生成します。したがって、Font
選択した がグリフをレンダリングできることを確認する必要があります。たとえば、MS Sans Serif
フォントがレンダリングされない場合ƒ
(LATIN SMALL LETTER F WITH HOOK、2 バイトの Unicode 値は 0x0192)、その場所に薄い実線の長方形のボックスが表示されます。ただし、Windows では、中国語を表すのに十分な文字レパートリーを持つフォントはほとんどありません。
次のコードでは、実行時に Font CharSet に沿って Font Name () が設定されます。
文字セットのプロパティ:
134 Simplified Chinese, gb2312 - Mainland China(PRC) and Singapore
136 Traditional Chinese, big5 - Taiwan and Hong Kong
コード:
Sub changeToUniCodes()
Dim strTxt2 As String
UserForm1.TextBox2.Font.Charset = 134 '--CHINESESIMPLIFIED_CHARSET
UserForm1.TextBox2.Font.Name = ChrW(&H5B8B) + ChrW(&H4F53) '-- 宋体 SimSun font
UserForm1.TextBox2.Text = ChrW(37446)
strTxt2 = UserForm1.TextBox2.Text
'notice that ChrW(9246) produces a different character in Chinese
UserForm1.TextBox2.Text = strTxt2 & " " & ChrW(9246)
End Sub
VBE IDE での出力: VB6 形式でも試すことができます。
上記のすべての書き込みの後、私はこのMSDNの記事に気付きました。少なくともそれはVBの確認です:D
必要なのは、「Unicode 対応」コントロールを使用することです。VB6 にはこれらのうちのいくつかしか付属していませんでしたが、Vista 以降または XP (このライブラリの非 Ink redist バージョンを使用しない限り、Tablet Edition のみ) では、InkEdit コントロールでこれを行うことができます。
InkEdit1.Text = ChrW$(9646)
$
が埋め込まれた Variant の代わりに String を返す関数を示すことに注意してください。
InkEdit コントロールは、実際には、インク入力とインク対応システムでの入力をサポートする拡張された RichTextBox です。これは Unicode コントロールでもあり、 などの Unicode プロパティをサポートします.Text
。
標準の MSHFlexGrid、DataGrid、およびその他のいくつかのコントロールも Unicode 対応です。
問題のような文字については、 http://www.alanwood.net/unicode/geometric_shapes.htmlを参照してください。基本的に、ANSI、Charset などに関するジバージャバーは無視できます。関連性はありますが、ここでは適用できません。
▮ 9646 ▮ 25AE BLACK VERTICAL RECTANGLE
疑問符が表示される理由は、使用されているフォントにその文字が存在しないためです。Arial Unicode MS や Lucida Sans Unicode など、BLACK VERTICAL RECTANGLE をサポートするフォントにフォントを設定する必要があります。