Roy*_*ver 2 navigation delphi user-interface tabs components
在我的应用程序中,我使用标签,我自己的组件,如Google Chrome排序.每个选项卡都引用一个资源管理器组件,因此它基本上是一个标签式浏览器/资源管理器.我的问题是我想用CTRL+ TAB和CTRL+ SHIFT+ TAB来导航标签.设置forms.KeyPreview无济于事,因为tab键是特殊键.我怎样才能以简单的方式添加对导航愿望的支持.如果需要,我可以修改组件.如果有帮助,我的组件基于TCustomControl.
亲切的问候Roy M Klever
选项卡,如箭头键,输入和转义是对话框导航中使用的特殊键.当控件想要接收这些键时,它必须通过响应WM_GETDLGCODE来指示.喜欢下面这段代码.然后,当按Tab键时,您将收到KeyDown事件.
procedure WMGetDlgCode(var Msg: TWMGetDlgCode); message WM_GETDLGCODE;
procedure TYourControl.WMGetDlgCode(var Msg: TWMGetDlgCode);
begin
inherited;
Msg.Result := Msg.Result or DLGC_WANTTAB;
end;
Run Code Online (Sandbox Code Playgroud)
PS:并确保您的控件具有焦点,或者您根本不会收到任何内容(如果CanFocus然后是SetFocus;在MouseDown中).
您可以管理组件中的 CM_DIALOGKEY 消息来拦截Ctrl+Tab和Ctrl+ Shift+ Tab。
procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
Run Code Online (Sandbox Code Playgroud)
检查这个样本
procedure TYourComponent.CMDialogKey(var Message: TCMDialogKey);
begin
if (Focused) and (Message.CharCode = VK_TAB) and (GetKeyState(VK_CONTROL) < 0) then
begin
if GetKeyState(VK_SHIFT) then
GoBackwardPage()//you must write this method
else
GoForwardPage()//you must write this method
Message.Result := 1;
end
else
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2771 次 |
| 最近记录: |