Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > различение знаков


Автор: Klose 14.8.2006, 22:22
Можно ли как-нибудь различить одинаковые знаки но набранные разными способами? Н-р:
Я могу набрать
Двоеточие   с помощью (на англиском языке) Shift+Ж и   с помощью
Shift+6.

Автор: Quadr0 14.8.2006, 22:48
...

Автор: Fedia 14.8.2006, 23:01
Проверить то можно, только нескромный вопрос: зачем ? smile
Код

procedure TForm1.Memo1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  Id: Cardinal;
  russian, latin, curent: HKL;
begin
  //проверяем текущую раскладку
  russian:=LoadKeyboardLayout('00000419', 0);
  latin:=LoadKeyboardLayout('00000409', 0);
  Id:=GetWindowThreadProcessId(Application.Handle);
  curent:=GetKeyboardLayout(Id);

  //проверяем код нажатой клавиши
  if (key=186) and (curent=latin) then
  ShowMessage('Набрали ":" при английской раскладке клавиатуры');
  if (key=54) and (curent=russian) then
  ShowMessage('Набрали ":" при русской раскладке клавиатуры');
end;


Автор: Klose 14.8.2006, 23:02
Значит, если делать "перевод" из первого случая в "Ж" и второго в "^", то будет что-то одно из них?

Упс, не видел=)

Нужно чтобы "переводилось", когда пишешь на англиской на русский вариант и наоборот.
Напрмер,чтобы "byajhvfnbrf" перевести на "информатика"

Автор: Fedia 14.8.2006, 23:07
Нет, "Ж" , "^", ":" - разные символы с разным кодом.

Автор: Klose 14.8.2006, 23:14
Зато ":" и ":" - одинаковые smile 

Спасибо за код.
Жаль , что он на момент нажатия.

Автор: Fedia 15.8.2006, 00:21
Цитата(Klose @  14.8.2006,  23:14 Найти цитируемый пост)
Жаль , что он на момент нажатия.

Это потому, что 
Цитата(Klose @  14.8.2006,  23:14 Найти цитируемый пост)
Зато ":" и ":" - одинаковые 
 smile
Многое зависит от момента, в который тебе необходимо получить из набора символов "byajhvfnbrf" слово "информатика". Вот простой пример, реализующий эти действия в момент нажатия:
Код

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  case key of
    #121: key:=#237;
    #97: key:=#244;
    #106: key:=#238;
    #104: key:=#240;
    #118: key:=#236;
    #102: key:=#224;
    #110: key:=#242;
    #98: key:=#232;
    #114: key:=#234;
  end;
end;

Если же в данный пример занести полный перечень кодов символов, которые необходимо переводить, а так же добавить проверку типа: "Если такая-то галочка установлена, то производи замену кодов", то получишь полноценный обработчик.
В случае, когда необходимо производить замену уже набранных символов, то пробегаешь по строке и производишь проверку с заменой кода типа:
Код

  for i:=1 to Length(s1) do
  if ord(s1[i]) = 121 then
  s1[i]:=char(237);

Автор: Klose 15.8.2006, 09:32
Замену остальных я уже сделал. Вот щас мучаюсь с такими знаками,которые повторяютсяsmile

Автор: Fedia 15.8.2006, 09:56
Цитата(Klose @  15.8.2006,  09:32 Найти цитируемый пост)
Замену остальных я уже сделал. Вот щас мучаюсь с такими знаками,которые повторяются

Не мучайся: 'Ж' меняй на ':' для английской раскладки и '^' меняй на ':' для русской. И Наоборот smile

Автор: kostas 16.8.2006, 06:33
Или лучше не изобретать велосипед, ведь есть puntoswitcher ))

Автор: Fedia 16.8.2006, 06:44
 
Цитата(kostas @  16.8.2006,  06:33 Найти цитируемый пост)
Или лучше не изобретать велосипед, ведь есть puntoswitcher ))

С этим предложением в другой раздел форума, кажись smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)