セットアップは次のとおりです。
- TRichEdit コントロールを含む新しい Delphi 7 アプリケーションを作成します。ここでは、Unicode 以外のアプリケーションについて説明します。
- Windows の [地域と言語のオプション] で新しい入力言語をインストールします。これは、非 Unicode プログラム用の既定の言語のエンコーディングとは異なるエンコーディング (ギリシャ語など) です。
- アプリケーションにボタンを追加し、その
OnClick
ハンドラーに add を追加し、インストールしたばかりの入力言語の文字セットにButton1.Caption := RichEdit1.Text;
設定します (この例に固執する場合)。Font.Charset
GREEK_CHARSET
アプリケーションを実行し、新しい (ギリシャ語) 入力言語に切り替えて、RichEdit に数文字入力し、ボタンを押します。ボタンのキャプション
????
には、ギリシャ文字の代わりに記号が表示されます。現在、非 Unicode プログラムのデフォルトの言語をギリシャ語に設定すると (Windows の再起動が必要)、この問題は解消され、ギリシャ語の文字が正しく表示されるようになります。非 Unicode プログラムのデフォルトの言語を以前の状態に戻すと、問題が再び発生します。
したがって、Font.Charset 値を変更しても何も変わらないため、TRichEdit は内部で Unicode と連携していると推測できます。RichEdit は、インストールされている入力言語を適切に受け入れます。また、異なる文字セットを使用する 2 つの異なる非ラテン言語 (ギリシャ語 / GREEK_CHARSET
/ およびロシア語RUSSIAN_CHARSET
の // たとえば) Font.Charset を変更せずに両方を受け入れます。
.Text
また、TRichEdit の(または) 値を取得すると、非 Unicode プログラム用.Lines[i]
の Windws の既定の言語に基づいて、内部の Unicode テキストが ANSI に変換されると思います。
さらに.Text
、WideString または UnicodeString への値の割り当ても適切に機能しません (適切な文字の代わりにテキストが再び挿入され????
ます)。これは、文字列 (AnsiString) に割り当てる場合だけではありません。
だからここに質問があります:
非 Unicode プログラム用のシステムの既定の言語ではなく、選択した文字セットに基づいて、リッチエディットのテキストを文字列 (ANSI) に適切に変換できるようにしたいと考えています。どうやってやるの?サード パーティ製のコンポーネントを使用しないソリューションを希望しますが、もちろん、それが不可能な場合は何でも構いません。
ありがとう!
PS: Delphi 2009 以降への切り替えは、受け入れられるソリューションではありません。