Firemonkey: Hinzufügen einer Schriftart aus der Ressource zum Speicher und deren Verwendung

9

In VCL könnte ich eine Schriftart aus der Ressource laden und ohne sie zu speichern, könnte ich sie aus dem Speicher verwenden.

Hier ist der Code, den ich benutze und der in VCL funktioniert:

%Vor%

In Firemonkey habe ich button1.Font.name in button1.Font.family geändert, aber leider hat sich die Schriftart nicht geändert. Also ich denke, dieser Code ist nicht kompatibel mit FireMonkey.

Wie kann ich also in Firemonkey eine Schriftart aus einer Ressource laden und temporär im Speicher ablegen und direkt von dort aus verwenden?

Aktualisierung:

Ich habe diese Seiten gesehen: Install font in firemonkey , Wie verwendet man externe Schriftarten?

Nach Mr. Ed 's Antwort scheint es, dass es keine Lösung dafür gibt Dieses Problem in FMX. Aber vielleicht könnten wir die Schriftart laden, wenn wir sie vor dem Ausführen der App installieren. Ich habe fast alles ausprobiert, kann aber die Schrift immer noch nicht laden.

    
Sky 29.01.2014, 14:07
quelle

3 Antworten

1

Es gibt auch StylesSettings.ssFamily: Boolean-Eigenschaft in New Delphi und muss auf False gesetzt werden, damit die benutzerdefinierte Schriftfamilie funktioniert. Dasselbe gilt für Size, Style und FontColor.

    
Xawery Wiśniowiecki 29.01.2014 17:24
quelle
1

Dies kann oder kann nicht helfen.

Haftungsausschluss

Dies erfordert zusätzliche Forschungen, zu denen ich noch nicht gekommen bin, aber ich glaube, dass dies ein guter Ausgangspunkt ist.

Link zur MSDN-Seite: - Benutzerdefinierte Schriftart Sammlungen

Sie müssen die WinAPI.D2D1 Einheit verwenden (Sie können FMX.TextLayout und FMX.Canvas.D2D auch benötigen) Zugriff auf die Directwrite-API zu gewinnen. Damit können Sie die DirectWrite-Factorys aufrufen, mit denen Sie eine Schriftart von der Festplatte definieren und laden können.

Sobald Sie die Schriftart AFAIK geladen haben, sollte sie dann für die gesamte Anwendung und hoffentlich für alle Steuerelemente von Firefemonkey verfügbar sein. Es ist durchaus möglich, dass flememonkey Schriftarten nur beim Laden der Anwendung aufzählt, also kann dies alles nichts sein.

Wie ich schon sagte, erfordert dies Forschung, zu der ich noch nicht gekommen bin, also funktioniert das vielleicht nur, wenn Sie auch Ihre Kontrolle (was ich sein werde) selbst malen und deshalb möglicherweise nicht geeignet sind.

    
user3281284 12.03.2014 12:18
quelle
0

Ich denke, ich habe eine Antwort, die nur durch eine Menge Hilfe von Roy Nelson von Embarcaderos Support-Mitarbeitern möglich war, die mich in die richtige Richtung wiesen.

Ich habe überprüft, dass dies mit Berlin 10.1 (ohne den Anniversary Patch) unter Windows 10, 64 Bit funktioniert, aber ich kann nicht garantieren, dass es auf allen Compiler-Versionen / Windows-Versionen und allen Einsichten funktioniert, die andere Leute anbieten wäre sehr interessant zu hören.

Zunächst einmal denke ich, dass das (momentan) unüberwindbare Problem darin liegt, AddFontMemResourceEx zu verwenden, das Schriftarten erzeugt, die nicht aufzählbar sind, und für Firemonkey eine installierte TrueType-Schriftart in eine grafisch gerenderte D2D-Schriftart zu konvertieren - was es tatsächlich nutzt - es muss es erst finden können.

Das Ersetzen von AddFontMemResourceEx durch AddFontResource durch eine temporäre Schriftartdatei, die Sie aus der Ressource schreiben, löst dieses Problem, reicht jedoch nicht aus. Nach der Installation müssen Sie die TextLayout-Rendering-Engine erzwingen, ihre Schriftartenliste neu zu erstellen. Dies können Sie tun, indem Sie zwei Zeilen von der Unit FMX.Canvas.D2D.pas aufrufen.

%Vor%

Ich habe ein Testprojekt auf GitHub bei Ссылка für jeden veröffentlicht, der es ausprobieren möchte.

Im Grunde erstellen Sie eine Ressourcendatei mit Ihren Fonts darin - nummeriert von 0 bis was auch immer - ersetzen Sie die Zeile {$ R assimilate.res} in der FMXFontInstaller.pas, mit der, die Sie erstellt haben, fügen Sie diese Datei hinzu Ihre Projektquelle und Sie sollten theoretisch gut gehen.

    
Byte Player 24.03.2017 09:37
quelle