Comment puis-je obtenir un support complet d’Unicode, y compris des caractères chinois dans les contrôles VCL ou Windows Common Controls sous XP, comme c’est le cas dans Win7

J’ai une application que j’ai testée pour le support de l’internationalisation.

Il existe, par exemple, un contrôle TEdit standard, avec la propriété font.Name = ‘Arial’.

Sous Windows 7, il semble récupérer automatiquement les glyphes pour les caractères CJK, depuis Arial Unicode MS ou ailleurs, pour les contrôles communs EDIT, si la police affectée à ce contrôle ne contient pas un certain caractère international.

Sous Windows XP, il semble que les caractères chinois apparaissent comme des boîtes, même si la police Arial Unicode MS est installée, sauf si je change le nom de la police sous la forme delphi, en Arial Unicode MS.

Est-ce quelque chose que tout le monde rencontre avec le support de fonts internationales sur Windows XP? Les contrôles communs Windows se comportent-ils différemment? Le comportement que je vois sur Windows 7 est certainement plus convivial que le comportement que je vois sous Windows XP.

Cette différence de comportement n’est pas limitée uniquement aux contrôles communs Windows. Il semble que même Internet Explorer et le shell MS Explorer ont des problèmes pour faire des tests comme l’image ici: entrer la description de l'image ici

  1. Que font les gens à ce sujet?

  2. Quel est le comportement attendu de la plate-forme sous Windows XP? Devez-vous aller chercher la langue que l’utilisateur souhaite utiliser et trouver une police à utiliser, qui prend en charge cette langue? Je suppose que Arial Unicode MS peut être un bon par défaut, car il a presque tous les langages Unicode existants.

Mise à jour: Il semble que le terme Microsoft “support linguistique supplémentaire” se réfère à la fonctionnalité “Windows ne montre pas mes caractères Unicode comme des boîtes” de Windows.

Vista et Windows 7 prennent en charge les langues d’Asie de l’Est hors de la boîte. Pour l’activer sous Windows XP, accédez au Panneau de configuration, ouvrez la boîte de dialog Options régionales et linguistiques , passez à l’onglet Langues et cochez Installer les fichiers pour les langues d’Asie orientale sous Prise en charge linguistique supplémentaire .

Vous pouvez détecter s’ils ont été installés à l’aide de IsValidLanguageGroup en recherchant l’un des langages pertinents à l’ LGRIP_INSTALLED indicateur 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 & US 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;