我想在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”时,我期望文本为“ NONE”。如何删除“ zNONE”的“ z”部分

我发现VK_SPACE和32是相同的,但无法弄清楚如何查看NUMPAD。

谢谢。抱歉回复晚

最佳答案

创建一个新的VCL项目。
在窗体上放置一个TEdit控件,并清除其Text属性。
在其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;

运行项目。


我将其作为练习来研究实现的细节。

请注意:TEdit(Sender)类型转换本质上是不安全的:如果Sender不是TEdit(或者您知道完全兼容的东西),则可能会遇到重大错误。这就是为什么此代码位于if Sender is TEdit then条件之下的原因;这使其非常安全。

关于delphi - 如何显示键入键的名称?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55391717/

10-11 21:07