Карта сайтаСсылкиКонтакты

Подключение шрифта из файла ресурсов

PDF Печать
Статьи

Для начала нужно создать файл ресурсов (*.RES), который будет содержать необходимые шрифты. В нашем примере это MyNewFonts.res.

Затем необходимо подключить этот файл ресурсов к проекту, добавив строку {$R MyNewFonts.RES} в секцию implementation. Для получения шрифта из ресурсов необходимо создать объект TResorceStream и добавить шрифт процедурой AddFontResource.

Шрифт из ресурсов

А для включения шрифта Вы должны использовать сообщение Windows WM_FONTCHANGE. У нас есть раздел MYFONT, который содержит файл щрифта в файле ресурсов.

Шрифт загружаем в MyNewFonts.res файл в секцию RCData по имени MYFONT.

Посмотрим пример выполнения:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, 
  Graphics, Controls, Forms, Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
{$R MyNewFonts.res}    // должен быть в папке с проектом или указать путь

procedure TForm1.FormCreate(Sender: TObject);
var
  MyResStream: TResourceStream;
begin
  MyResStream:= TResourceStream.Create(hInstance, 'MYFONT', RT_RCDATA);
  MyResStream.SaveToFile('MyFont1.ttf');  // Файл для хранения шрифта
  AddFontResource(PChar('MyFont1.ttf'));  // Теперь читаем его
  SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
  Label1.Font.Charset:= DEFAULT_CHARSET;  // Поставим по умолчанию
  Label1.Font.Size:= 24;
  Label1.Font.Name:= 'PFScandalPro-DisplayBold';  // Здесь пишем имя шрифта
end;

end.


 

Комментарии   

 
+1 #1 Вадим 21.04.2011 19:32
А нельзя ли не сохранять шрифт файла, а прямо из ресурса установить?
Цитировать
 
 
0 #2 guest 28.04.2011 23:26
Цитирую Вадим:
А нельзя ли не сохранять шрифт файла, а прямо из ресурса установить?


Разумеется!
http://decoding.narod.ru/faq/font/font001.html#001
Цитировать
 
 
+1 #3 alexweiye 31.05.2011 10:01
Не забывайте в оброботчике FormClose прописать:

RemoveFontResource(PChar('MyFont1.ttf'));

...иначе в дальнейшем будут ошибки с памятью... :eek:
Цитировать
 

Добавить комментарий


Защитный код
Обновить