Come ottengo il supporto unico di Unicode, inclusi caratteri cinesi in controlli VCL o controlli comuni di Windows su XP come è in Win7
-
28-10-2019 - |
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:
Cosa fanno le persone al riguardo?
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.
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;