Переключения языка ввода

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
WPAP
Новичок
Сообщения: 12
Зарегистрирован: 25 Март 2008, 0:04

Переключения языка ввода

Сообщение WPAP »

Подскажите, как из программы переключать язык ввода! Я запутался с API функциями.
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Переключения языка ввода

Сообщение WadimZapara »

пример:

Код: Выделить всё

TEST   PROGRAM
  MAP
   MODULE('Windows API')
LoadKeyboardLayoutA     Function(*CString,UNSIGNED),Unsigned,PASCAL,RAW,DLL
ActivateKeyboardLayout  Function(Unsigned,UNSIGNED),Unsigned,PASCAL,RAW,PROC,DLL
   END
RusLat      PROCEDURE (<BYTE Lat1>)
  END
cstr  CSTRING(101)
WIN WINDOW(,,100,100)
         TEXT,AT(1,1,50,50),VSCROLL,Use(cstr)
    END
  Code
  OPEN(WIN)
  ACCEPT
    CASE EVENT()
    OF EVENT:OpenWindow
        RusLat(0)
    END !CASE
  END !END ACCEPT
  CLOSE(WIN)
  Message(CSTR, 'Значение переменной поля TEXT', ICON:Asterisk)


!=========================================================
RusLat               PROCEDURE(<Byte Lat_1>)
! НАЗНАЧЕНИЕ: Программное переключение клавиатуры на русский / латинский
! Параметр Lat_1: 1 - переключить на латынь,
!                 0 - переключить на русский.
! При вызове без параметра: двоичный переключатель - русский / латинский.
! Если вызывается в приложении впервые и без параметра - переключает на русский.
! СУЩЕСТВЕННОЕ ЗАМЕЧАНИЕ:                            
! Вызывать процедуру нужно внутри цикла ACCEPT, иначе функциональность нарушается.
!!!!!!!!!!!!!!!!!! ДЛЯ ПЕРЕКЛЮЧЕНИЯ КЛАВЫ !!!!!!!!!!!!!!!!!
KB_ACTIVATE            EQUATE(00000001h)
_lat                    Unsigned, Static
_rus                    Unsigned, Static

_rlBuff                 &CString

RusLat                  Byte, Static !0=Lat
xrl                     UnSigned, Auto
  CODE
  If ~ _rus Then
     _rlBuff &= New(CString(50))  ! создать место под переменную
     _rlBuff = '00000409';        _lat = LoadKeyboardLayoutA(_rlBuff, KB_ACTIVATE)
     _rlBuff = '00000419';        _rus = LoadKeyboardLayoutA(_rlBuff, KB_ACTIVATE)
     Dispose(_rlBuff)             ! освободить пространство
  End
  If ~ Omitted(1) Then RusLat = Lat_1.
  xrl = Choose(RusLat, _lat, _rus)
  ActivateKeyboardLayout(xrl, KB_ACTIVATE)
  RusLat = BXOR(RusLat, 1)
!=========================================================
Компьютер имеет то преимущество перед мозгом, что им пользуются...
Ответить