如何显示键入的键的名称?
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。
谢谢。抱歉迟到的回复
答案
- 创建一个新的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
有条件的原因;这使它非常安全。
另一答案
使用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;
以上是关于如何显示键入的键的名称?的主要内容,如果未能解决你的问题,请参考以下文章