Delphi中,如何让TFrame内的ENTER键功能等同于TAB键?
- 内容介绍
- 文章标签
- 相关推荐
本文共计390个文字,预计阅读时间需要2分钟。
我有一个框架和一些控件(编辑器、按钮等)。如何截断在框架控件上的任意位置按ENTER键并转换到TAB键(考虑SHIFT状态)?
下面是一些示例代码,用于处理框架上的消息,以便在按下Enter时能导航到下一个元素:pythondef handle_message(message): if message==Enter: if shift_state: move_to_next_element_with_shift() else: move_to_next_element() elif message==Tab: move_to_next_element() else: # Handle other messages pass
def move_to_next_element(): # 实现导航到下一个元素 pass
def move_to_next_element_with_shift(): # 实现带Shift的导航到下一个元素 pass
我有一个框架和一些控件(编辑,按钮等).如何拦截在帧控件上任意位置按ENTER键并转换为TAB键(考虑SHIFT状态)? 下面是一些示例代码,用于处理框架上的消息,以便在按下Enter时能够导航到下一个控件.请注意,此示例不会修改Enter键以成为Tab键.相反,它选择下一个控件并阻止进一步处理按键消息.另请注意,代码可能需要进一步调整.一个用于,如果任何控件实际需要处理Enter键,例如TMemo,则需要添加异常.其次,导航被包裹在帧中,即在最后一帧控制之后,第一帧控制被聚焦 – 不是对表格的控制而不是对帧的控制.对于这些,您可能希望为消息返回添加条件,如果您希望在某些条件下进行默认处理,只需调用inherited而不执行任何其他操作.
type TFrame2 = class(TFrame) ... protected procedure CMChildKey(var Message: TCMChildKey); message CM_CHILDKEY; end; .. procedure TFrame2.CMChildKey(var Message: TCMChildKey); begin if Message.CharCode = VK_RETURN then begin SelectNext(Screen.ActiveControl, not Bool(GetKeyState(VK_SHIFT) and $80), True); Message.Result := 1; end else inherited; end;
本文共计390个文字,预计阅读时间需要2分钟。
我有一个框架和一些控件(编辑器、按钮等)。如何截断在框架控件上的任意位置按ENTER键并转换到TAB键(考虑SHIFT状态)?
下面是一些示例代码,用于处理框架上的消息,以便在按下Enter时能导航到下一个元素:pythondef handle_message(message): if message==Enter: if shift_state: move_to_next_element_with_shift() else: move_to_next_element() elif message==Tab: move_to_next_element() else: # Handle other messages pass
def move_to_next_element(): # 实现导航到下一个元素 pass
def move_to_next_element_with_shift(): # 实现带Shift的导航到下一个元素 pass
我有一个框架和一些控件(编辑,按钮等).如何拦截在帧控件上任意位置按ENTER键并转换为TAB键(考虑SHIFT状态)? 下面是一些示例代码,用于处理框架上的消息,以便在按下Enter时能够导航到下一个控件.请注意,此示例不会修改Enter键以成为Tab键.相反,它选择下一个控件并阻止进一步处理按键消息.另请注意,代码可能需要进一步调整.一个用于,如果任何控件实际需要处理Enter键,例如TMemo,则需要添加异常.其次,导航被包裹在帧中,即在最后一帧控制之后,第一帧控制被聚焦 – 不是对表格的控制而不是对帧的控制.对于这些,您可能希望为消息返回添加条件,如果您希望在某些条件下进行默认处理,只需调用inherited而不执行任何其他操作.
type TFrame2 = class(TFrame) ... protected procedure CMChildKey(var Message: TCMChildKey); message CM_CHILDKEY; end; .. procedure TFrame2.CMChildKey(var Message: TCMChildKey); begin if Message.CharCode = VK_RETURN then begin SelectNext(Screen.ActiveControl, not Bool(GetKeyState(VK_SHIFT) and $80), True); Message.Result := 1; end else inherited; end;

