сторонний шрифт для приложения кроссплатформенно

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

сторонний шрифт для приложения кроссплатформенно

Сообщение VirtUX »

Есть необходимость, чтобы приложение в разных ОС (на данный момент Linux и Windows, возможно и в Mac) выглядело одинаково. Самое узкое место - это шрифты. Так как список предустановленных шрифтов в разных ОС может кардинально различаться. Из-за этого может "поползти" интерфейс и ряд контролов уехать в "невиданную даль".
Я вижу выход из ситуации - это использовать сторонний шрифт, который подгружать в приложение при старте и выгружать в OnDestroy или после Application.Run.
Нашел способы для Windows...

Код: Выделить всё

function AddFontResourceEx(_para1:LPCSTR; flags:DWORD; reserved:Pointer) : integer; stdcall; external 'gdi32' name 'AddFontResourceExA';
function RemoveFontResourceEx(_para1:LPCSTR; flags:DWORD; reserved:Pointer) : integer; stdcall; external 'gdi32' name 'RemoveFontResourceExA';

..., но не понимаю какой подключить модуль, чтобы появился тип: LPCSTR.
Для Linux и Mac ничего не находится...
zub
долгожитель
Сообщения: 2890
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Сообщение zub »

Я в ваше приложение ниногой. Шрифты должны быть какие я хочу, а не не пойми какие
Аватара пользователя
runewalsh
энтузиаст
Сообщения: 579
Зарегистрирован: 27.04.2010 00:15:25

Сообщение runewalsh »

Код: Выделить всё

uses Windows;

Алсо, лучше

Код: Выделить всё

function AddFontResourceExW(name: LPWSTR; flags: DWORD; reserved: pointer): integer; stdcall; external 'gdi32';
function RemoveFontResourceExW(name: LPWSTR; flags: DWORD; reserved: pointer): integer; stdcall; external 'gdi32';
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

VirtUX
А просто положить нужный Вам шрифт при установке программы в каталог шрифтов?
Аватара пользователя
Снег Север
долгожитель
Сообщения: 3071
Зарегистрирован: 27.11.2007 15:14:47
Контактная информация:

Сообщение Снег Север »

Vadim писал(а):А просто положить нужный Вам шрифт при установке программы в каталог шрифтов?

Лень проверять, но в последних версиях винды вряд ли пройдет - требуется регистрация шрифта в системе.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

Снег Север
Вот что значит я на винду давно плюнул. :-) В Линуксе просто скопировал и нет проблем. А винда - десятки у меня нет, проверить не могу. А в семёрке вроде с копированием проблем не было...
Аватара пользователя
VirtUX
энтузиаст
Сообщения: 880
Зарегистрирован: 05.02.2008 09:52:19
Откуда: Крым, Алушта

Сообщение VirtUX »

Если нет кроссплатформенного решения с добавлением стороннего шрифта в приложение, то может есть какой-то способ заставить шрифт быть определенной высоты в пикселях? По ширине, я так понимаю, он в любом случае поползет...
И, может можно как-то искать в операционной системе моноширенный шрифт и использовать его?
Dakor
новенький
Сообщения: 16
Зарегистрирован: 14.04.2018 23:01:01

Сообщение Dakor »

Решение в лоб - подбирать такой Font.Size, для которого Canvas.TextWidth или Canvas.TextHeight будет максимально приближено к нужному значению. Но тут есть нюансы.

Доступные шрифты есть в Screen.Fonts. Далее копать в сторону характеристик шрифта, чтобы понять, что он моноширинный.
Аватара пользователя
zoltanleo
постоялец
Сообщения: 459
Зарегистрирован: 17.10.2013 10:55:01

Сообщение zoltanleo »

Dakor писал(а):Решение в лоб - подбирать такой Font.Size, для которого Canvas.TextWidth или Canvas.TextHeight будет максимально приближено к нужному значению

+100500

Я так с кнопками и метками делаю, чтобы первые не выглядели убого, а вторые не вылезали за форму. Часто приходится класть на форму сначала скроллбокс, а на него bevel, к которому уже можно привязывать остальные гуишные элементы. Отступы bevel'а рассчитываются при создании формы и вот тут есть нюансы (каждый раз приходится на линухе проверять, как выглядит). Скроллбокс очень пригождается, когда элементы лежат не просто на форме, а, например, на вкладке pagecontrol, которые имеет ограничение по размерам
Ответить