Подтвердить что ты не робот

Как использовать внешние шрифты?

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

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

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

Спасибо заранее!

4b9b3361

Ответ 1

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

Ответ 2

Если вы хотите использовать шрифт, шрифт должен быть установлен. Но вы можете подделать это, используя 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 или аналогичного). Btw вы можете извлечь его в любом другом каталоге, который вам нравится. Вызовите AddFontResource на нем.

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

НТН