キーコードを文字に変換するには?

解決


遊佐  2005-09-04 02:15:20  No: 17369

KeyDownのKeyには押されたキーコードが入っていますが、
これから文字を取得することは可能でしょうか。
文字→キーコードはOrdで取得できますけど、その逆をしたいのです。


Fusa  2005-09-04 03:08:45  No: 17370

ShowMessage(IntToHex(word('A'),2));
  ShowMessage(IntToHex(Ord('A'),2));

    41
    と表示されます

  ShowMessage(Char(StrToInt('$41')));
  ShowMessage(Char($41));
  ShowMessage(Chr($41));

    どれでも
    A
    と表示されます。


QUEBits  2005-09-14 07:14:24  No: 17371

私も同じようなことを考えたことがあります。
ホットキーを登録するソフトで、
ShiftとかF1とかも押された場合にも
キーネームを得る方法。
そのときのコードが参考になれば幸いです。

///////////////////////////////////////////////////////////
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  strMod : string;
  Key_Name  : array[0..100] of char;
  lParam : Integer ;
begin
  {RegisterHotKeyに渡すバーチャルキーコード}
  vk := Key ;

  {RegisterHotKeyに渡す特殊キー情報の変換}
  fsModifiers := 0;
  if ssShift in Shift then
  begin
    fsModifiers := fsModifiers + MOD_SHIFT;   // +4
  end;
  if ssAlt in Shift then
  begin
    fsModifiers := fsModifiers + MOD_ALT;     // +1
  end;
  if ssCtrl in Shift then
  begin
    fsModifiers := fsModifiers + MOD_CONTROL; // +2
  end;

  {表示処理部分}

  case fsModifiers of
    1: strMod := 'Alt + ';
    2: strMod := 'Ctrl + ';
    4: strMod := 'Shift + ';
    3: strMod := 'Ctrl + Alt + ';
    5: strMod := 'Shift + Alt + ';
    6: strMod := 'Ctrl + Shift + ';
    7: strMod := 'Ctrl + Shift + Alt + ';
  else
    strMod := '';
  end;

  {バーチャルキーコードをスキャンコードに変換してからキーネームを得る}

  lParam := MapVirtualKey(Key, 0) shl 16 ;

  case Key of   // lParamの0から数えて24番目のビットがExtended-Key Flag
    33..46,91..93,108,111,144,163,165: lParam := lParam + $1000000 ;
    // Page Up...LEFT,UP,RIGHT,DOWN...Delete,,Windowsなどなど
  end;

  GetKeyNameText(lParam, @Key_Name, 100);  //Key_Namewを得る

  KeyNameStr := String(Key_Name); //Ctrl + Ctrl みたいになるのを防ぐ
  if KeyNameStr = 'Ctrl' then
  begin
  KeyNameStr := '';
  end;
  if KeyNameStr = 'Shift' then
  begin
  KeyNameStr := '';
  end;
  if KeyNameStr = 'Alt' then
  begin
  KeyNameStr := '';
  end;

  Edit1.Text := ( strMod + KeyNameStr ) ;    //表示
end;
///////////////////////////////////////////////////////////


遊佐  2005-09-14 07:43:09  No: 17372

Fusaさん、QUEBitsさん、ありがとうございました。
参考になります。丁度ホットキー関係の処理をしていたもので。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加