SendKeys и русские символы

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

SendKeys и русские символы

Сообщение Sun07 » 22.09.2006 (Пт) 22:30

Мне надо принять на процедуре KeyPress русские символы от SendKeys "строка", но приходит почему-то Ascii=&H3F. Как сделать правильно?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 22.09.2006 (Пт) 22:39

Ну вопервых:
Не "процедура KeyPress", а "обработчик события KeyPress"

А во вторых:
Код: Выделить всё
SendKeys StrConv("строка", vbvbFromUnicode)
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 26.09.2006 (Вт) 18:26

странно, но после этой конвертации строка из 19 символов превращается в строку девяти символов "?" :(

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 26.09.2006 (Вт) 20:28

и
Код: Выделить всё
SendKeys StrConv("строка", vbFromUnicode, &H419) ' Russia

не помогает. Может, функции SendKeys можно скормить байтовый массив ASCII кодов или как-то сразу сделать ASCII строку из байтового массива ASCII кодов?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 26.09.2006 (Вт) 21:08

Может я чего то не понимаю?

Но помойму всё работает.
Вложения
for_Sun07_2.rar
(559 байт) Скачиваний: 64
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 26.09.2006 (Вт) 22:50

спасибо. Дело в том, что я использовал Chr вместо ChrW. Чем отличается Chr(Asc("Я")) от ChrW(Asc("Я"))? И почему на обработчике KeyPress передаётся Ascii типа Integer, а не Byte?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.09.2006 (Вт) 23:03

потому что у китайцев буквы в байт не влазят

Chr(Asc("Я")) = "Я", ChrW(Asc("Я")) = "ß"
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 26.09.2006 (Вт) 23:36

ну Chr преобразует в юникод и ChrW в юникод. Почему они преобразуют по разному и почему у меня не работает StrConv? Я читал, что её работа зависит от региональных установок, где у меня стоит язык Русский

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.09.2006 (Вт) 23:37

Chr к юникоду не имеет никакого отношения.
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 27.09.2006 (Ср) 0:09

tyomitch писал(а):Chr к юникоду не имеет никакого отношения.

но ведь когда мы пишем str1=chr("Ф") мы получаем строку в юникоде

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 27.09.2006 (Ср) 0:29

Чтобы раз и навсегда доказать тебе то, что функция Chr возвращеет символ из ANSI таблицы, я порекоммендую тебе попробовать её прогнать с кодом 270 например.

Ещё раз: Chr возвращает ANSI символ. и то что ВБ работает с юникодовскими строками здесь не причём.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 27.09.2006 (Ср) 1:09

Если Chr возвращает ANSI, тогда что присваивается строковой переменной в виде юникода, старший байт приравнивается нулю или как?

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 27.09.2006 (Ср) 1:13

Если Chr возвращает ANSI, тогда что присваивается строковой переменной в виде юникода, старший байт приравнивается нулю или как?
Код: Выделить всё
a$ = Chr(255)
MsgBox LenB(a$)


ВОПРОС ОТКРЫТ
Последний раз редактировалось Sun07 27.09.2006 (Ср) 18:27, всего редактировалось 1 раз.

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

Сообщение alibek » 27.09.2006 (Ср) 8:06

ChrW(AscW(...))
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 27.09.2006 (Ср) 9:59

Чтобы раз и навсегда доказать тебе то, что функция Chr возвращеет символ из ANSI таблицы
А не ASCII? Тем более, что обратная функция называется Asc.
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2006 (Ср) 11:04

Нет, не ASCII.
Изображение

Sun07
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 355
Зарегистрирован: 17.02.2006 (Пт) 21:27

Сообщение Sun07 » 27.09.2006 (Ср) 13:21

a Ascii и ANSI это не одно и то же? Насколько я знаю, Ascii - таблица 256 символов, а ANSI - ?

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Сообщение Nicky » 27.09.2006 (Ср) 14:18

Sun07 писал(а):a Ascii и ANSI это не одно и то же? Насколько я знаю, Ascii - таблица 256 символов, а ANSI - ?

http://www.firststeps.ru/mfc/msdn/r.php?155

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 27.09.2006 (Ср) 17:20

Начать с того, что ASCII -- это одна таблица, а ANSI -- целое семейство.
Изображение


Вернуться в Visual Basic 1–6

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

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

    TopList