Владимир |
Отправлено: 18.12.2006, 11:08 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Здравствуйте.
Имеется файлик определенного формата с наименованиями товаров, а в нем некоторые буквы из румынского алфавита. Имеется соответсвие кодов и букв. Если такая буква встречается, то хочется вывести именно румынскую букву в ComboBox и StringGrid. А как?
Код такой:
CODE |
// Item[MaxItem].item — массив char-ов
AnsiString tmp = "";
// Здесь считывается hex последовательность 20 00 44 41 4C 45 4D 52 41 4D
for( int j = 9; j >= 0; j-- )
{
FileRead( file, &(Item[MaxItem].item[j]), 1 );
}
tmp.printf( "%10s", Item[MaxItem].item );
for( int j = 1; j <= 10; j++ )
{
if( tmp[j] == 0 ) tmp[j] = 'A'; // А с уголком вниз
if( tmp[j] == 1 ) tmp[j] = 'I'; // I c уголком вверх
if( tmp[j] == 2 ) tmp[j] = 'T'; // Т и внизу запятая
if( tmp[j] == 3 ) tmp[j] = 'A'; // А с уголком вниз
if( tmp[j] == 4 ) tmp[j] = 'S'; // S и внизу запятая
}
ComboBox->Items->Add(tmp);
|
Отредактировано Владимир — 18.12.2006, 11:21 |
|
AVC |
Отправлено: 18.12.2006, 11:20 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
При использовании AnsiString так не получится. Либо все англорусское, либо англорумынское а частично — никак.
Надо использовать компоненты поддерживающие уникод. Либо можно поробовать перехватывать низкоуровневый вывод (румынскими они становятся только при прорисовке). |
|
Владимир |
Отправлено: 18.12.2006, 11:23 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
А мне русские буквы и не нужны, нужны только англорумынские. |
|
Владимир |
Отправлено: 18.12.2006, 11:31 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
QUOTE (AVC @ 18.12.2006, 11:20) | При использовании AnsiString так не получится. Либо все англорусское, либо англорумынское а частично — никак.
Надо использовать компоненты поддерживающие уникод. |
Если не AnsiString, то что можно использовать ?
И какие компоненты из стандартного набора Builder 6 используют Unicode ? |
|
AVC |
Отправлено: 18.12.2006, 11:42 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Попробуйте поставить соответствующий charset у компонентов. VCL, в основном, не поддерживает многоязыковость. |
|
Владимир |
Отправлено: 18.12.2006, 11:52 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Вместо простого ComboBox поставил ComboBoxEx (у него текст типа WideString) и учтановил шрифт Times New Roman и EASTEUROPE_CHARSET.
В результате, к примеру, вместо буквы Т с хвостиком выводится только буква Т. А где же хвостик ? |
|
AVC |
Отправлено: 18.12.2006, 12:02 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
>А где же хвостик ?
А кто его знает Не пользуюсь этим компонентом.
Вот малость поигрался с базовыми компонентами (на GREEK_CHARSET)
StringGrid — показывает нормально
ComboBox — текущее значение — правильно, а вот сам список выбора в текущей (для системы) кодировке. Видимо "забыто" наследование шрифта. |
|
Владимир |
Отправлено: 18.12.2006, 12:27 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Вводить текст на румынском можно, а запихнуть его туда программно не получается — записываются буквы английского алфавита. |
|
Владимир |
Отправлено: 18.12.2006, 12:36 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 6
|
Что же я не так сделал ?
Шрифт у StringGrid и ComboBox — Arial и EASTEUROPE_CHARSET
Должно получаться, к примеру "PEŞTE", а получается "PESTE"
Кстати, эти 2 слова имеют разное значение.
CODE |
WideString tmp2 = tmp;
for( int j = 1; j <= 10; j++ )
{
if( tmp2[j] == 0 )
tmp2[j] = 0x0102; // А с уголком вниз
if( tmp2[j] == 1 )
tmp2[j] = 0x00CE; // I c уголком вверх
if( tmp2[j] == 2 )
tmp2[j] = 0x162; // Т и внизу запятая
if( tmp2[j] == 3 )
tmp2[j] = 0x00C2; // А с уголком вверх
if( tmp2[j] == 4 )
tmp2[j] = 0x015E; // S и внизу запятая
}
if( !found )
{
memcpy( Product[MaxProduct], Item[MaxItem].item, 10 );
ComboBox->Items->Add(tmp2);
//ComboBox->Items->Add(Product[MaxProduct]);
MaxProduct++;
}
StringGrid->Cells[0][MaxItem] = StrToInt(MaxItem+1);
StringGrid->Cells[1][MaxItem] = tmp2;
|
Отредактировано Владимир — 18.12.2006, 12:39 |
|
Asher |
Отправлено: 18.12.2006, 20:22 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Привет.
Попробуйте вначале поставить что-то вроде
setlocale(LC_CTYPE, "rus_Russia.1251");
только страну и кодировку указать для Румынии.
|
|