Страница 1 из 1
Внутренний шрифт в плагинах/утилитах...
Добавлено: Пн июл 10, 2006 09:59
Maximus
Узнал вот о проблемах отображения шрифтов у забугорных пользователей:
http://www.ghisler.ch/board/viewtopic.php?t=4858
Общий смысл я уловил, но всё равно хотелось бы попросить владеющих английским лучше меня перевести содержимое указанной темы, поскольку это актуально для тех, кто пишет плагины/утилиты с мультиязычным интерфейсом и заботится о соих пользователях :)
Добавлено: Пн июл 10, 2006 10:08
CaptainFlint
Если вкратце: многие используют конкретный фиксированный шрифт в своих диалогах, типа MS Sans Serif. Это плохо тем, что в нём нет многих полезных символов, что мешает локализовывать программу. Предлагается использовать Arial Latin или Tahoma Latin, 8, normal, а ещё лучше - дать пользователю возможность самому выбирать шрифт.
Где-то ещё Clo писал о шрифте MS Shell Dlg, который хорош тем, что сам по себе является "виртуальным", ненастоящим шрифтом, а настраивается через глобальные системные настройки; в результате у пользователя все программы выглядят одинаково (если они, конечно, используют этот шрифт).
Добавлено: Пн июл 10, 2006 10:14
Maximus
А во втором сообщении темы. Там о другой проблеме или всё о той же?
Добавлено: Пн июл 10, 2006 10:44
CaptainFlint
Там он рассуждает, что можно использовать всякие спец-символы внутри текстовых LNG-файлов (например, писать "кривой" апостроф явно вместо задания его через десятичный код; не указывать бэк-слеш перед внутренними кавычками).
Добавлено: Пн июл 10, 2006 11:00
Maximus
Спасибо.
А как же организовать выбор шрифта (как в ТС), чтобы быстро и красиво?
Добавлено: Пн июл 10, 2006 15:15
CaptainFlint
Не совсем понял вопрос. К какой части интерфейса относится фраза "как же организовать выбор шрифта"? К собственно диалогу выбора? К кнопочкам для вызова этого диалога? К отображаемому рядом с кнопочкой примеру текста в выбранном шрифта?..
Если первое, то есть стандартная WinAPI-функция ChooseFont для вызова этого самого диалога, а в зависимости от среды программирования есть и разнообразные обёртки для этой функции.
Добавлено: Пн июл 10, 2006 16:00
Maximus
Я имел в виду совсем другое. Как разом для всех компонентов формы поменять этот самый шрифт. Но уже справился.
Код: Выделить всё
fdFont->Font=fmMain->Font;
if(fdFont->Execute())
{
fmMain->Font=fdFont->Font;
fmMain->Repaint();
}
Но небольшая проблема всё равно осталась. Панели, ГроупБоксы, СкроллБары, может ещё что-то не перерисовываются. Что делать?
Добавлено: Чт июл 13, 2006 10:54
Maximus
Решил проблему так:
Код: Выделить всё
fdFont->Font=fmMain->Font;
if(fdFont->Execute())
{
fmMain->Font=fdFont->Font;
for(int i=0;i<fmMain->ComponentCount;i++)
{
TControl *Component=(TControl *)fmMain->Components[i];
if(Component->HasParent() && !Component->ClassNameIs("TMenuItem"))
Component->Repaint();
}
}
Подразумевается, что у всех компонентов ParentFont==true.
fdFont - это FontDialog; fmMain - это форма.
Возможно кроме TMenuItem в условии придется добавить еще какие-то классы, если они используются и при вызове для них Repaint() вываливается ошибка.