Question

Quel est le meilleur moyen de rechercher toutes les polices système disponibles pour pouvoir les afficher dans une liste déroulante?

J'aimerais également distinguer les polices Unicode des polices non Unicode.

J'utilise Delphi 2009, qui est entièrement compatible avec Unicode et souhaite une solution Delphi.

Était-ce utile?

La solution

La propriété Screen.Fonts est renseignée via la Fonction de l'API EnumFontFamiliesEx . Recherchez dans Forms.pas un exemple d’appel de cette fonction.

La fonction de rappel qu'elle appelle recevra un TNewTextMetricEx , et l'un des membres de celui-ci est un TFontSignature . Le champ fsUsb indique quelle sous-gamme Unicode doit être prise en charge par les revendications de police.

Le système ne dispose pas en réalité de "polices Unicode". Même les polices dont le nom contient le mot Unicode ne comportent pas de glyphes pour tous les caractères Unicode. Vous pouvez faire la distinction entre les polices bitmap, imprimante et TrueType, mais vous pouvez également déterminer si la police que vous envisagez prend en charge les caractères souhaités. Et si la police n’est pas ce que vous considéreriez comme une "police Unicode", mais il prend en charge tous les caractères dont vous avez besoin, alors quelle différence cela fait-il? Pour obtenir ces informations, vous pouvez être intéressé par GetFontUnicodeRanges . / a>.

La technologie Microsoft permettant d'afficher du texte avec différentes polices en fonction des polices qui contiennent les caractères est Annuler la diffusion , en particulier la remplacement de police a>. Je ne suis au courant d'aucun support Delphi pour Uniscribe; J'ai commencé à écrire une série d'unités d'importation pour elle une fois, mais mes intérêts sont inconstants et je suis passé à autre chose avant de la terminer. Le le blog de Michael Kaplan parle parfois d'Uniscribe, c'est donc un autre endroit à regarder.

Autres conseils

Je peux répondre à la moitié de votre question. Vous pouvez obtenir une liste des polices auxquelles votre environnement actuel a accès sous forme de liste de chaînes à partir de l'objet Screen global

.

c'est-à-dire

Listbox1.Items.AddStrings(Screen.Fonts);

Vous pouvez consulter la source forms.pas pour voir comment Codegear remplit Screen.Fonts en énumérant les polices Windows. La structure LOGFONT renvoyée possède un membre charset, mais cela ne fournit pas une simple détermination 'Unicode'.

Autant que je sache, Windows ne peut pas vous dire explicitement si une police est "Unicode". De plus, si vous essayez d’afficher du texte Unicode dans une police «non Unicode», Windows peut remplacer une police différente. Il est donc difficile de dire si une police affichera ou non Unicode. Par exemple, j'ai un ancien fichier de police Arial Black qui ne contient pas de glyphes Unicode, mais si je l'utilise pour afficher du texte japonais dans un mémo D2009, le japonais s'affiche correctement dans Arial et le reste dans Arial Black. Dans d’autres exemples, les carrés vides habituels peuvent apparaître.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top