2010-10-11 21 views
2

Mise à jour (en réponse à la première réponse de Hans Passant): Je suppose que je n'ai pas suffisamment expliqué mon utilisation. Cette application sera conçue pour que les gens entrent des données dans une langue "maîtresse" (probablement l'anglais, mais pas nécessairement), et facilitera ensuite la saisie des traductions dans une autre langue. Tout cela est fait avec une interface de boîte de texte riche. Donc, quelle que soit la police qu'ils veulent utiliser pour entrer les traductions DOIT être une police qui supporte le script de la langue dans laquelle ils traduisent.VS2008 - Boîte de dialogue Police VB.net - Filtrez les polices par codepage/langue

Si je connais la "langue cible", il serait bien de ne lister que les polices qui supportent l'entrée de texte dans cette langue.

============================================== ========================

Je travaille sur une application VB.net avec un back-end SQL Server. Nous allons prendre en charge les entrées Rich-Text (acceptées par l'utilisateur) dans plusieurs langues, y compris celles qui ne sont pas en script occidental (par exemple chinois, japonais, arabe, etc.)

Nous avons une boîte de dialogue à partir de laquelle l'utilisateur peut sélectionner les langues qu'ils veulent utiliser. Pour chaque langue, l'utilisateur doit spécifier une police appropriée (par défaut) dans laquelle entrer n'importe quel texte dans cette langue, dans des zones de texte enrichi dans l'application. Exemple: l'utilisateur veut entrer du texte en chinois, il sélectionne donc "Chinois" comme langue à utiliser dans notre application. L'utilisateur doit spécifier une police dans laquelle entrer des caractères chinois; Nous affichons donc Windows.Forms.FontDialog.

Dans cette boîte de dialogue de sélection de polices, j'aimerais pouvoir filtrer la liste des polices disponibles en fonction de la page de codes (script) du langage choisi.

par exemple. la police "Brush Script MT" ne supporte que les caractères occidentaux - PAS chinois - donc si l'utilisateur choisit une police pour entrer du texte chinois, alors la police "Brush Script MT" ne devrait PAS apparaître dans la liste.

Est-ce que quelqu'un a des idées sur la façon d'accomplir cela? J'ai commencé en utilisant System.Text.Encoding pour obtenir le numéro de la page de codes de Windows en usage par le système local - suis-je dans le bon chemin?

Merci pour toute aide!

Matt

Répondre

0

D'abord, vous appelez EnumFontFamiliesEx()

Dans la fonction de rappel que vous obtenez une structure NEWTEXTMETRICEX qui décrit les propriétés de la police. La structure contient une structure incorporée nommée "ntmTm" qui a un champ "tmCharSet".

Quelques exemples de valeurs:

128 = SHIFTJIS 
129 = HANGUL 
130 = JOHAB 
134 = GB2312 
136 = CHINESEBIG5 

De cette façon, la police vous dit qu'il prend en charge par exemple le charset BIG5.

En outre, la structure a une autre structure incorporée "ntmFontSig" qui contient un champ "fsUsb" avec un champ de bits de sous-ensemble Unicode de 128 bits identifiant jusqu'à 126 sous-classes Unicode.