Frage

Was ist der beste Weg, um all das System finden Schriften ein Benutzer zur Verfügung hat, so dass sie in einem Drop-Down-Auswahlfeld angezeigt werden?

Ich würde auch zwischen Unicode und Nicht-Unicode-Schriften unterscheiden mag.

Ich bin mit Delphi 2009, die vollständig Unicode-fähig ist, und möchte eine Delphi-Lösung.

War es hilfreich?

Lösung

Die Screen.Fonts Eigenschaft wird über die EnumFontFamiliesEx API-Funktion . Schauen Sie in Forms.pas Ein Beispiel für diese Funktion aufrufen.

Die Callback-Funktion, die es erhalten ruft einen TNewTextMetricEx Rekord, und eines der Mitglieder dieser Datensatz ist ein TFontSignature . Das fsUsb Feld gibt an, welche Unicode SUBRanges die Schrift Ansprüche zu unterstützen.

Das System eigentlich nicht „Unicode-Schriften“ hat. Selbst die Schriften, die das Wort haben Unicode in ihren Namen haben keine Glyphen für alle Unicode-Zeichen. Sie können zwischen Bitmap, Drucker und Truetype-Schriften, sondern darüber hinaus, dass zu unterscheiden, das Beste, was Sie tun können, ist, um herauszufinden, ob die Schriftart Sie erwägen, die Zeichen unterstützt Sie wollen. Und wenn die Schrift nicht das, was Sie betrachten würde „Unicode-Schrift“, aber es unterstützt alle Zeichen, die Sie benötigen, dann was für einen Unterschied macht das? Um diese Informationen zu erhalten, können Sie Interesse an GetFontUnicodeRanges .

Die Microsoft-Technologie für Text mit verschiedenen Schriftarten angezeigt wird, basierend auf welche Schriften enthalten, die Zeichen Uniscribe , insbesondere font Rückfall . Ich bin mir nicht bekannt, dass Delphi Unterstützung für Uniscribe; Ich begann einmal für eine Reihe von Import-Einheiten zu schreiben, aber meine Interesse sind wankelmütig, und ich ging weiter, um etwas anderes, bevor ich es fertig gestellt. Michael Kaplan Blog spricht über Uniscribe manchmal, so das ist eine andere Stelle zu suchen.

Andere Tipps

Ich kann die Hälfte Ihrer Frage beantworten, können Sie eine Liste der Schriftarten, die Ihre aktuelle Umgebung Zugriff hat als String-Liste aus dem globalen Bildobjekt

d.

Listbox1.Items.AddStrings(Screen.Fonts);

Sie können in der forms.pas Quelle sehen, wie CodeGear Screen.Fonts füllen, indem Sie die Windows-Schriftarten aufzuzählen. Die zurück LOGFONT-Struktur hat ein charset Mitglied, aber dies stellt keine einfache ‚Unicode‘ Bestimmung.

Soweit ich weiß, Windows kann nicht explizit sagen, ob eine Schriftart ist ‚Unicode‘. Außerdem, wenn Sie Schriftart Unicode-Text in einem ‚Nicht-Unicode‘ angezeigt werden versuchen, Windows möglicherweise eine andere Schriftart ersetzen, so ist es schwierig zu sagen, ob eine Schriftart oder nicht Unicode angezeigt wird. Zum Beispiel habe ich eine alte Schriftart Arial Black-Datei, die keine Unicode Glyphen enthält, aber wenn ich diese verwenden japanischen Text in einem D2009 Memo angezeigt werden, zeigt die japanische richtig in Arial und den Rest in Arial Black auf. In anderen Beispielen können die üblichen leeren Quadrate angezeigt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top