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


Форумы  :: FAQ FoxPro

Как переключиться на нужную раскладку клавиатуры
Дата: 13.03.05 16: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"


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

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


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




Исправлено: Владимир Максимов, 17.05.06 09:51
Ratings: 0 negative/0 positive


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


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

On-line: 45 and Guests: 45


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