Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Как сменить раскладку клавиатуры на русскую в рантайме   Найти похожие ветки 

 
infom ©   (2004-04-14 13:24) [0]

???


 
Тимохов ©   (2004-04-14 13:31) [1]

Вариант 1
---------------------
var
rus,
eng: HKL;
...
rus:=LoadKeyboardLayout("00000419", 0);
eng:=LoadKeyboardLayout("00000409", 0);
...
ActivateKeyboardLayout(rus, 0); //Включить русский.
ActivateKeyboardLayout(eng, 0); //Включить английский.

Вариант 2
---------------------
{ **** UBPFD *********** by delphibase.endimus.com ****
>> Получение раскладки клавиатуры

5 функций для получения/установки раскладки клавиатуры в своем или активном в текущий момент времени приложении:

function NameKeyboardLayout(layout : LongWord) : string;
Получает название раскладки из списка (для удобства сделал :)))

function GetActiveKbdLayout : LongWord;
Получает раскладку в своей программе

function GetActiveKbdLayoutWnd : LongWord;
Получает раскладку в активном окне

procedure SetKbdLayout(kbLayout : LongWord);
Устанавливает раскладку в своей программе

procedure SetLayoutActiveWnd(kbLayout : LongWord);
Устанавливает раскладку в активном окне

Зависимости: Windows, Messages
Автор:       savva, savva@nm.ru, ICQ:126578975, Орел
Copyright:   Сапронов Алексей (Savva)
Дата:        27 июня 2002 г.
***************************************************** }

{типы описываем }
const
 CNT_LAYOUT = 2; // количество известных раскладок
 ENGLISH = $409;
 RUSSIAN = $419;

 TKbdValue : array [1..CNT_LAYOUT] of LongWord =
               ( ENGLISH,
                 RUSSIAN
               );
 TKbdDisplayNames : array [1..CNT_LAYOUT] of string =
               ("English",
                "Русский"
               );

{----- собственно сами процедури и функции -----}
 
{получаем название раскладки}
function NameKeyboardLayout(layout : LongWord) : string;
var
 i: integer;
begin
 Result:="";
 try
   for i:=1 to CNT_LAYOUT do
     if TKbdValue[i]=layout then Result:= TKbdDisplayNames[i];
 except
   Result:="";
 end;
end;
//**************** end of NameKeyboardLayot ***************************
{активная раскладка в своей программе}
function GetActiveKbdLayout : LongWord;
begin
 result:= GetKeyboardLayout(0) shr $10;
end;
//***************** end of GetActiveKbdLayot ****************************
{активная раскладка в активном окне}
function GetActiveKbdLayoutWnd : LongWord;
var
 hWindow,idProcess : THandle;
begin
 // получить handle активного окна чужой программы
 hWindow := GetForegroundWindow;
 // Получить идентификатор чужого процесса
 idProcess := GetWindowThreadProcessId(hWindow,nil);
 // Получить текущую раскладку в чужой программе
 Result:=(GetKeyboardLayout(idProcess) shr $10);
end;
//***************** end of GetActiveKbdLayotWnd **************************
{установить раскладку в своей программе}
procedure SetKbdLayout(kbLayout : LongWord);
var
 Layout: HKL;
begin
 // Получить ссылку на раскладку
 Layout:=LoadKeyboardLayout(PChar(IntToStr(kbLayout)), 0);
 // Переключить раскладку на русскую
 ActivateKeyboardLayout(Layout,KLF_ACTIVATE);
end;
//****************** end of SetKbdLayot **********************************
{установить раскладку в активном окне}
procedure SetLayoutActiveWnd(kbLayout : LongWord);
var
 Layout: HKL;
 hWindow{, idProcess} : THandle; // ION T: не используется
begin
 // получить handle активного окна чужой программы
 hWindow := GetForegroundWindow;
 // Получить ссылку на раскладку
 Layout:=LoadKeyboardLayout(PChar(IntToStr(kbLayout)), 0);
 // посылаем сообщение о смене раскладки
 sendMessage(hWindow,WM_INPUTLANGCHANGEREQUEST,1,Layout);
end;
//***************** end of SetLayoutActiveWnd *****************************

Пример использования:
...
 {активная раскладка в активном окне}
   Label1.Caption:= NameKeyboardLayout(GetActiveKbdLayoutWnd);
 {активная раскладка в своей программе}
   Label2.Caption:= NameKeyboardLayout(GetActiveKbdLayout);
 {установить раскладку в своей программе}
   SetKbdLayout(ENGLISH);
 {установить раскладку в активном окне}
   SetLayoutActiveWnd(ENGLISH);
...


 
infom ©   (2004-04-14 13:36) [2]

Большое спасибо



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.046 c
1-1084287680
Eugene30
2004-05-11 19:01
2004.05.23
Как программно (в run-time) получить список всех форм проекта?


1-1084206117
Nicolas1985
2004-05-10 20:21
2004.05.23
Разрешение экрана


8-1078160093
__Alex__
2004-03-01 19:54
2004.05.23
Компонент для загрузки AVI из потока


9-1073395130
mixir
2004-01-06 16:18
2004.05.23
Камера & 3D


1-1083856663
Alek_1
2004-05-06 19:17
2004.05.23
OleContainer