Ответ 1
В Windows 2000 и более поздних версиях вы можете использовать AddFontMemResourceEx для установки шрифтов для вашего процесса из памяти.
Можно ли использовать шрифт непосредственно из ресурсов в Delphi и как?
У меня проблема с самыми первыми шагами. Например, я не могу включить шрифт Segoe UI Light в ресурсах проекта, возникает исключение. И только в том случае, если расширение файла является "ttf".
Если написанное выше невозможно, то как использовать внешний шрифт без разворачивания шрифта отдельно (из исполняемого файла)?
Спасибо заранее!
В Windows 2000 и более поздних версиях вы можете использовать AddFontMemResourceEx для установки шрифтов для вашего процесса из памяти.
Если вы хотите использовать шрифт, шрифт должен быть установлен.
Но вы можете подделать это, используя 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-диске.
НТН