Программное переключение клавиатуры на RemObject Pascal

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 08.05.2019 23:32:10

Вечер добрый.
Подскажите, пожалуйста, как можно программно установить в определённом поле/компоненте ввод данных в жёстко заданной раскладке? Чтобы не приходилось ради одного-двух полей на десяток каждый раз менять раскладку.

Добавлено спустя 22 минуты 36 секунд:
Не по нажатию кнопки, а когда ставишь курсор в поле (табом или мышью - неважно).

Добавлено спустя 44 минуты 10 секунд:
Попытался использовать такой вариант:
Код: Выделить всё
procedure OP(Sender: TObject; var UTF8Key: TUTF8Char; Key: Char);
begin
if key=';' then UTF8key:='Ж'
else
if key='v' then UTF8key:='М';
end;

Код: Выделить всё
  dxComboBox7.OnKeyPress:=@OP;


Однако при компиляции вылезает ошибка о несоответствии типов.
Код написан для компонента "Список" с тремя вариантами: М, Ж и пустой (null, подставляется по-умолчанию).
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Снег Север » 09.05.2019 07:25:23

Какие типы не соответствуют? Ну, так опишите типы так, чтобы соответствовали.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение olegy123 » 09.05.2019 09:34:45

вообще то можно считать номер нажатой клавиши delphi OnKeyDown/OnKeyUp

в RemObject я не знаю как устроено, но пишут что в .net
KeyPreview/OnPreviewKeyDown
olegy123
долгожитель
 
Сообщения: 1643
Зарегистрирован: 25.02.2016 12:10:20

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 09.05.2019 16:00:10

Снег Север писал(а):Какие типы не соответствуют?

Увы, в тексте ошибки об этом ни слова.
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение *Rik* » 09.05.2019 19:26:58

Если Windows то можно попытаться вызвать функцию API loadkeyboardlayout.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 09.05.2019 21:16:40

Ребят, я только начал изучать всё это дело. Известные многим методам я просто не соображу, куда воткнуть.
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Vadim » 10.05.2019 09:14:40

Виталий1990 писал(а):Увы, в тексте ошибки об этом ни слова.

Тогда просто скопируйте сюда сообщение об ошибке, а мы посмотрим. ;-)
На всякий случай: событие OnKeyPress у TComboBox по количеству параметру и типам данных не совпадает с тем, что Вы пытаетесь ему подсунуть...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 10.05.2019 17:41:14

Vadim писал(а):
Виталий1990 писал(а):Увы, в тексте ошибки об этом ни слова.

Тогда просто скопируйте сюда сообщение об ошибке, а мы посмотрим. ;-)


Указанные координаты относятся к строке
Код: Выделить всё
  dxComboBox7.OnKeyPress:=@OP;


Курсор в данном случае находится буквально перед точкой с запятой.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Vadim » 11.05.2019 04:24:01

Виталий1990
Vadim писал(а):На всякий случай: событие OnKeyPress у TComboBox по количеству параметру и типам данных не совпадает с тем, что Вы пытаетесь ему подсунуть...

;-)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 13.05.2019 21:50:38

В качестве примера можно использовать вот этот код. Авторство не моё.)

Код: Выделить всё
function KeybLayerMirror(UTF8Key: TUTF8Char;Direct:string):TUTF8Char;
var
  Ru,En,L1,L2:array of byte;
  i:integer;
  k:byte;
  s: String;
begin
  Ru :=
  [233,246,243,234,229,236,227,248,249,231,245,250,
  244,251,226,224,239,240,238,235,228,230,253,
  255,247,241,237,232,242,252,225,254,
  201,214,211,202,197,204,195,216,217,199,213,218,
  212,219,194,192,207,208,206,203,196,198,221,
  223,215,209,205,200,210,220,193,222];
  En :=
  [113,119,101,114,116,118,117,105,111,112,91,93,
  97,115,100,102,103,104,106,107,108,59,39,
  122,120,99,121,98,110,109,44,46,
  81,87,69,82,84,86,85,73,79,80,123,125,
  65,83,68,70,71,72,74,75,76,58,34,
  90,88,67,89,66,78,77,60,62];
  case trim(lowercase(Direct)) of
    'ru-en' :
    begin
      L1:=Ru; L2:=En;
    end;
    'en-ru' :
    begin
      L1:=En; L2:=Ru;
    end
    else exit;
  end;
  s := Utf8ToWinCP(UTF8Key)
  k := Ord(s[1]);
  for i:=0 to GetArrayLength(L1)-1 do
  if k = L1[i] then
  result := WinCPToUtf8(Chr(L2[i]));
end;

procedure dxEdit1_OnUtf8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
  UTF8Key := KeybLayerMirror(UTF8Key,'en-ru');
end;

procedure dxEdit2_OnUtf8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
begin
  UTF8Key := KeybLayerMirror(UTF8Key,'ru-en');
end;                   


Код: Выделить всё
dxComboBox7.OnUtf8KeyPress:= @dxEdit1_OnUtf8KeyPress;


Добавлено спустя 35 минут 13 секунд:
Единственное, в чём я не разобрался, это что даёт параметр функции Direct. Подскажите, пожалуйста.
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 26.05.2019 23:43:28

Дополнительный вопрос.
Как в условии задать зависимость: если в текстовое поле введён определённый символ - пробел, точка, точка с запятой или иной "разделитель" - выполнять один алгоритм, если не введён - другой. Например, в первом случае - en-ru, во втором - ru-en.
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение zoltanleo » 29.05.2019 00:00:23

Виталий1990 писал(а):Как в условии задать зависимость: если в текстовое поле введён определённый символ

событие OnKeyDown компонента, анализируй там. У формы должно быть KeyPreview = True
Аватара пользователя
zoltanleo
постоялец
 
Сообщения: 458
Зарегистрирован: 17.10.2013 10:55:01

Re: Программное переключение клавиатуры на RemObject Pascal

Сообщение Виталий1990 » 30.05.2019 00:54:52

zoltanleo писал(а):
Виталий1990 писал(а):Как в условии задать зависимость: если в текстовое поле введён определённый символ

событие OnKeyDown компонента, анализируй там. У формы должно быть KeyPreview = True

Перефразирую: нужно определить не нажатую в данный момент времени клавишу, а наличие определённого символа (здесь - пробела) в поле.

На практике предполагается использовать для введения серий советского паспорта, например, "XXXIII ПА".
Если пробела нет, выводим латиницу, если пробел есть - кириллицу.
Иначе:
пробел есть - выполняем схему 'ru-en' (процедура dxEdit2), нет - выполняем схему 'en-ru' (процедура dxEdit1)
Виталий1990
новенький
 
Сообщения: 16
Зарегистрирован: 02.05.2019 01:48:01


Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru