2010-02-21 18 views
11

È possibile utilizzare un font direttamente dalle risorse in Delphi e come?Come utilizzare i caratteri esterni?

Ho un problema con i primissimi passaggi.Esempio non è possibile includere il font Segoe UI Light nelle risorse di un progetto, si verifica un'eccezione. E questo è solo se l'estensione del file è 'ttf'.

Se la scritta sopra non è possibile, come faccio ad usare un font esterno senza distribuire il font separatamente (da eseguibile)?

Grazie in anticipo!

risposta

12

In Windows 2000 e versioni successive, è possibile utilizzare AddFontMemResourceEx per installare i font per il vostro processo dalla memoria.

+0

Proprio quello che stavo cercando, grazie! –

+0

vuoi mostrarmi un esempio? – sma6871

11

Se si desidera utilizzare un carattere, è necessario installare il carattere. Ma puoi simulare questo, 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; 

Come si vede l'AddFontResource ha bisogno di un nome di file. Lo stesso sta per AddFontResourceEx.

Quindi è necessario un file di font. Ma possiamo anche fingere questo.

Usa 's TjvDataEmbedded per includere il file TTF nel file eseguibile. Per incorporare il file del font è semplice. (Clic con il tasto destro, 'Carica da file' ...).

In fase di esecuzione, estrai il tuo file nella directory temporanea dell'utente (vedi Metodi TjvDataEmbedded - Non lo so ora, ma dovrebbe essere qualcosa come SaveToFile o simile). Btw puoi estrarlo in qualsiasi altra directory che ti piace. Chiama il numero AddFontResource su di esso.

Inoltre, in base alle proprie esigenze, è possibile estrarre il file in una memoria mappata e/o in un'unità RAM.

HTH

+0

Ottima risposta! Grazie! Dura solo una cosa: come posso assegnare TForm.Font con il carattere "installato"? –

+2

@John: Questo è valido per quanto riguarda il lato tecnico - tuttavia ** è necessario ** per assicurarsi di disporre dei diritti di ridistribuzione per il carattere. – mghie

+0

@ John: è necessario conoscere il nome del carattere. È facile: installa il carattere, apri il WordPad (o simile) e vedi come appare il nome del font. Per esempio. per timesb.ttf il nome è 'Times New Roman (Bold)'. Quindi, nella tua applicazione devi assegnare il ** nome del font ** (non il nome del file) al TForm.Font. Es. dopo aver installato (utilizzando la procedura sopra) il mytimes.ttf si avrà la linea: myMainForm.Font.Name: = 'My Times New Roman'; myMainForm.Font.Size: = 10; //eccetera. Come parte, assicurati che tutti i controlli del tuo modulo abbiano 'ParentFont: = True' –

Problemi correlati