Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 432 - Не вводятся русские символы в 1с8   Make a simular bug
Summary: Не вводятся русские символы в 1с8
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Обработка текста и локали; Буфер (show other bugs)
Version: 1.0.5
Hardware: PC Linux
: P5 major
Target Milestone: ---
Assignee: Константин Кондратюк
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 437 287 855 7435 7489
  Show dependency treegraph
 
In work:
Reported: 2006-12-27 13:44 MSK by Константин Кондратюк
Modified: 2011-09-08 13:51 MSK (History)
2 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments
Текстовый файл, созданный в 1с8 (98 bytes, text/plain)
2010-11-18 03:58 MSK, Константин Кондратюк
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Константин Кондратюк 2006-12-27 13:44:57 MSK
В текстовых документах русские буквы при вводе отображаются неправильно.

В текстовом файле - русский алфавит, набранный в 1с8 (Аа Бб Вв ... Яя)
Comment 1 Константин Кондратюк 2006-12-27 13:47:10 MSK
В 1с 8.1 проблема та же
Comment 2 Анатолий Лютин 2006-12-27 23:05:12 MSK
Разберусь.
Comment 3 Константин Кондратюк 2007-01-11 20:55:10 MSK
С перекодировкой в ср1251 всё нормально.
Comment 4 Vitaly Lipatov 2007-01-11 22:45:27 MSK
Н-да... Кость, ну надо писать примерно так:
Это связано с тем, что 1C 8.0 определяет на какой платформе запущена и в дальнейшем использует функции
DispatchMessageA, GetMessageA и пр. A для не-NT платформы,
и соотв. функции W (юникодные) для NT-платформ.
В какой-то момент введённый с клавиатуры юникодный символ (например 0x442) преобразуется отсечением старших байт в однобайтовый (0x42), без перекодирования. Возможно это связано с тем, что где-то программа ожидает 8-мибитный символ, а получает WCHAR. Он ей не нравится и она использует его как char...
Comment 5 Vitaly Lipatov 2007-01-11 22:47:48 MSK
Да, забыл сказать - есть такая программа FileWorkShopRU.exe (по сути это просмотрщик файлов 1С 7.7/8.0), в которой проявляются все глюки с платформой 1С.
Она находится в бутылке 1cfile, на ней можно отлаживать задержку в меню, калькулятор, редактирование... И не нужно мучаться от разных защит. Кстати, программа "распространяется свободно".
Comment 6 Vitaly Lipatov 2007-01-20 19:28:15 MSK
Над темой кодировок работает Толя.
Comment 7 Vitaly Lipatov 2007-01-25 17:51:57 MSK
Не забыть дописать в комментарии что функция SetLong*W ведёт себя как SetLong*A в опред. случаях.
Comment 8 Константин Кондратюк 2007-01-25 17:59:36 MSK
Проблема ввода для 1с8 решена. Патч приложен.

Дело в том, что при версии win98 в вайне создаётся неюникодное окно, а обработчик на него вешается юникодный (похоже, это только у 1с проявляется).
Нужно написать тест для этого случая перед отправкой патча.
Comment 9 Константин Кондратюк 2007-01-29 12:11:24 MSK
Тест показал, что windows позволяет программе менять статус окна на юникодный, вешая на него другой обработчик. В этом wine и windows идентичны. Неправильно отключать возможность присвоения юникодного обработчика неюникодному окну в вайне. 
Проблема с обрезанием байта кода символа где-то в дальнейшем вызове функций. Расширяем тест для диагностики этой ошибки...
Патч, исправляющий ввод в 1с8 пока оставляем, но его нужно заменить на более правильный вариант.
Comment 10 Константин Кондратюк 2007-01-31 18:55:24 MSK
Варианта проблемы два:

1. Окно делается юникодным, когда ему присваивают юникодный обработчик. После этого по каким-то причинам, wine всё равно работает с ним как с неюникодным. В этом случае нужно разобраться, где происходит подмена функций.

2. Окно в win98 должно быть неюникодным. В результате какой-то ошибки на него вешается юникодный обработчик. Тогда нужно понять, почему вызывается SetLongWindowW в режиме win98.

Наиболее вероятным видится второй вариант.
Comment 11 Константин Кондратюк 2007-02-14 19:30:16 MSK
Патч исключаю из сборки, т.к. он портит работу других функций (проблема с отображением полей при клике стрелочками updown, например).

Ищем другой способ решения.
Comment 12 Константин Кондратюк 2007-02-27 20:50:37 MSK
Хак, обрабатывающий установку обработчика для окна класса "V8Window", прикладываю к сборке 1.0.6.
Нужно потестировать на стабильность ввода в другие окна (скорее всего только 1с8, т.к. класс с именем V8Window встретишь не часто)
Comment 13 Vitaly Lipatov 2007-02-28 16:05:03 MSK
Исправлено для 1.0.6