Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Текущая раскладка клавиатуры, Как узнать???? 
V
    Опции темы
Rodman
Дата 3.9.2006, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Дароф. Кто нить может мне подсказать как считать программно какой язык включен (русский, английский и т.д.)... от отловить переключение (не зависимо от того как человек переключается - на Ctrl+Shift или Alt+Shift)...


Спасибо... smile  smile  smile 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Lence
Дата 3.9.2006, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

Репутация: 3
Всего: 3



определяешь через GetKeyboardLayoutName(Lang) ; какие цифры на конце 
Код

var 
s: string
 Lang: Array[0..$FFF] of Char; 
begin 
 GetKeyboardLayoutName(Lang) ;   
 s := StrPas(Lang);   
 if s = '00000419' then     
  Label1.caption:='Ru'    
 else    
   if s = '00000409' then     
     Label1.caption:='Eng'   
   else     
       Label1.caption:='Other'     
end;  



Это сообщение отредактировал(а) Lence - 3.9.2006, 22:55
--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
Rodman
Дата 3.9.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Спасибо, но вот второй вопрос был.... Есть ли какой нить сигнал который можно перехватить при переключении (Ctrl+Shift или Alt+Shift)???? Или проверять оба варианта???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Lence
Дата 3.9.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чухарадземадзупэ
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 9.5.2006
Где: Ташкент

Репутация: 3
Всего: 3



Цитата(Rodman @  3.9.2006,  23:18 Найти цитируемый пост)
пасибо, но вот второй вопрос был.... Есть ли какой нить сигнал который можно перехватить при переключении (Ctrl+Shift или Alt+Shift)???? Или проверять оба варианта??? 


можно  HOOK повесить на комбинации клавишь ....  или тебе системно надо узнать  смену языка ? 

--------------------
Шуруп, забитый молотком, крепче сидит чем гвоздь, закрученный отверткой ....  
PM MAIL ICQ Skype   Вверх
Rodman
Дата 3.9.2006, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Я понимаю что можно повесить на клавиши, но а если перемена языка произойдет с помощью мышки, то я не отслежу это... так что как-то необходимо перехватить сигнал??? но я не могу пока понять как это сделать???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Fedia
Дата 4.9.2006, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 8
Всего: 13



Цитата(Rodman @  3.9.2006,  23:47 Найти цитируемый пост)
так что как-то необходимо перехватить сигнал??? но я не могу пока понять как это сделать???

Перехватить изменение раскладки клавиатуры можно в Application.OnMessage, перехватывая сообщение WM_INPUTLANGCHANGEREQUEST. Примерно так:
Код

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_INPUTLANGCHANGEREQUEST then
  ShowMessage('Изменилась раскладка клавиатуры');
end;
//.......
//Присваиваем обработчик события (например, при загрузке формы)
Application.OnMessage:=AppMsg;



--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
Rodman
Дата 4.9.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



А если к примеру я буду проверять раскладку при вводе, то мне необходимо

Код

procedure TForm1.Edit1Change(Sender: TObject);
begin
  Application.OnMessage:=AppMsg;
end;


или я не правильно понял перехват???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Alexeis
Дата 4.9.2006, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Цитата(Rodman @  4.9.2006,  18:38 Найти цитируемый пост)
или я не правильно понял перехват??? 

Угу Fedia показал метод перехвата изменения раскладки в тот момент когда она реально производится.

Application.OnMessage:=AppMsg; - имеет смысл присваивать в обработчике onCreate формы

в 
Код

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_INPUTLANGCHANGEREQUEST then
  ShowMessage('Изменилась раскладка клавиатуры');
end;


имеет смысл вставить

Код

var 
s: string
 Lang: Array[0..$FFF] of Char; 
begin 
 GetKeyboardLayoutName(Lang) ;   
 s := StrPas(Lang);   
 if s = '00000419' then     
  Label1.caption:='Ru'    
 else    
   if s = '00000409' then     
     Label1.caption:='Eng'   
   else     
       Label1.caption:='Other'     
end;  


т.е. определение какую раскладку установили (в тот момент когда установили, поскольку сообщение прийдет сразу после изменения раскладки)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Yanis
Дата 5.9.2006, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Rodman
Отслеживать изменение нужно в своём приложении или вообще в системе, независимо от того активна программа или нет?


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Rodman
Дата 6.9.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



Отследить мне нужно только во время работы моего приложения, конкретно во время ввода пароля... Как в WebMoney... во время ввода возле поля высвечивается текущий язык...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Yanis
Дата 6.9.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111



Цитата(Rodman @  6.9.2006,  12:55 Найти цитируемый пост)
Как в WebMoney... во время ввода возле поля высвечивается текущий язык... 

Для отображения текущего языка можно просто проверять его в OnIdle, если ты об этом.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Alexeis
Дата 6.9.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



тогда 
Код

Application.OnMessage:=AppMsg;

надо присвоить сразу после создания (показа) дилога (панели) для ввода пароля.

И
Код

Application.OnMessage:= nil;


после завершения оперции (успешного входа)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rodman
Дата 6.9.2006, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



А если во время ввода произойдет смета раскладки???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Alexeis
Дата 6.9.2006, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



Rodman, тогда сработает обработчик
Код

procedure TForm1.AppMsg(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.message = WM_INPUTLANGCHANGEREQUEST then
  ShowMessage('Изменилась раскладка клавиатуры');
end;

В нем вместо ShowMessage('Изменилась раскладка клавиатуры');
надо вставить код который будет возвращать старую раскладку или все что еще так понадобится.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rodman
Дата 6.9.2006, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 7
Всего: 122



ОК.... т.е. как я понял на Edit1.OnChange  необходимо повесить 
Код

 Application.OnMessage:=AppMsg; 


Так???
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0669 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.