При запуске приложения для него и всех его форм устанавливается раскладка клавиатуры, заданная в Windows по умолчанию. Пользователь выбирает нужную раскладку с помощью комбинации клавиш или значка в правом углу панели задач. Разработчик может переключать раскладку клавиатуры программным способом, что может быть удобно в случае, когда, например, для приложения устанавливается русская раскладка независимо от раскладки по умолчаниюWindows. Получить список установленных для раскладок клавиатуры и активизировать в приложении одну из доступных раскладок можно с помощью АРI – функций GetKeyboardLayoutList и ActivateKeyboardLayout.
Функция GetKeyboardLayoutList (nbuff:integer; var List)получает список раскладок клавиатуры и заносит его в массив, указанный параметром List. Параметр nbuff задает размер (число элементов) массива, получающего список раскладок. Функция возвращает число раскладок клавиатуры, установленных на компьютере.
Функция ActivateKeyboardLayout (hkl: HKL, Flags: UINT) устанавливает раскладку, заданную параметром hkl; параметр Flags обычно не нужен. В случае успешного выполнения функция возвращает предыдущую раскладку клавиатуры и ноль — в случае ошибки.
Пример:
var rl el: THandle;
Layouts: array [O. .7] of THandle;
n: integer;
// получение списка раскладок
procedure TForml.ButtonlClick(Sender: TObject);
var i: integer;
begin
rl := 0; el := 0;
n := GetKeyboardLayoutList(High(Layouts) + 1, Layouts>;
for I := 0 to n-1 do begin
if LoWord(Layouts[i)) and $FF = Lang_Russian then rl := Layouts Ii];
if LoWord(Layouts[i]) and $FF = Lang_English then el := Layouts[i);
end;
end;
// установка русской раскладки
procedure TForml.ButtonlClick(Sender: TObject);
begin
if rl <> 0 then ActivateKeyboardLayout(rl, 0);
end;
//установка английской расскладки
procedure TForml.Button2Click(Sender: TObject);
begin
if el <> 0 then ActivateKeyboardLayout(el, 0);
end;
Для определения раскладки, установленной по умолчанию, можно использовать свойство DefaultKbLayout объекта Screen.