delphi - 如何在TFrame中实现OnKeyDown事件

标签 delphi events frames keyevent

为了解决我们系统中的一些问题,我需要在框架(TFrame)中实现OnKeyDownOnKeyPress事件。目前做了一个姑息解决方案,但它非常丑陋并且存在任何问题。

该过程大致如下:

1) 我在继承自 TFrame 的基类中创建了事件 OnKeyDownOnKeyPress

2) 在基于TForm的标准表单中,实现了拦截执行键的控件。因此,此过程首先执行框架上的关键事件,然后执行表单上的关键事件。

我必须这样做,因为我希望 OnKeyDown 事件在框架中之前执行,在窗体上之后执行。实现工作正常,但我会考虑更好的代码。

谁能提出更好的解决方案?有没有更优雅的方法来解决这个问题?

最佳答案

试试这个。不要创建 TFrame 后代,而是在框架中创建 KeyDown 和 KeyPress 过程,例如

procedure TFrame2.KeyDown(var Key: Word; Shift: TShiftState);
begin
  Memo1.Lines.Add('KeyDown: '+IntToStr(Key));
end;

procedure TFrame2.KeyPress(var Key: Char);
begin
  Memo1.Lines.Add('KeyPress: '+IntToStr(ord(Key)));
end;

然后从表单的 OnKeyDown 和 OnKeyPress 中调用它们,例如

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Frame21.KeyDown(Key,Shift);
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
  Frame21.KeyPress(Key);
end;

关于delphi - 如何在TFrame中实现OnKeyDown事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259547/

相关文章:

Delphi - 如何重新启用调试器异常通知?

javascript - JS如何让函数只运行一次

java - 在 Java、Netbeans 中更改框架

delphi - Delphi 应用程序问题中的帧行为

html - 页面在新选项卡中打开,而不是在左框架中打开

delphi - 为什么 AlphaBlend 总是返回 false(在 Canvas 上绘图)?

c - 如何将 C union 转换为 delphi?

Delphi XE10.1 DataSnap客户端错误 "SetConnectTimeOut"

c# - 如何在自定义用户控件上创建点击事件?

amazon-web-services - s3api put-bucket-notification-configuration 删除现有事件