vclコントロールまたはWindowsの漢字を含む完全なユニコードサポートを取得するにはどうすればよいですか
-
28-10-2019 - |
質問
国際化のサポートのためにテストしているアプリケーションがあります。
たとえば、font.name = 'arial'を備えた標準のteditコントロールがあります。
Windows 7では、Arial Unicode MSまたは他の場所からCJK文字のグリフを自動的につかむようです。そのコントロールに割り当てられたフォントには、特定の国際文字が含まれていない場合、共通コントロールを編集します。
Windows XPでは、Delphi形式のフォント名をArial Unicode MSに変更しない限り、Arial Unicode MSフォントがインストールされている場合でも、漢字がボックスとして表示されるようです。
これは、誰もがWindows XPで国際的なフォントサポートで遭遇するものですか? Windows Common Controlの動作は異なりますか? Windows 7で見られる動作は、Windows XPで見られる動作よりも確かに友好的です。
この動作の違いは、Windows Common Controlsだけに制約されていません。インターネットエクスプローラーやMSエクスプローラーシェルでさえ、ここで写真のようなテストを行うのに問題があるようです。
これについて人々は何をしますか?
Windows XPで予想されるプラットフォームの動作は何ですか?ユーザーが使用したい言語を見つけて、その言語をサポートするフォントを見つけに行く必要がありますか? Arial Unicode MSは、ほとんどすべてのUnicode言語があるため、良いデフォルトである可能性があると思います。
更新:Microsoft用語「補足言語サポート」とは、「WindowsはUnicode文字がボックスとして表示されない」Windowsの機能を指します。
解決
VistaとWindows 7には、東アジアの言語が箱から出してサポートされています。 Windows XPで有効にするには、コントロールパネルに移動します。 地域と言語のオプション ダイアログ、に切り替えます 言語 タブ、およびチェックします 東アジア語のファイルをインストールします 下 補足言語サポート.
それらが使用されているかどうかを検出できます isvalidlanguagegroup 関連する言語の1つをチェックすることにより LGRIP_INSTALLED
国旗:
uses
Windows;
type
LGRPID = DWORD;
const
LGRPID_INSTALLED = $00000001; // installed language group ids
LGRPID_SUPPORTED = $00000002; // supported language group ids
LGRPID_WESTERN_EUROPE = $0001; // Western Europe & U.S.
LGRPID_CENTRAL_EUROPE = $0002; // Central Europe
LGRPID_BALTIC = $0003; // Baltic
LGRPID_GREEK = $0004; // Greek
LGRPID_CYRILLIC = $0005; // Cyrillic
LGRPID_TURKISH = $0006; // Turkish
LGRPID_JAPANESE = $0007; // Japanese
LGRPID_KOREAN = $0008; // Korean
LGRPID_TRADITIONAL_CHINESE = $0009; // Traditional Chinese
LGRPID_SIMPLIFIED_CHINESE = $000a; // Simplified Chinese
LGRPID_THAI = $000b; // Thai
LGRPID_HEBREW = $000c; // Hebrew
LGRPID_ARABIC = $000d; // Arabic
LGRPID_VIETNAMESE = $000e; // Vietnamese
LGRPID_INDIC = $000f; // Indic
LGRPID_GEORGIAN = $0010; // Georgian
LGRPID_ARMENIAN = $0011; // Armenian
function IsValidLanguageGroup(LanguageGroup: LGRPID; dwFlags: DWORD): BOOL; stdcall;
external kernel32;
function IsCJKInstalled: Boolean;
begin
Result := IsValidLanguageGroup(LGRPID_SIMPLIFIED_CHINESE, LGRPID_INSTALLED);
end;