2010-02-21 28 views
11

¿Es posible utilizar una fuente directamente de recursos en Delphi y cómo?¿Cómo usar fuentes externas?

Tengo un problema con los primeros pasos. Ejemplo No puedo incluir la fuente Segoe UI Light en los recursos de un proyecto, se produce una excepción. Y eso solo es si la extensión del archivo es 'ttf'.

Si lo escrito anteriormente no es posible, ¿cómo utilizo una fuente externa sin implementar la fuente por separado (desde el ejecutable)?

¡Gracias de antemano!

Respuesta

12

En Windows 2000 y versiones posteriores, puede utilizar AddFontMemResourceEx instalar fuentes para su proceso de la memoria.

+0

Justo lo que estaba buscando, ¡Gracias! –

+0

¿me mostrarías un ejemplo? – sma6871

11

Si desea utilizar una fuente, la fuente debe estar instalada. Pero puede falsificar esto, usando AddFontResource.

procedure TForm1.FormCreate(Sender: TObject) ; 
begin 
    AddFontResource('c:\FONTS\MyFont.TTF') ; 
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ; 
end; 

//Before application terminates we must remove our font: 
procedure TForm1.FormDestroy(Sender: TObject) ; 
begin 
    RemoveFontResource('C:\FONTS\MyFont.TTF') ; 
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ; 
end; 

Como ve, el AddFontResource necesita un nombre de archivo. Lo mismo significa AddFontResourceEx.

Así que necesita un archivo de fuente. Pero también podemos falsificar eso.

Use JVCLTjvDataEmbedded para incluir su archivo TTF en su ejecutable. Para incrustar el archivo de fuente es directo. (Haga clic con el botón derecho, 'Cargar desde archivo' ...).

En tiempo de ejecución, extraiga su archivo en el directorio temporal del usuario (consulte TjvDataEmbedded methods - No lo sé ahora, pero debería ser algo así como SaveToFile o similar). Por cierto, puede extraerlo en cualquier otro directorio que desee. Llame al AddFontResource en él.

Además, de acuerdo con sus requisitos, puede extraer el archivo en una memoria mapeada y/o en una unidad RAM.

HTH

+0

¡Excelente respuesta! ¡Gracias! Solo una cosa dura: ¿Cómo asigno TForm.Font con la fuente 'instalada'? –

+2

@John: Esto es bueno en lo que se refiere a la parte técnica; sin embargo, ** necesita ** para asegurarse de que tiene derechos de redistribución para la fuente. – mghie

+0

@John: debe saber el nombre de la fuente. Esto es fácil: instale la fuente, abra el WordPad (o similar) y vea cuál es el nombre de la fuente. P.ej. para timesb.ttf el nombre es 'Times New Roman (Bold)'. Por lo tanto, en su aplicación debe asignar el ** nombre de fuente ** (no el nombre del archivo) al TForm.Font. Por ejemplo. después de instalar (utilizando el procedimiento anterior) mytimes.ttf tendrá la línea: myMainForm.Font.Name:='My Times New Roman '; myMainForm.Font.Size: = 10; // Como complemento, asegúrese de que todos los controles de su formulario tengan 'ParentFont: = True' –

Cuestiones relacionadas