Come ottengo il supporto unico di Unicode, inclusi caratteri cinesi in controlli VCL o controlli comuni di Windows su XP come è in Win7

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

Domanda

Ho un'applicazione che ho testato per il supporto internazionalizzazione.

Esiste, ad esempio, un controllo tedit standard, con font.name = 'Arial'.

Su Windows 7, sembra afferrare automaticamente gli glifi per i caratteri CJK, da Arial Unicode MS, o da qualche altra parte, per modificare controlli comuni, se il carattere assegnato a tale controllo, non contiene un certo carattere internazionale.

Su Windows XP, sembra che i caratteri cinesi vengano visualizzati come scatole, anche quando è installato un font di MS UNICODE Arial, a meno che non cambi il nome del carattere nella forma di Delphi, in Arial Unicode MS.

È qualcosa che tutti incontrano con il supporto internazionale su Windows XP? I controlli comuni di Windows si comportano in modo diverso? Il comportamento che vedo su Windows 7 è certamente più amichevole del comportamento che vedo su Windows XP.

Questa differenza di comportamento non è vincolata solo ai controlli comuni di Windows. Sembra che anche Internet Explorer e la shell di MS Explorer abbiano problemi a fare test come l'immagine qui:enter image description here

  1. Cosa fanno le persone al riguardo?

  2. Qual è il comportamento della piattaforma previsto su Windows XP? Devi andare a trovare quale lingua l'utente desidera usare e andare a trovare un carattere da usare, che supporta quella lingua? Immagino che l'UNICODE MS Arial potrebbe essere un buon default, dal momento che ha quasi ogni lingua unicode che esiste.

AGGIORNAMENTO: sembra che il "supporto per il linguaggio supplementare" Microsoft si riferisca alla funzione "Windows non mostra i miei caratteri Unicode come scatole" di Windows.

È stato utile?

Soluzione

Vista e Windows 7 includono il supporto per le lingue dell'Asia orientale. Per abilitarlo su Windows XP, vai nel pannello di controllo, apri Opzioni regionali e linguistiche Finestra di dialogo, passare al file Le lingue scheda e controlla Installa i file per le lingue dell'Asia orientale sotto Supporto linguistico supplementare.

Puoi rilevare se sono stati installati utilizzando Isvalidlanguagegroup controllando una delle lingue pertinenti con il LGRIP_INSTALLED bandiera:

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top