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

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

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

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

Сообщение VirtUX » 05.07.2019 21:26:53

Есть необходимость, чтобы приложение в разных ОС (на данный момент 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 ничего не находится...
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение zub » 05.07.2019 21:32:50

Я в ваше приложение ниногой. Шрифты должны быть какие я хочу, а не не пойми какие
zub
долгожитель
 
Сообщения: 2884
Зарегистрирован: 14.11.2005 23:51:26

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

Сообщение runewalsh » 05.07.2019 21:58:04

Код: Выделить всё
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';
Аватара пользователя
runewalsh
энтузиаст
 
Сообщения: 578
Зарегистрирован: 27.04.2010 00:15:25

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

Сообщение Vadim » 06.07.2019 09:06:45

VirtUX
А просто положить нужный Вам шрифт при установке программы в каталог шрифтов?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Снег Север » 06.07.2019 12:14:15

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

Лень проверять, но в последних версиях винды вряд ли пройдет - требуется регистрация шрифта в системе.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

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

Сообщение Vadim » 06.07.2019 17:39:09

Снег Север
Вот что значит я на винду давно плюнул. :-) В Линуксе просто скопировал и нет проблем. А винда - десятки у меня нет, проверить не могу. А в семёрке вроде с копированием проблем не было...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение VirtUX » 07.07.2019 10:02:57

Если нет кроссплатформенного решения с добавлением стороннего шрифта в приложение, то может есть какой-то способ заставить шрифт быть определенной высоты в пикселях? По ширине, я так понимаю, он в любом случае поползет...
И, может можно как-то искать в операционной системе моноширенный шрифт и использовать его?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

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

Сообщение Dakor » 07.07.2019 10:29:46

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

Доступные шрифты есть в Screen.Fonts. Далее копать в сторону характеристик шрифта, чтобы понять, что он моноширинный.
Dakor
новенький
 
Сообщения: 16
Зарегистрирован: 15.04.2018 00:01:01

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

Сообщение zoltanleo » 10.07.2019 13:15:03

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

+100500

Я так с кнопками и метками делаю, чтобы первые не выглядели убого, а вторые не вылезали за форму. Часто приходится класть на форму сначала скроллбокс, а на него bevel, к которому уже можно привязывать остальные гуишные элементы. Отступы bevel'а рассчитываются при создании формы и вот тут есть нюансы (каждый раз приходится на линухе проверять, как выглядит). Скроллбокс очень пригождается, когда элементы лежат не просто на форме, а, например, на вкладке pagecontrol, которые имеет ограничение по размерам
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 457
Зарегистрирован: 17.10.2013 10:55:01


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 20

Рейтинг@Mail.ru