- Код: Выделить всё
procedure TForm1.Memo1UTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
var
tempkey: string[7];
begin
//showmessage(inttostr(ord(UTF8Key[0]))+' '+inttostr(ord(UTF8Key[1]))+' '+inttostr(ord(UTF8Key[2]))+' '+inttostr(ord(UTF8Key[3]))+' '+inttostr(ord(UTF8Key[4]))+' '+inttostr(ord(UTF8Key[5]))+' '+inttostr(ord(UTF8Key[6])));
tempkey := UTF8Key;
tempkey[0] := #2;
tempkey[1] := #209;
tempkey[2] := #132;
tempkey[3] := #0;
UTF8Key := tempkey;
end; // 209 132 - это буква ф
// 2 208 186 0 70 6 19 - вот что я вижу при вводе русского символа showmessage'м
как я понял, первый байт отвечает за кодировку:
1 - латиница, цифры, буквы и тд и тп
2 - русские символы
второй байт и третий - содержит 2 байта юникода для кириллицы
четвертый байт - завершающий ввод - 0
пятый и далее - мусор в памяти
при латинском вводе будет что нить наподобие такого: 1 125 0 xxx xxx xxx xxx
Предупреждая вопросы о том, что я может что нить не так понял...
если я нажму 'g' = 1 103 0 0 70 6 19
заменяю второй байт на что нить из латинской кодировки - все работает! Вот что происходит с русским языком - я не знаю...
P.S. До перевода Лазаруса на Юникод проблем не было вообще... Так что учитывая данную ситуацию и то, что Лазарус теперь ничего кроме Юникода не понимает - это просто испортить IDE для Паскаля под *nix и подарок тем, у кого Windows...
Добавлено спустя 4 минуты 25 секунд:Спасибо за идею!!!!!!!!!!!!!!
- Код: Выделить всё
procedure TForm1.Memo1UTF8KeyPress(Sender: TObject; var UTF8Key: TUTF8Char);
var
tempkey: string[7];
begin
tempkey := UTF8Key;
UTF8Key := #0;
tempkey[0] := #02;
tempkey[1] := #209;
tempkey[2] := #132;
tempkey[3] := #0;
Memo1.Lines.Add(tempkey);
end;
Вот ЭТО работает!!!! Но, к сожалению, это только костыли.... Человеческого нифига ничего нет... (((