Переключение раскладки клавиатуры в GUI OpenEdge

Практически в каждом Windows-приложении используется winAPI. Но, используя современные версии OpenEdge это использование можно свести к минимуму.

К примеру, нам нужно переключить раскладку клавиатуры на каком-либо поле. Для этого надо объявить две внешние процедуры и позвать их с определенными значениями — 00000409 / 00000419.

PROCEDURE LoadKeyboardLayoutA EXTERNAL "user32" :
  DEFINE INPUT  PARAMETER P1 AS CHAR.
  DEFINE INPUT  PARAMETER P2 AS LONG.
  DEFINE RETURN PARAMETER pret AS LONG.
END PROCEDURE.
 
PROCEDURE ActivateKeyboardLayout EXTERNAL "user32" :
    DEFINE INPUT PARAMETER P1 AS LONG.
    DEFINE INPUT PARAMETER P2 AS LONG.
END PROCEDURE.
 
DEF VAR iLang AS INT NO-UNDO.
    RUN LoadKeyboardLayoutA (INPUT pcLayoutNum, INPUT 0, OUTPUT iLang).
    RUN ActivateKeyboardLayout (INPUT iLang, INPUT 0).

Но я заметил, что на некоторых наших машинах такой код может выполняться около двух секунд. Я решил глубоко не копать, а использовать всю мощь .Net. В итоге получился вот такой код-песочница, который исполняется быстро.

USING System.Windows.Forms.*.
USING System.Globalization.CultureInfo.
 
DEF VAR ruRU AS CLASS CultureInfo.
DEF VAR enUS AS CLASS CultureInfo.
 
DEF VAR rus AS CHAR FORMAT "X(30)".
DEF VAR eng AS CHAR FORMAT "X(30)".
 
ASSIGN 
   ruRU = NEW CultureInfo( "ru-RU" ).
   enUS = NEW CultureInfo( "en-US" ).
 
InputLanguage:CurrentInputLanguage = InputLanguage:FromCulture(ruRU).
UPDATE rus.
 
InputLanguage:CurrentInputLanguage = InputLanguage:FromCulture(enUS).
UPDATE eng.

Leave a Reply

You must be logged in to post a comment.