我正在尝试制作一个从键盘读取按键的应用程序。当我按下一个键时,程序会将其添加到一个数组中,然后我就可以执行我想要的操作。我不是在编辑中写作。我直接按下键盘上的按钮,因为我希望能够使用其他输入(例如阅读器)来模拟键盘等输入。现在我添加了一个组合框和单选按钮,将来我将用它们添加新的东西。添加组件后,我再次尝试了该应用程序,并且该程序不再读取按键,因为它尝试在组合框中写入。如果我按组合框外部或选择一个选项,则什么也不会发生,并且它会继续尝试在其中写入。如果我按下单选按钮,程序不再尝试在组合框中写入,但它仍然不会从键盘读取按键,可能是因为现在焦点位于单选按钮上。如果我将组合框属性设置为
enabled := false
并且不按单选按钮,那么它会再次起作用。我认为问题在于该程序将“焦点”放在组件上。我研究了组件的属性,但没有看到任何可以提供帮助的属性。有没有办法通过组件上的代码或属性使组件不再是程序的焦点。我使用 TRadioButton、TComboBox 或 TADVComboBox。
我使用FormKeyDown事件来获取关键信息。过程
TfrmConfigCheck.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
end;
您需要将表单上的
KeyPreview
属性设置为 True
。
如果
KeyPreview
设置为 False
,则当某些组件(例如 onKeyDown
)获得焦点时,不会调用表单的 TComboBox
事件。
但是,如果将
KeyPreview
属性设置为 True
,则每次按下按键时都会调用表单的 onKeyDown
事件,无论表单上聚焦于哪个组件。
关于评论中的其他问题,您不能将
TComboBox
设置为 readonly
,但您可以将 style
属性设置为 csDropDownList
,这是一种 readonly
模式,因为用户无法输入任何详细信息