Unicode и RichTextBox

Программирование на Visual Basic for Applications
kuksha
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.07.2006 (Пн) 11:27

Unicode и RichTextBox

Сообщение kuksha » 31.12.2010 (Пт) 0:19

Здравствуйте.
Нужно вставить символ под известным номером (например 1122, русская буква "ять") в элемент RichTextBox в диалоговом окне.
Обычный код не срабатывает:
Код: Выделить всё
RichTextBox.Text = ChrW(1122)

Вместо "яти" появляется знак вопроса.
Причём, если это обычный TextBox, то нужный символ вставляется как надо (но мне же раскрасить текст надо, а кроме RichTextBox ничего не знаю...)

Нашёл что-то про юникод:
Код: Выделить всё
RichTextBox.Text = StrConv(ChrW(1122), vbFromUnicode)

но в итоге в окошко ничего не вставляется - пусто.

Что делать?

ЗЫ: Кстати, если в этом окне набрать Alt+1122, то ять печатается как надо, то есть в принципе контрол RichTextBox понимает коды юникода, вот только послать их программно не выходит...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Unicode и RichTextBox

Сообщение alibek » 31.12.2010 (Пт) 9:38

Во-первых, не .Text, а .SelText.
Во-вторых, если не сработает, попробуй .SelRTF="\u1122?"
Lasciate ogni speranza, voi ch'entrate.

Кукша
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 04.10.2005 (Вт) 11:40

Re: Unicode и RichTextBox

Сообщение Кукша » 31.12.2010 (Пт) 10:17

alibek писал(а):Во-первых, не .Text, а .SelText.

Заменил. Не работает.

alibek писал(а):Во-вторых, если не сработает, попробуй .SelRTF="\u1122?"

Попробовал, выдаёт \u1122? вместо яти.

alibek, можешь привести полный код, при котором удалось получить ять?

Кукша
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 04.10.2005 (Вт) 11:40

Re: Unicode и RichTextBox

Сообщение Кукша » 31.12.2010 (Пт) 12:23

Вот любопытная вещь - это от кода символа зависит.
Например, буква "щ" выводится нормально:
Код: Выделить всё
RichTextBox.Text = ChrW(1097)

А вот яти, ижицы и прочие нестандартные буквы кириллицы отказываются выводиться таким способом - печатаются знаки вопроса. (повторюсь - с клавы напрямую они ввводятся, так что шрифты и кодовые страницы наверное не при чём)

Замена .Text на .SelText, .SelRTF и .TextRTF ничего не меняет.

Кстати, чем можно заменить ChrW? Может это она глючит? Как напрямую код двухбайтного символа послать? Пробовал конструкцию "{\'40}", но она видимо только однобайтная...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Unicode и RichTextBox

Сообщение alibek » 31.12.2010 (Пт) 13:48

Кукша писал(а):Как напрямую код двухбайтного символа послать? Пробовал конструкцию "{\'40}", но она видимо только однобайтная...

Можно. Только для юникода нужно использовать не \', а \u. И группу (фигурные скобки) задавать не обязательно.

ChrW ничем не заменишь. Да и не нужно менять, она не глючит.
Скорее глючит RTB, попробуй с ним работать через его API.
Lasciate ogni speranza, voi ch'entrate.

Кукша
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 04.10.2005 (Вт) 11:40

Re: Unicode и RichTextBox

Сообщение Кукша » 31.12.2010 (Пт) 14:08

Попробовал так:
Код: Выделить всё
RichTextBox.SelRTF = "{\u1122}"

Получил ять в ричтекстбоксе! Но сразу после неё написано {\u1122}
Попробовал убрать фигурные скобки - ять исчезла, осталась только надпись \u1122
Можно конечно попробовать после встаки убирать этот мусор, но это как-то неправильно... Может есть какие-то способы форматирования этого вывода? Кстати, этот мусор наблюдается не только при выводе экзотических букв - на всех буквах так.

