![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Есть окно ввода, допустимый язык - английский. Если пишу на русском, то меняется раскладка. Как сделать чтобы уже нажатый символ тоже изменился?
|
|
#2
|
||||
|
||||
|
Мне это видится так:
Всякий раз как будет нажат любой символ-разделитель слов, вы очищаете переменную, и последующие нажатия будут формировать слово в переменной. Вот это слово вы и можете гонять в разной раскладке как вам нужно. |
|
#3
|
||||
|
||||
|
Кажется я неправильно описал проблему
OnKeyPress Edit'a: Код:
if GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow, nil)) <> 67699721
then begin
KL := LoadKeyboardLayout('00000409', 0);
ActivateKeyboardLayout(KL, 1); // устанавливаем aнгл язык
Key := #0;
ShowMessage('Язык ввода изменен на английский.');
end; |
|
#4
|
||||
|
||||
|
Ну ты-же сам затираешь символ в буфере:
Код:
Key := #0; |
|
#5
|
||||
|
||||
|
Потому и стираю, что иначе остается русский...
чем мне заменить это присвоение, чтобы получить правильный символ? |
|
#6
|
||||
|
||||
|
Вот примерно таким путем можно сделать:
Код:
Const
CharCount = 32;
KeybLayout: record
Eng,Rus: String[CharCount];
end = (Eng:('qwertyuiop[]asdfghjkl;''zxcvbnm,.');
Rus:('йцукенгшщзхъфывапролджэячсмитьбю'));
...
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Var
i: Integer;
begin
for i := 1 to CharCount
do case GetKeyboardLayout(0) shr $10
of 1033: if KeybLayout.Eng[i] = Key //Английская раскладка
then begin
Key := KeybLayout.Rus[i];
Break;
end;
1049: if KeybLayout.Rus[i] = Key //Русская раскладка
then begin
Key := KeybLayout.Eng[i];
Break;
end;
end
end; |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Kpyc (31.05.2012)
| ||