2010-06-06 10 views
14

Estoy trabajando en una aplicación que requiere una fuente de cierto tipo de código de barras particular que es poco probable que esté en la PC del usuario.Incrustar una fuente en delphi

¿Puedo de alguna manera incrustar la fuente en la aplicación, o necesito usar el instalador para instalar la fuente?

+5

Usted puede hacer ambas cosas. Tengo 1 pregunta, ¿es tu fuente? o, ¿puedes redistribuir? –

+1

Puede incrustarlo como un recurso. Consulte también http://stackoverflow.com/questions/2305344/how-to-use-external-fonts –

Respuesta

7

Sí, puede guardarlo como un recurso en el archivo EXE, y en la pc del usuario, puede extraerlo como un archivo utilizando una instancia de TResourceStream. Luego puede llamar a la función de API AddFontResource. Por último, debe enviar un mensaje WM_FONTCHANGE a todas las ventanas de nivel superior en el sistema (consulte la sección Observación de la descripción AddFontResource en el sitio web de MSDN).

Si necesita un código de ejemplo, hágamelo saber.

+2

Tenga en cuenta que puede romper algunas leyes de derechos de autor o restricciones de licencia, si no tiene derechos de redistribución para esta fuente. –

10

En mi opinión, la manera más fácil es usar AddFontMemResourceEx en caso de que la fuente esté incorporada como un recurso en el EXE. Permite cargar la fuente directamente desde la memoria, sin necesidad de guardar la fuente en el archivo.

Código Ejemplo:

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;