Как использовать внешние шрифты? - PullRequest
12 голосов
/ 21 февраля 2010

Можно ли использовать шрифт непосредственно из ресурсов в Delphi и как?

У меня проблема с самыми первыми шагами. Например, я не могу включить шрифт Segoe UI Light в ресурсы проекта, возникает исключение. И это только в том случае, если расширение файла равно 'ttf'.

Если написанное выше невозможно, то как мне использовать внешний шрифт без развертывания шрифта отдельно (от исполняемого файла)?

Заранее спасибо!

Ответы [ 2 ]

13 голосов
/ 22 февраля 2010

В Windows 2000 и более поздних версиях вы можете использовать AddFontMemResourceEx для установки шрифтов для вашего процесса из памяти.

12 голосов
/ 21 февраля 2010

Если вы хотите использовать шрифт, шрифт должен быть установлен. Но вы можете подделать это, используя 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;

Как видите, AddFontResource необходимо имя файла. То же самое относится к AddFontResourceEx .

Итак, вам нужен файл шрифта. Но мы также можем подделать это.

Используйте JVCL TjvDataEmbedded, чтобы включить ваш файл TTF в исполняемый файл. Вставить файл шрифта просто. (Щелкните правой кнопкой мыши, «Загрузить из файла» ...).

Во время выполнения извлеките ваш файл во временную директорию пользователя (см. Методы TjvDataEmbedded - я не знаю сейчас, но это должно быть что-то вроде SaveToFile или аналогичное) Кстати, вы можете извлечь его в любой другой каталог, который вам нравится. Звоните AddFontResource на него.

Кроме того, в соответствии с вашими требованиями, вы можете извлечь файл в карту памяти и / или в ОЗУ.

НТН

...