vclコントロールまたはWindowsの漢字を含む完全なユニコードサポートを取得するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/5395742

質問

国際化のサポートのためにテストしているアプリケーションがあります。

たとえば、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エクスプローラーシェルでさえ、ここで写真のようなテストを行うのに問題があるようです。enter image description here

  1. これについて人々は何をしますか?

  2. 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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top