Внутренний шрифт в плагинах/утилитах...
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
Внутренний шрифт в плагинах/утилитах...
Узнал вот о проблемах отображения шрифтов у забугорных пользователей:
http://www.ghisler.ch/board/viewtopic.php?t=4858
Общий смысл я уловил, но всё равно хотелось бы попросить владеющих английским лучше меня перевести содержимое указанной темы, поскольку это актуально для тех, кто пишет плагины/утилиты с мультиязычным интерфейсом и заботится о соих пользователях :)
http://www.ghisler.ch/board/viewtopic.php?t=4858
Общий смысл я уловил, но всё равно хотелось бы попросить владеющих английским лучше меня перевести содержимое указанной темы, поскольку это актуально для тех, кто пишет плагины/утилиты с мультиязычным интерфейсом и заботится о соих пользователях :)
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Если вкратце: многие используют конкретный фиксированный шрифт в своих диалогах, типа MS Sans Serif. Это плохо тем, что в нём нет многих полезных символов, что мешает локализовывать программу. Предлагается использовать Arial Latin или Tahoma Latin, 8, normal, а ещё лучше - дать пользователю возможность самому выбирать шрифт.
Где-то ещё Clo писал о шрифте MS Shell Dlg, который хорош тем, что сам по себе является "виртуальным", ненастоящим шрифтом, а настраивается через глобальные системные настройки; в результате у пользователя все программы выглядят одинаково (если они, конечно, используют этот шрифт).
Где-то ещё Clo писал о шрифте MS Shell Dlg, который хорош тем, что сам по себе является "виртуальным", ненастоящим шрифтом, а настраивается через глобальные системные настройки; в результате у пользователя все программы выглядят одинаково (если они, конечно, используют этот шрифт).
Почему же, ё-моё, ты нигде не пишешь "ё"?
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
- CaptainFlint
- Сообщения: 6239
- Зарегистрирован: Вт дек 14, 2004 22:34
- Контактная информация:
Не совсем понял вопрос. К какой части интерфейса относится фраза "как же организовать выбор шрифта"? К собственно диалогу выбора? К кнопочкам для вызова этого диалога? К отображаемому рядом с кнопочкой примеру текста в выбранном шрифта?..
Если первое, то есть стандартная WinAPI-функция ChooseFont для вызова этого самого диалога, а в зависимости от среды программирования есть и разнообразные обёртки для этой функции.
Если первое, то есть стандартная WinAPI-функция ChooseFont для вызова этого самого диалога, а в зависимости от среды программирования есть и разнообразные обёртки для этой функции.
Почему же, ё-моё, ты нигде не пишешь "ё"?
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
Я имел в виду совсем другое. Как разом для всех компонентов формы поменять этот самый шрифт. Но уже справился.Но небольшая проблема всё равно осталась. Панели, ГроупБоксы, СкроллБары, может ещё что-то не перерисовываются. Что делать?
Код: Выделить всё
fdFont->Font=fmMain->Font;
if(fdFont->Execute())
{
fmMain->Font=fdFont->Font;
fmMain->Repaint();
}
- Maximus
- Сообщения: 927
- Зарегистрирован: Чт апр 07, 2005 10:51
- Откуда: Украина, Кировоградская обл., г. Знаменка
- Контактная информация:
Решил проблему так:Подразумевается, что у всех компонентов ParentFont==true.
fdFont - это FontDialog; fmMain - это форма.
Возможно кроме TMenuItem в условии придется добавить еще какие-то классы, если они используются и при вызове для них Repaint() вываливается ошибка.
Код: Выделить всё
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();
}
}fdFont - это FontDialog; fmMain - это форма.
Возможно кроме TMenuItem в условии придется добавить еще какие-то классы, если они используются и при вызове для них Repaint() вываливается ошибка.