2010-02-21 12 views
11

Est-il possible d'utiliser une police directement à partir de ressources dans Delphi et comment?Comment utiliser les polices externes?

J'ai un problème avec les toutes premières étapes.Exemple je ne peux pas inclure la police Segoe UI Light dans les ressources d'un projet, une exception se produit.Et seulement si l'extension du fichier est 'ttf'.

Si l'écriture ci-dessus n'est pas possible, comment puis-je utiliser une police externe sans déployer la police séparément (à partir de l'exécutable)?

Merci d'avance!

Répondre

12

Sous Windows 2000 et versions ultérieures, vous pouvez utiliser AddFontMemResourceEx pour installer des polices pour votre processus de la mémoire.

+0

Juste ce que je cherchais, merci! –

+0

pourriez-vous me montrer un exemple? – sma6871

11

Si vous souhaitez utiliser une police, la police doit être installée. Mais vous pouvez faire semblant, en utilisant 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; 

Comme vous voyez le AddFontResource a besoin d'un nom de fichier. La même chose signifie AddFontResourceEx.

Vous avez donc besoin d'un fichier de police. Mais on peut aussi faire semblant.

Utilisez JVCL's TjvDataEmbedded pour inclure votre fichier TTF dans votre fichier. Pour intégrer le fichier de police est simple. (Clic droit, 'Charger à partir du fichier' ...). Lors de l'exécution, extrayez votre fichier dans le répertoire temporaire de l'utilisateur (voir Méthodes TjvDataEmbedded - Je ne sais pas maintenant, mais cela devrait ressembler à SaveToFile ou similaire). Btw vous pouvez l'extraire dans n'importe quel autre répertoire que vous aimez. Appelez le AddFontResource à ce sujet.

En outre, selon vos besoins, vous pouvez extraire le fichier dans une mémoire mappée et/ou dans un lecteur RAM.

HTH

+0

Bonne réponse! Je vous remercie! Une seule chose dure: Comment assigner TForm.Font avec la police 'installée'? –

+2

@John: C'est bon en ce qui concerne le côté technique - cependant vous devez ** vous assurer que vous avez des droits de redistribution pour la police. – mghie

+0

@John: Vous devez connaître le nom de la police. C'est facile - installer la police, ouvrir le WordPad (ou similaire) et voir ce que le nom de la police apparaît. Par exemple. pour timesb.ttf, le nom est 'Times New Roman (Bold)'. Par conséquent, dans votre application, vous devez affecter le ** nom de police ** (pas le nom de fichier) à TForm.Font. Par exemple. après l'installation (en utilisant la procédure ci-dessus) le mytimes.ttf vous aurez la ligne: myMainForm.Font.Name:='My Times New Roman '; myMainForm.Font.Size: = 10; //etc. En outre, assurez-vous que tous les contrôles de votre formulaire ont 'ParentFont: = True' –