:: Главная :: Решения :: Статьи :: Проект "Русский help" :: Файловый архив :: Фотоальбом :: Ссылки ::
   Л и с о в о д ы   в с е х   с т р а н,  о б ъ е д и н я й т е с ь !!!  


Форумы  :: FAQ FoxPro

Как переключиться на нужную раскладку клавиатуры
Дата: 13.03.05 17:16:26 ОтветитьЦитировать

Вопрос
Как мне переключиться на нужную (Русскую, Английскую, Немецкую и т.п.) раскладку клавиатуры, на нужный язык?

Ответ
Прежде всего, следует серьезно обдумать необходимость такого шага. Автоматическое изменение настроек пользователя - эта та операция, которую по возможности следует избегать.

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

#DEFINE KEYBOARD_GERMAN_ST 0x0407 && Немецкий (Стандарт)
#DEFINE KEYBOARD_ENGLISH_US 0x0409 && Английский (Соединенные Штаты)
#DEFINE KEYBOARD_FRENCH_ST 0x040c && Французский (Стандарт)
#DEFINE KEYBOARD_RUSSIAN 0x0419 && Русский
* Выбираем раскладку, которая нам нужна
LOCAL lnNeedKeyboard
lnNeedKeyboard = KEYBOARD_RUSSIAN
* Читаем текущую раскладку клавиатуры
DECLARE INTEGER GetKeyboardLayout IN Win32API Integer
LOCAL lnCurrentKeyboard
lnCurrentKeyboard = GetKeyboardLayout(0)
* Считываем младшее слово (младшие 16 бит из 32)
lnCurrentKeyboard = BitRShift(m.lnCurrentKeyboard,16)
* Если текущая раскладка отлична от нужной
IF m.lnCurrentKeyboard <> m.lnNeedKeyboard
* Сначала пытаемся просто активизировать нужную раскладку
DECLARE INTEGER ActivateKeyboardLayout IN Win32API Integer, Integer
LOCAL lnNewKeyboard
lnNewKeyboard = ActivateKeyboardLayout(m.lnNeedKeyboard,0)
IF m.lnNewKeyboard=0
* Нужной раскладки клавиатуры не введено в списке альтернативных раскладок
* Добавляем нужную раскладку
DECLARE INTEGER LoadKeyboardLayout IN Win32API String, Integer
* Код нужной раскладки надо трансформировать в строку вида "00000419"
* Т.е. строка из 8 символов, где первые 4 - это нули, а последние 4 код в 16-ричной системе
LOCAL lcNeedKeyboard
lcNeedKeyboard = RIGHT(TRANSFORM(m.lnNeedKeyboard,"@0"),8)
* Собственно загрузка
m.lnNewKeyboard = LoadKeyboardLayout(m.lcNeedKeyboard,1)
* Считываем младшее слово (младшие 16 бит из 32)
m.lnNewKeyboard = BitRShift(m.lnNewKeyboard,16)
IF m.lnNewKeyboard <> m.lnNeedKeyboard
* Загрузить нужную раскладку не удалось
ENDIF
ENDIF
ENDIF

В данном коде были использованы 3 API-функции

GetKeyboardLayout - считывает текущую раскладку клавиатуры
ActivateKeyboardLayout - активизирует выбранную раскладку, если она была загружена
LoadKeyboardLayout - загружает выбранную раскладку, даже если ее первоначально не было

Более подробную информацию об этих функциях и значения нужных кодов соответствующих языков читайте в MSDN-library на сайте Microsoft.

msdn.microsoft.com

Просто введите имя функции в специальное окно поиска на главной странице и нажмите клавишу "Enter"


Посмотрите вопросы

Как заставить клавишу с "точкой" всегда вводить точку


------------------




Исправлено 2 раз(а). Последнее : Владимир Максимов, 17.05.06 10:51
Ratings: 0 negative/0 positive


Тема Просмотров Написано Написано
  Все остальное, что не вошло в предыдущие разделы 5976 Владимир Максимов 01.03.05 21:44
  Что нового в новой версии Visual FoxPro 5317 Владимир Максимов 07.03.05 09:14
  Как переключиться на нужную раскладку клавиатуры 11146 Владимир Максимов 13.03.05 17:16
  Что означает префикс (буква) "m." перед именем 10603 Владимир Максимов 31.03.05 09:35
  Посоветуйте книгу или ресурс на русском языке для начинающих изучать FoxPro 14765 Владимир Максимов 26.04.05 22:17


Извините, но у вас нет прав для того, чтобы оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2006 Fox Club 
Яндекс.Метрика