我想在TEdit中显示按下的键的名称。
例如,虽然专注于TEdit并且键入A将显示A
在相同的TEdit中。按下另一个按钮,如space酒吧,将显示SPACE
。
我不知道从哪里开始,我认为THOTKey是一个选项,但我无法输入我想要的空间。
发布于 2019-03-29 13:23:44
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
条件之下; 这使它非常安全。
发布于 2019-03-29 14:33:37
使用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;
https://stackoverflow.com/questions/-100008997
复制相似问题