Страницы

Поиск по вопросам

среда, 13 февраля 2019 г.

Проблема с дополнительным шрифтом

Я указываю шрифт для кнопки a_Simpler
Если это шрифт не добавлен в библиотеку шрифтов:

То она пишет обычным шрифтом Microsoft Sans Serif
Можно ли сохранить шрифт a_Simpler вместе с .exe? или как решить проблему?


Ответ

Компиляция из ответов на en.SO:
Трюк состоит в том, чтобы положить шрифт в глобальную PrivateFontCollection, и использовать его оттуда. (Саму коллекцию, судя по всему, нужно положить в главный класс приложения или другое общедоступное место.)
Если он уже там у вас есть, и коллекция определена как PrivateFontCollection pfc, используйте такую конструкцию:
b.Font = new Font(pfc.Families[0], <тут указываете размер>);
Ещё нужно установить в свойствах UI-элемента UseCompatibleTextRendering в true
Вместо индекса 0 может понадобиться другой, если вы кладёте в коллекцию несколько шрифтов.

Как можно добавить шрифт в коллекцию? Для этого используются методы AddFontFile и AddMemoryFont. Если вы таскаете шрифт в файле, то всё совсем просто: pfc.AddFontFile(<тут путь к вашему файлу со шрифтом>);
Если вы решили положить шрифт в ресурсы, понадобится более сложный код.
var fontdata = Properties.Resources.Simpler; // Simpler - имя, которое вы дали шрифту var length = fontdata.Length; // в ресурсах var unsafeData = Marshal.AllocCoTaskMem(length); Marshal.Copy(fontdata, 0, unsafeData, length); pfc.AddMemoryFont(unsafeData, length); Marshal.FreeCoTaskMem(unsafeData);

Источники: [1], [2], [3], [4]

Комментариев нет:

Отправить комментарий