How to use external fonts?

后端 未结 2 2102
星月不相逢
星月不相逢 2020-12-08 17:08

Is it possible to use a font directly from resources in Delphi and how?

I have a problem with the very first steps.Example I cannot include Segoe UI Light font in re

相关标签:
2条回答
  • 2020-12-08 17:41

    On Windows 2000 and later, you can use AddFontMemResourceEx to install fonts for your process from memory.

    0 讨论(0)
  • 2020-12-08 17:44

    If you want to use a font the font must be installed. But you can fake this, by using 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;
    

    As you see the AddFontResource needs a file name. The same stands for AddFontResourceEx.

    So you need a font file. But we can also fake that.

    Use JVCL's TjvDataEmbedded to include your TTF file in your executable. To embed the font file is straightforard. (Right-Click, 'Load from File'...).

    At runtime, extract your file in user's temporary directory (see TjvDataEmbedded methods - I don't know now, but it should be something like SaveToFile or similar). Btw you can extract it in any other directory you like. Call AddFontResource on it.

    Also, according to your requirements, you can extract the file in a memory mapped one and/or in a RAM drive.

    HTH

    0 讨论(0)
提交回复
热议问题