2010-06-06 3 views
14

Ich arbeite an einer App, die eine bestimmte Barcode-True-Type-Schriftart benötigt, die sich wahrscheinlich nicht auf dem PC des Benutzers befindet.Eine Schriftart in Delphi einbetten

Kann ich die Schriftart irgendwie in die App einbetten, oder muss ich das Installationsprogramm verwenden, um die Schriftart zu installieren?

+5

Sie können beides tun. Ich habe 1 Frage, es ist deine Schrift? oder, können Sie neu verteilen? –

+1

Sie können es als Ressource einbetten. Siehe auch http://stackoverflow.com/questions/2305344/how-to-use-external-fonts –

Antwort

7

Ja, Sie können es als Ressource in der EXE-Datei speichern und auf dem Computer des Benutzers können Sie es als Datei mithilfe einer TResourceStream-Instanz extrahieren. Dann können Sie AddFontResource API-Funktion aufrufen. Zuletzt sollten Sie eine WM_FONTCHANGE-Nachricht an alle Top-Level-Fenster im System senden (siehe Abschnitt "Remark" der AddFontResource-Beschreibung auf der MSDN-Website).

Wenn Sie einen Beispielcode benötigen, lassen Sie es mich wissen.

+2

Beachten Sie, dass Sie möglicherweise einige Urheberrechtsgesetze oder Lizenzeinschränkungen verletzen, wenn Sie nicht über die Weiterverteilungsrechte für diese Schriftart verfügen. –

10

Meiner Meinung nach ist der einfachste Weg, AddFontMemResourceEx zu verwenden, falls die Schriftart als Ressource in die EXE eingebettet ist. Es erlaubt das Laden der Schriftart direkt aus dem Speicher, keine Notwendigkeit, die Schriftart in Datei zu speichern.

Codebeispiel:

function LoadResourceFont(const ResourceName, FontName : string) : boolean; 
var 
    ResStream : tResourceStream; 
    FontsCount : integer; 
    hFont : tHandle; 
begin 
    ResStream := tResourceStream.Create(hInstance, ResourceName, RT_RCDATA); 
    hFont := AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount); 
    result := (hFont <> 0); 
    ResStream.Free(); 
end;