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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2011, 17:01   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию Текущая раскладка клавиатуры

Ни поиск, ни Google не спасли.
Код:
var
  Form1: TForm1;
  X : PAnsiChar;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
      GetKeyboardLayoutName(X);
end;
Не работает.
Как быть?
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.06.2011, 17:11   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а память кто выделит под буфер?

Код:
function GetKBLayoutName:string;
begin
 SetLength(Result,KL_NAMELENGTH);
 GetKeybooadLayoutName(@Result[1]);
 SetLength(Result,lstrlen(@result[1]));
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 19.06.2011, 17:14   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Опст, спасибо.
_-Re@l-_ вне форума Ответить с цитированием
Старый 19.06.2011, 17:19   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Было такое, помню http://programmersforum.ru/showpost....5&postcount=11
eoln вне форума Ответить с цитированием
Старый 19.06.2011, 17:27   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Выдернул из проекта чуть более расширенный вариант
Код:
procedure TFPasw.UpDateStateButtons;
var abKeyState: TKeyboardState;
    BufName: array[0..KL_NAMELENGTH-1] of Char;
begin
  GetKeyboardState(abKeyState);
  if abKeyState[VK_NUMLOCK]=$01 then ShapeNumLock.Brush.Color:=clLime
                                else ShapeNumLock.Brush.Color:=clBtnFace;
  if abKeyState[VK_CAPITAL]=$01 then ShapeCapsLock.Brush.Color:=clLime
                                else ShapeCapsLock.Brush.Color:=clBtnFace;
  if abKeyState[VK_SCROLL]=$01  then ShapeScrollLock.Brush.Color:=clLime
                                else ShapeScrollLock.Brush.Color:=clBtnFace;
  GetKeyboardLayoutName(@BufName);
  case Lo(StrToInt('$'+String(BufName))) of
  LANG_RUSSIAN  : LabelLaout.Caption:='Русский';
  LANG_UKRAINIAN: LabelLaout.Caption:='Украинский';
  LANG_ENGLISH  : LabelLaout.Caption:='Английский';
  else LabelLaout.Caption:='???';
  end;
end;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2012, 14:15   #6
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Это всё хорошо. Вот только как в своей программе сделать "индикатор" раскладки, чтобы реагировал на смену раскладки? Не запихивать же этот код в таймер?!
FaTaL вне форума Ответить с цитированием
Старый 16.05.2012, 14:39   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В Application.OnMessage изменение языковой раскладки ловить WM_INPUTLANGCHANGEREQUEST.
Изменение состояния NumLock, CapsLock и ScrollLock ловить в Form.OnKeyPress.
И при активизации формы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2012, 15:04   #8
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Спасибо. Покажите пример плиз для WM_INPUTLANGCHANGEREQUEST, что то у меня Дельфин не распознаёт такое событие.

Спасибо Аватар. Сам разобрался:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
  procedure LangChange (var message : TMessage); message  WM_INPUTLANGCHANGE;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.LangChange(var message: TMessage);
var
  BufName: array[0..KL_NAMELENGTH-1] of Char;
begin
  GetKeyboardLayoutName(@BufName);
  case Lo(StrToInt('$'+String(BufName))) of
  LANG_RUSSIAN  : Label1.Caption:='Русский';
  LANG_UKRAINIAN: Label1.Caption:='Украинский';
  LANG_ENGLISH  : Label1.Caption:='Английский';
  else Label1.Caption:='???';
  end;
end;

end.

Последний раз редактировалось Stilet; 18.05.2012 в 07:51.
FaTaL вне форума Ответить с цитированием
Старый 16.05.2012, 15:21   #9
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Во-первых, WM_INPUTLANGCHANGEREQUEST будет работать далеко не всегда.

Проще всего - таймер. Если хочется правильно, то... ITfLanguageProfileNotifySink.

Во-вторых, примеры кода выше не получают активную раскладку клавиатуры. Они получают язык ввода. Это далеко не одно и то же. К примеру, за пределами СНГ часто используют русскую фонетическую раскладку вместо ЙЦУКЕН.

http://www.transl-gunsmoker.ru/2010/...g-post_09.html
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 16.05.2012, 15:49   #10
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Приведи плиз пример с ITfLanguageProfileNotifySink.
FaTaL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Раскладка клавиатуры DSK Общие вопросы Delphi 5 21.03.2011 04:28
Раскладка клавиатуры soktahan Microsoft Office Excel 2 24.11.2010 22:22
Раскладка клавиатуры Vladya Помощь студентам 10 21.05.2010 22:14
раскладка клавиатуры varelik Общие вопросы Delphi 4 07.12.2009 16:14
Раскладка клавиатуры bracomp Операционные системы общие вопросы 11 04.11.2009 21:45