Используя свойство Text RichTextBox в WinForms, вы можете показать букву с акцентом над ним, таким образом, чтобы буква была одним символом, а акцент - другим. Т.е. также визуально это выглядит как один персонаж, на самом деле оно состоит из двух. В терминах Unicode буква называется «базовым символом», а акцент - «сочетанием диакритического знака».
Я попытался показать обычную черную букву с акцентом другого цвета над ней (скажем, красным). Вот код в VB:
'Box is the name of a RichTextBox
'Set the Text property to the letter 'a' + a line above it (called a 'macron')
Box.Text = a & ChrW(&H304)
'Select the macron, which is the second character (0 based)
Box.Select(1,1)
'change its color:
Box.SelectionColor = Color.Red
Код выше не работает. Цвет макрона не меняется.
С другой стороны, при попытке выбрать только букву «а» и изменить ее цвет, цвет макрона также изменяется:
Box.Select(0,1)
'change the letter color:
Box.SelectionColor = Color.Red
Так что у меня не могло быть буквы одного цвета и ее акцента с другим.
Я добавлю, что я говорящий на иврите, и при использовании версии Microsoft Word на иврите можно легко изменить цвет меток букв на иврите (называемых «Некуд») через меню Word, т.е. придать им другой цвет из букв.
Если сейчас нет, как добиться этого поведения с помощью чистого кода .Net,
и, возможно, знаю, как получить его через вызовы API Win, я благодарен за любые объяснения, поскольку я не знаком с этой областью.
EDIT:
На самом деле я нашел странный способ, которому я не могу доверять, чтобы добиться этого частично. Я не упоминал об этом, потому что это похоже на «положительную ошибку» элемента управления RichTextBox. Поскольку элемент управления не предназначен для такой работы заранее, я не могу предсказать последствия такого использования с точки зрения стабильности и совместимости в системе конечного пользователя.
Вот оно:
'give the control a font I have decalred. It doesn't matter which font
'(as long as it supports the characters in use)
Box.Font = Lucida
'Add text
Box.Text = a & ChrW(&H304)
'Select the macron, which is the second character (0 based)
Box.Select(1,1)
'Here is the line that makes the difference:
Box.SelectionFont = Lucida
'*********************************************
'change its color:
Box.SelectionColor = Color.Red
Как видно, я выделил выделению (макрону) шрифт
что это уже есть, так что эта строка не должна иметь никакого влияния. Однако сейчас
следующая строка меняет цвет макрона, оставляя букву черного цвета. Как ни странно, это работает в нескольких размерах шрифта (14,16,26 и более) и не работает на других (12,18,24 и более). Если у вас есть какие-либо идеи по этому поводу, я буду рад услышать.