Преобразовать код символа в скан-код клавиши
Автор: Sniknik
для буквы 'Ф' его и не будет, 0 невозможно преобразовать. посмотри ее значение (Ord) чему равно?
а клавиш всего 101шт. (но не все так просто, 101 это наоборот скэн коды надо считать)
в твоем случае букву 'Ф' надо переводить в анг. вариант 'A' и тогда MapVirtualKey(Key,0)
дает скэн код. короче не работает с MapVirtualKey с локализованными раскладками
а AnsiMapVirtualKey пока нет.
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
var st: string;
begin
if WinKey < Key then begin
WinKey:= Key;
Edit1.Text:= 'Key : '+IntToStr(Key)+' Char : '+Chr(Key);
end;
// MapVirtualKey
Memo1.Lines.Add('Key : '+IntToStr(Key)+' Char : '+Chr(Key)+' MVK : '+
IntToStr(MapVirtualKey(Key,0)));
if ssShift in Shift then st:= '1'
else st:= '0';
if ssAlt in Shift then st:= st + '1'
else st:= st+'0';
if ssCtrl in Shift then st:= st + '1'
else st:= st+'0';
if ssLeft in Shift then st:= st + '1'
else st:= st+'0';
if ssRight in Shift then st:= st + '1'
else st:= st+'0';
if ssMiddle in Shift then st:= st + '1'
else st:= st+'0';
if ssDouble in Shift then st:= st + '1'
else st:= st+'0';
Memo1.Lines.Add('State Shift/Alt/Ctrl/Left/Right/Middle/Double : '+st);
{
GetNumberofConsoleInputEvents
if Key = VK_F1 then Form1.Caption := 'F1';
WM_KEYDOWN
MapVirtualKeyEx, OemKeyScan, VkKeyScanEx
}
end;
|
|