Вот примерно таким путем можно сделать:
Код:
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;