Если бы я знал как с ним через API работать... :(

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Unicode и RichTextBox

Сообщение alibek » 31.12.2010 (Пт) 17:09

Попробуй пробел добавить, "\u1122 ".
Lasciate ogni speranza, voi ch'entrate.

kuksha
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.07.2006 (Пн) 11:27

Re: Unicode и RichTextBox

Сообщение kuksha » 31.12.2010 (Пт) 19:40

alibek писал(а):Попробуй пробел добавить, "\u1122 ".

Попробовал - выдало именно то что и написано внутри кавычек: "\u1122 ", яти нет.
alibek, извини, но не мог бы ты попробовать у себя?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Unicode и RichTextBox

Сообщение alibek » 31.12.2010 (Пт) 22:44

У меня такой код работает:
Код: Выделить всё
RichTextBox1.SelRTF = "{\u1122}"
Lasciate ogni speranza, voi ch'entrate.

kuksha
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.07.2006 (Пн) 11:27

Re: Unicode и RichTextBox

Сообщение kuksha » 02.01.2011 (Вс) 10:24

Гм, странно, у меня точно такая же строка выдаёт ять с мусором в придачу.
Может от версий зависит?
WinXP sp3 32-bit, Word 2003. Где версию RichEdit посмотреть - не знаю... Но появляется в панели контролов после включения Microsoft Rich Textbox Control 6.0

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Unicode и RichTextBox

Сообщение alibek » 02.01.2011 (Вс) 23:48

SP6 установлен?
Lasciate ogni speranza, voi ch'entrate.

kuksha
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.07.2006 (Пн) 11:27

Re: Unicode и RichTextBox

Сообщение kuksha » 03.01.2011 (Пн) 12:40

alibek писал(а):SP6 установлен?

Эмм... SP6 - это вроде для VB? А у меня VBA - это же VBA-форум...
Если эту примочку нужно будет и пользователям ставить, то печально.
Может изменения SP6 учтены в более старших версиях MS Office, чем 2003 SP1, который у меня?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Unicode и RichTextBox

Сообщение Денис » 11.01.2011 (Вт) 16:14

kuksha писал(а):Но появляется в панели контролов после включения Microsoft Rich Textbox Control 6.0

Вот эту примочку все равно придется всем пользователям ставить, так что разницы особой нет. Попробуй поискать обновления на сам компонент RichTexbox. Хотя вряд ли что-то внятное удастся найти.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

Кукша
Начинающий
Начинающий
 
Сообщения: 24
Зарегистрирован: 04.10.2005 (Вт) 11:40

Re: Unicode и RichTextBox

Сообщение Кукша » 13.01.2011 (Чт) 11:53

Действительно, сейчас приходится всем ставить Richtx32.ocx. Но, ведь файлы ocx - всего лишь оболочки для стандартных библиотек dll !

Мне тут сказали, что с RichTextBox можно через API работать. Никогда не пробовал в VBA c API работать и не знаю с чем это едят.
Поэтому вопрос: при этом способе ocx-посредник уже вроде как не нужен???

(тогда и ocx таскать за собой не надо, и с ятью наверняка всё проще...)

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Unicode и RichTextBox

Сообщение Денис » 13.01.2011 (Чт) 14:52

Кукша писал(а):Поэтому вопрос: при этом способе ocx-посредник уже вроде как не нужен???

Не нужен.
Если хочешь более подробно изучить сей вопрос, посмотри здесь поиском топики Артура про работу с уникодом.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

kuksha
Начинающий
Начинающий
 
Сообщения: 23
Зарегистрирован: 17.07.2006 (Пн) 11:27

Re: Unicode и RichTextBox

Сообщение kuksha » 13.01.2011 (Чт) 21:04

Посмотрел... ничего похожего на мои потребности, а может просто просмотрел...

Подскажите пожалуйста, - как в VBA с RichTextBox через API работать?
Для примера нужен самый простой код, без лишних наворотов, создающий RichTextBox с определёнными координатами и размерами + пример ввода в него чего-то юникодного.
Просто я никогда с этим не работал, не знаю даже с какого конца к этому подойти. В Сети пробовал смотреть - глухо... Знаю только что dll-функции как-то объявлять надо...
А дальше описание всех функций API для RichTextBox потребуется - где бы их посмотреть?


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList