Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Обработать OnKeyDown в зависимости от языка


Автор: Fedor 5.12.2004, 03:08
Собсно, САБЖ. Нужно определять, какой язык у клавиатуры или может еще как-то.

З.Ы. Попробывал по WM_INPUTLANGCHANGEREQUEST, не получается...

Автор: Zero 5.12.2004, 11:33
Цитата(Morpheus @ 5.12.2004, 03:08)
Нужно определять, какой язык у клавиатуры или может еще как-то.
Я недавно видал в FAQ, прямо такой заголовок "Какой язык на данный момент на клавиатуре". Введи это в поиске FAQ, и получиш ответ.

Автор: Satana 5.12.2004, 11:35
а тебе не проще будет обрабатывать по коду нажатой клавиши? они ж на всех языках получаются разными...

Автор: Fedor 5.12.2004, 13:36
Цитата(Zero @ 5.12.2004, 10:33)
Я недавно видал в FAQ, прямо такой заголовок "Какой язык на данный момент на клавиатуре". Введи это в поиске FAQ, и получиш ответ.

Дык, я это первым делом сделал. Но тот пример что там выдает стандартный язык Винды у меня этот Русский и всегда у меня результат - русский.


Цитата(Satana @ 5.12.2004, 10:35)
тебе не проще будет обрабатывать по коду нажатой клавиши? они ж на всех языках получаются разными...

Попробую...

Автор: <Spawn> 5.12.2004, 14:21
Satana А как ты таким способом, к примеру, определишь раскладку при нажатии на 0..9?

Автор: Fedor 5.12.2004, 14:42
Я попробывал на OnKeyPress, но потом понял, что мне нужно еще определять такие клавиши, как влево, вправо, ... и так не получается

Автор: Zero 5.12.2004, 15:36
Morpheus, а ты не пробывал оба обработчика использовать, например все символы ты будеш проверять на OnKeyPress, а Клавиши (лево, право, ..., 0..9) на OnKeyDown. Или у тебя есть принцип, по которому нужно только один обработчик использовать.

Автор: <Spawn> 5.12.2004, 16:18
Попробуй вот это:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
 Buffer: array[1..KL_NAMELENGTH] of Char;
begin
 if GetKeyboardLayoutName(@Buffer) then
   if AnsiCompareText(Buffer, '00000409') = 0 then
     Caption := 'Eng'
   else
   if AnsiCompareText(Buffer, '00000419') = 0 then
     Caption := 'Rus'
   else
     Caption := 'Unknown';
end;

Автор: Fedor 5.12.2004, 23:20
Ок. Спасибо. Работает. А какой код у украинского языка. Иил где вообще можно эти коды узнать?

Автор: Satana 5.12.2004, 23:30
Morpheus а тебе нада будет определять какой код у клавишь функцией ord

Пример:

ord('а') результатом будет какоето число.
2 <Spawn> А какая разница какой язык когда ты цифрами то пользуешься? зачем его тогда ваще определять?

Автор: Fedor 5.12.2004, 23:37
Я имел в виду - у русского языка код 00000419, а английского - 00000409. А какой у украинского?

Автор: RA 6.12.2004, 00:44
Ну тут мало у кого есть возможность узнать код украинской раскладки, а вообще ты сам можешь это увидеть юзая туже


var
Buffer: array[1..KL_NAMELENGTH] of Char;
...
GetKeyboardLayoutName(@Buffer)
ShowMessage(Buffer);

Автор: Fedor 6.12.2004, 00:59
smile smile smile smile
Ну я туплю.....

RAdmin Спасибо, что навел на путь истинный...

smile smile smile smile

Автор: <Spawn> 6.12.2004, 05:37
Цитата(Satana @ 5.12.2004, 15:30)
Morpheus а тебе нада будет определять какой код у клавишь функцией ord

Пример:

ord('а') результатом будет какоето число.
2 <Spawn> А какая разница какой язык когда ты цифрами то пользуешься? зачем его тогда ваще определять?

Я имею ввиду комбинацию цифр и символов. Может ему отображать в программе нужно текующую раскладку. Все зависит от того, для чего ему это нужно.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)