如何显示键入的键的名称?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何显示键入的键的名称?相关的知识,希望对你有一定的参考价值。

我想在TEdit中显示按下的键的名称。

例如,虽然专注于TEdit并且键入A将在同一TEdit中显示A。按下另一个按钮,如空格键,将显示SPACE

我不知道从哪里开始,我认为THOTKey是一个选项,但我无法输入我想要的空间。

编辑//

阅读一些回复后,开始非常有帮助,但我遇到了一些问题,我不知道如何解决。

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if Sender is TEdit then
  case Key of
  chr(65):
    begin
      TEdit(Sender).Text := 'A [65]';
      Key := #0;
    end;
  chr(VK_NUMPAD1):
    begin
      TEdit(Sender).Text := '1';
      Key := #0;
    end;
  chr(32):
    begin
      TEdit(Sender).Text := 'SPACE [32]';
      Key := #0;
    end;
  else
    TEdit(Sender).Text := 'NONE';
  end;
end;

65是大写字母A,虽然我不喜欢它,但我可以输入65和97来给出相同的结果。

VK_NUMPAD1或任何其他VK_NUMPAD *不起作用,并且在编译时不会给我错误。我不知道如何解决这个问题。

因为我不希望放入某些角色,所以我放了一个别的,但结果不是我想要的。我期待文本是“无”,例如我输入z(我不想要的东西),但它变成“zNONE”。如何删除“zNONE”的“z”部分

我认为VK_SPACE和32是相同的,但无法弄清楚如何看到NUMPAD。

谢谢。抱歉迟到的回复

答案
  1. 创建一个新的VCL项目。
  2. 在表格上放下一个TEdit控件并清除其Text属性。
  3. 在它的OnKeyPress事件处理程序中,写 procedure TForm5.Edit1KeyPress(Sender: TObject; var Key: Char); begin if Sender is TEdit then case Key of chr(VK_SPACE): begin TEdit(Sender).SelText := ' SPACE '; Key := #0; end; end; end;
  4. 运行该项目。

我将把它作为练习让你研究实施的细节。

只是提醒一句:TEdit(Sender)类型转换本质上是不安全的:如果Sender不是TEdit(或者你知道的东西完全兼容),你就有一个主要的错误。这就是为什么这个代码低于if Sender is TEdit then有条件的原因;这使它非常安全。

另一答案

使用KeyDown事件而不是KeyPress事件。然后,您可以使用以下代码获得按下的键的文本表示:

uses Vcl.Menus;

procedure TForm1.Edit1KeyDown(
  Sender: TObject; var Key: Word; Shift: TShiftState);
begin
    TEdit(Sender).Text := ShortCutToText(ShortCut(Key, Shift));
    Key := 0;
end;

// Disable default behavior in other events
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  Key := #0;
end;

procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  Key := 0;
end;

以上是关于如何显示键入的键的名称?的主要内容,如果未能解决你的问题,请参考以下文章

GetKeyNameText 以大写形式返回名称

如何在没有目标c的键的情况下解析json第一个对象?

如何更改 mottie 虚拟键盘中自定义键的显示名称

根据对象中键的名称过滤对象数组[重复]

当您不知道键的名称时访问对象内部的数据

获取键/值 javascript 对象的键的最佳方法