VS2008 - Диалог шрифтов VB.net - Фильтровать шрифты по кодовой странице / языку - PullRequest
2 голосов
/ 11 октября 2010

Обновление (в ответ на первый ответ от Ханса Пассанта): Я полагаю, я недостаточно хорошо объяснил свой вариант использования.Это приложение будет предназначено для людей, чтобы вводить данные на «главном» языке (скорее всего, английском, но не обязательно), а затем облегчать ввод переводов на другом языке.Все это делается с помощью интерфейса текстового поля.

Таким образом, любой шрифт, который они хотят использовать для ввода переводов, ДОЛЖЕН быть шрифтом, который поддерживает скрипт языка, на который они переводят.

Если я знаю «целевой язык», было бы неплохо перечислить только те шрифты, которые поддерживают ввод текста на этом языке.

===========================================================================

Я работаю над приложением VB.net с серверной частью SQL Server.Мы собираемся поддерживать записи Rich-Text (принятые от пользователя) на нескольких языках, включая те, которые не включены в Western Script (например, китайский, японский, арабский и т. Д.)

У нас есть диалог, из которогопользователь может выбрать языки, которые он хочет использовать.Для каждого языка пользователь должен указать подходящий (по умолчанию) шрифт для ввода любого текста на этом языке в полях с расширенным текстом в приложении.

Пример: пользователь хочет ввести текст на китайском языке, поэтомувыбирает "китайский" в качестве языка для использования в нашем приложении.Пользователь должен указать шрифт для ввода китайских символов;поэтому мы отображаем Windows.Forms.FontDialog.

В этом диалоге выбора шрифта я хотел бы иметь возможность фильтровать список доступных шрифтов на основе кодовой страницы (сценария) языка, который они выбрали.

например, шрифт "Brush Script MT" поддерживает только западные символы - НЕ китайский - поэтому, если пользователь выбирает шрифт для ввода китайского текста, шрифт "Brush Script MT" НЕ должен появляться в списке.

У кого-нибудь есть идеи, как этого добиться?Я начал с использования System.Text.Encoding для получения номера кодовой страницы Windows, используемой локальной системой - я иду по правильному пути?

Спасибо за любую помощь!

Мэтт

1 Ответ

0 голосов
/ 25 июля 2014

Сначала вы вызываете EnumFontFamiliesEx()

В функции обратного вызова вы получаете структуру NEWTEXTMETRICEX, которая описывает свойства шрифта.

Структура содержит встроенную структуру с именем "* 1007".* "У которого есть поле" tmCharSet ".

Некоторые примеры значений:

128 = SHIFTJIS
129 = HANGUL
130 = JOHAB
134 = GB2312
136 = CHINESEBIG5

Таким образом, шрифт сообщает, что он поддерживает, например, кодировку BIG5.

Кроме того, структура имеет другую встроенную структуру "ntmFontSig", которая содержит поле "fsUsb" с битовым полем 128-битного поднабора Unicode, идентифицирующим до 126 поддиапазонов Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...