Модераторы: 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   Вверх
Yanis
Дата 6.9.2006, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Rodman
Тебе объяснять, что в пустой колодец лить. Сказали же, что в OnCreate.


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


Амеба
Group Icon


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

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



Yanis, Я думаю что ему вначале надо почитать, что такое сообщения вообще, как они отсылаются, почему отсылаются и как принимаются и обрабатываются.

Добавлено @ 13:41 
Надо открыть любой учебник по Windows и прочитать хотя бы первую главу.

Это сообщение отредактировал(а) alexeis1 - 6.9.2006, 14:54


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

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

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


Эксперт
****


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

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



Цитата(alexeis1 @  6.9.2006,  14:39 Найти цитируемый пост)
Надо открыть любой учебник по Windows и прочитать хотябы первую главу.

Уточнение. Учебник по программированию!


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


CIO
****


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

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



Ну не надо драматизировать. Все когда то начинали, и не у всех все получалось...

Я задал такой вопрос, - "Куда добавлять" потому что OnCreate как Вы знаете выполняется 1 раз, а смена языка может производится неоднократно...

 smile 
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Alexeis
Дата 6.9.2006, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


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

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



Цитата(Rodman @  6.9.2006,  16:09 Найти цитируемый пост)
Ну не надо драматизировать. Все когда то начинали, и не у всех все получалось...

Мы совсем не драматизируем, все нормально. Просто чтоб начать програмировать под на Delphi необходимо выучить основы програмирования под Windows (хотя бы принципы). Это займет на самом деле часа 3-4, а потом уже многое станет ясным само по себе smile .


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

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

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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