我想在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/