Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 19:29   #1
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию Раскладка клавиатуры

Добрый день! Такой вопрос:
Как можно определить текущую раскладку клавиатуры, только не именно для окна моей программы а вообще для любого окна которое на данный момент активно?
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 18.05.2010, 23:52   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Код:
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) = 67699721 then
Caption:='раскладка английская'
else
Caption:='раскладка неанглийская';
// 68748313 соответствует русской
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 19.05.2010, 13:16   #3
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

спасибо все работает, вот только одно но...
где можно узнать какой идентификатор какому языку соответствует?
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 19.05.2010, 14:32   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
где можно узнать какой идентификатор какому языку соответствует?
Так в интернете я не встречал описаний. Сделайте по-простому. Установите нужный язык и переключайте раскладку клавиатуры, а идентификаторы берите из функции GetKeyboardLayout. К примеру:
Код:
Edit1.Text:=IntToStr(GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow,Nil)));
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 19.05.2010, 14:47   #5
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

Спасибо! И как я сам до такого не додумался...
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 21.05.2010, 20:20   #6
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

У меня еще такой вопрос, как сменить раскладку клавиатуры?
Использую процедуру но ничего не меняется... вернее оно меняется н а потом обратно возвращается так сказать в исходное положение.
Вот моя процедура, подправьте если что не так.
Код:
procedure TForm1.NextFlag;
var
  Layout: array[0.. KL_NAMELENGTH] of char;
Begin
 if RzBmpButton10.Tag = 0 then
    Begin
     RzBmpButton10.Picture.LoadFromFile(ExtractFileDir(Application.ExeName)+'\Icons\Flags\RUS.png');
     RzBmpButton10.Hint:='Русский';
     RzBmpButton10.Tag:=1;
     LoadKeyboardLayout(StrCopy(Layout, '68748313'), KLF_ACTIVATE);
    End
else
 if RzBmpButton10.Tag = 1 then
    Begin
     RzBmpButton10.Picture.LoadFromFile(ExtractFileDir(Application.ExeName)+'\Icons\Flags\UK.png');
     RzBmpButton10.Hint:='Українська';
     RzBmpButton10.Tag:=2;
     LoadKeyboardLayout(StrCopy(Layout, '69338146'), KLF_ACTIVATE);
    End
else
 if RzBmpButton10.Tag = 2 then
    Begin
     RzBmpButton10.Picture.LoadFromFile(ExtractFileDir(Application.ExeName)+'\Icons\Flags\USA.png');
     RzBmpButton10.Hint:='English';
     RzBmpButton10.Tag:=0;
     LoadKeyboardLayout(StrCopy(Layout, '69338146'), KLF_ACTIVATE);
    End;
End;
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Старый 21.05.2010, 20:33   #7
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

У Вас процедура сама прогоняет весь код. Поясню. Если у Вас Tag = 0, то выполняется действие и Tag становится равным 1. Потом код выполняется дальше в этой же процедуре, а Tag уже равен 1 и идёт выполнение следующего действия и т.д. до конца процедуры. Придумайте или измените условия так, что бы последующие действия под условия не попадали.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 21.05.2010, 20:40   #8
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Terran, а по-моему правильно - ведь если код отработает по первому if-у то он по else уже не пойдет.

Есть один нюанс при смене раскладки -таким методом раскладка поменяется только для текущего окна, т.е. Вашего. Для смены раскладки в сисетме придется dll-лить с хуками.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 21.05.2010, 20:50   #9
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Terran, а по-моему правильно - ведь если код отработает по первому if-у то он по else уже не пойдет.
Верно. Забыл про Else...
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 21.05.2010, 21:42   #10
Vladya
Форумчанин
 
Аватар для Vladya
 
Регистрация: 04.11.2008
Сообщений: 360
По умолчанию

Цитата:
Сообщение от Alex Cones Посмотреть сообщение
Есть один нюанс при смене раскладки -таким методом раскладка поменяется только для текущего окна, т.е. Вашего. Для смены раскладки в сисетме придется dll-лить с хуками.
а можно подробнее, потому что ничего не могу найти только то что у меня и все...
Мой скромненький сайт
Vladya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскладка клавиатуры SERG1980 Общие вопросы Delphi 4 05.07.2010 10:41
Раскладка клавиатуры Zmey31 Операционные системы общие вопросы 6 16.02.2010 11:23
раскладка клавиатуры varelik Общие вопросы Delphi 4 07.12.2009 16:14
Раскладка клавиатуры bracomp Операционные системы общие вопросы 11 04.11.2009 21:45
Раскладка клавиатуры Reindeer Общие вопросы Delphi 10 21.03.2007 22:28