C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Отображение строк Unicode
igork
Отправлено: 03.02.2005, 22:54


Не зарегистрирован







Пожалуйста, подскажите как корректно отобразить строку Unicode (wchar_t*) содержащюю символы из многих языков
Konstantine
Отправлено: 03.02.2005, 23:16


Мастер участка

Группа: Модератор
Сообщений: 545



что значит "отобразить"? если в ShowMessage, то:
CODE
wchar_t *uni_str;  // Ваша строка
AnsiString str(uni_str);    // Переводим в AnsiString
ShowMessage(str);         // Выводим

корректность всех символов многих языков не гарантирую... т.к. на 1 символ отводится 1 байт — это 256 разных комбинаций... при этом некоторые из них зарезервированы и т.д..., но русский и английский работает нормально smile.gif
igork
Отправлено: 04.02.2005, 01:02


Не зарегистрирован







В том-то и дело, что корректно отображаются только русские и английские символы (русские из-за локализации, а английские по определению),
а вот все остальные при преобразовании в AnsiString заменяются (по умолчанию на символ '?').
В принципе, мне уже удалось правильно вывести все символы на Canvas с помощью функции

BOOL TextOut(
HDC hdc, // handle of device context
int nXStart, // x-coordinate of starting position
int nYStart, // y-coordinate of starting position
LPCTSTR lpString, // address of string
int cbString // number of characters in string
);

поскольку здесь нет преобразования в AnsiString.
Причем для отображения подходит далеко не каждый шрифт (я подобрал "Lucida Sans Unicode", хотя он не соблюдает необходимую мне моноширинность)
Но мне было бы удобнее, если бы получилось вывести, например, в RichEdit или какой-либо другой подобный компонент, поскольку на Canvas придется все прописывать руками (прокрутку, resize, движение курсора по тексту и т.д.)

Вернуться в Вопросы программирования в C++Builder