为了解决我们系统中的一些问题,我需要在框架(TFrame)中实现OnKeyDown
和OnKeyPress
事件。目前做了一个姑息解决方案,但它非常丑陋并且存在任何问题。
该过程大致如下:
1) 我在继承自 TFrame 的基类中创建了事件 OnKeyDown
和 OnKeyPress
。
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/