Domanda

Qual è il modo migliore per trovare tutti i font di sistema disponibili per un utente in modo che possano essere visualizzati in una casella di selezione a discesa?

Vorrei anche distinguere tra i caratteri Unicode e non Unicode.

Sto usando Delphi 2009 che è completamente abilitato Unicode e vorrei una soluzione Delphi.

È stato utile?

Soluzione

La proprietà Screen.Fonts viene popolata tramite EnumFontFamiliesEx funzione API . Cerca in Forms.pas un esempio di chiamata a quella funzione.

La funzione di callback che chiama riceverà un TNewTextMetricEx e uno dei membri di quel record è un TFontSignature . Il campo fsUsb indica quale Unicode sostituisce le richieste di font da supportare.

Il sistema non ha effettivamente " caratteri Unicode. " Anche i caratteri che hanno la parola Unicode nei loro nomi non hanno glifi per tutti caratteri Unicode. Puoi distinguere tra bitmap, stampante e caratteri TrueType, ma oltre a ciò, il meglio che puoi fare è capire se il carattere che stai considerando supporta i caratteri che desideri. E se il carattere non è quello che considereresti un carattere " Unicode & " ma supporta tutti i personaggi di cui hai bisogno, quindi che differenza fa? Per ottenere queste informazioni, potresti essere interessato a GetFontUnicodeRanges .

La tecnologia Microsoft per la visualizzazione di testo con caratteri diversi in base a quali caratteri contengono quali caratteri è Annulla iscrizione , in particolare fallback dei caratteri . Non sono a conoscenza di alcun supporto Delphi per Uniscribe; Ho iniziato a scrivere una serie di unità di importazione per una volta, ma i miei interessi sono instabili e sono passato a qualcos'altro prima di completarlo. il blog di Michael Kaplan parla di Uniscribe a volte, quindi è un altro posto dove cercare.

Altri suggerimenti

Posso rispondere a metà della tua domanda, puoi ottenere un elenco dei caratteri a cui il tuo ambiente corrente ha accesso come elenco di stringhe dall'oggetto Schermo globale

cioè.

Listbox1.Items.AddStrings(Screen.Fonts);

Puoi guardare nella fonte di form.pas per vedere come Codegear riempie Screen.Fonts enumerando i caratteri di Windows. La struttura LOGFONT restituita ha un membro charset, ma ciò non fornisce una semplice determinazione "Unicode".

Per quanto ne so, Windows non può dirti esplicitamente se un carattere è "Unicode". Inoltre, se si tenta di visualizzare il testo Unicode in un carattere "non Unicode", Windows può sostituire un carattere diverso, quindi è difficile dire se un carattere visualizzerà o meno Unicode. Ad esempio, ho un file di caratteri Arial Black antico che non contiene glifi Unicode, ma se lo uso per visualizzare il testo giapponese in un memo D2009, il giapponese viene visualizzato correttamente in Arial e il resto in Arial Black. In altri esempi, possono apparire i soliti quadrati vuoti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top