Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi vcl组合框不';不要总是表现出它有焦点_Delphi - Fatal编程技术网

Delphi vcl组合框不';不要总是表现出它有焦点

Delphi vcl组合框不';不要总是表现出它有焦点,delphi,Delphi,当我从另一个控件切换到组合框时,它会显示文本周围有虚线的框,但当我以编程方式将控件设置为活动时,它不会显示相同的焦点指示器 这种行为有解决办法吗 我有Delphi XE6 MCVE 启动应用程序,左键单击按钮1,调用 ComboBox1.SetFocus; 请注意,未绘制焦点矩形,但组合框具有焦点,如下所示: 按键盘上的向上箭头或向下箭头。组合项更改,现在焦点矩形变为可见。 显示焦点矩形后,鼠标单击按钮1后,也会在组合框上绘制该矩形。因此,若要重复此问题,请重新启动应用程序。若要使焦点

当我从另一个控件切换到组合框时,它会显示文本周围有虚线的框,但当我以编程方式将控件设置为活动时,它不会显示相同的焦点指示器

这种行为有解决办法吗

我有Delphi XE6


MCVE

启动应用程序,左键单击
按钮1
,调用

  ComboBox1.SetFocus;
请注意,未绘制焦点矩形,但组合框具有焦点,如下所示: 按键盘上的向上箭头或向下箭头。组合项更改,现在焦点矩形变为可见。
显示焦点矩形后,鼠标单击按钮1后,也会在组合框上绘制该矩形。因此,若要重复此问题,请重新启动应用程序。

若要使焦点矩形显示在组合框上,以编程方式设置焦点时,可以使用以下代码:

ComboBox.SetFocus; 
ComboBox.Perform(WM_SYSKEYDOWN, VK_TAB, 0); 

要使焦点矩形显示在组合框上,以编程方式设置焦点时,可以使用以下代码:

ComboBox.SetFocus; 
ComboBox.Perform(WM_SYSKEYDOWN, VK_TAB, 0); 

这是通过操作系统的设计,防止用户不使用键盘时屏幕上出现混乱。是对原因的彻底解释。并解释了该机制的工作原理

您可以发送以更改窗口(及其子窗口,请参见文档)的状态

上面将更新组合框的UI状态,就像需要键盘提示一样

您不必在焦点切换时发送消息,例如,您可以在表单创建时发送消息。您还可以选择将消息发送到父窗体,以使所有控件的行为一致,并可以在WParam的高位字中包含
UISF\u hideacel
,以同时显示带下划线的加速器字符


请注意,用户已经可以选择随时按系统显示键盘指示器。在Windows 7中,该设置位于“控制面板”、“轻松访问中心”、“使键盘更易于使用”、“使键盘快捷键更易于使用”、“在键盘快捷键和快捷键下面加下划线”

这是操作系统的设计,防止用户不使用键盘时屏幕上出现混乱。是对原因的彻底解释。并解释了该机制的工作原理

您可以发送以更改窗口(及其子窗口,请参见文档)的状态

上面将更新组合框的UI状态,就像需要键盘提示一样

您不必在焦点切换时发送消息,例如,您可以在表单创建时发送消息。您还可以选择将消息发送到父窗体,以使所有控件的行为一致,并可以在WParam的高位字中包含
UISF\u hideacel
,以同时显示带下划线的加速器字符


请注意,用户已经可以选择随时按系统显示键盘指示器。在Windows 7中,该设置位于“控制面板”、“轻松访问中心”、“使键盘更易于使用”、“使键盘快捷键更易于使用”、“在键盘快捷键和快捷键下面加下划线”

请显示“当我以编程方式将控件设置为活动状态时”,您是如何做到这一点的?我们能看看你的代码吗?
ComboBox.SetFocus?如果使用键盘加速器,将绘制焦点矩形。操作系统就是这样工作的。运行记事本,打开文件,点击tab一次,文档类型按钮有焦点矩形。关闭对话框,再次打开文件,用鼠标点击“文件类型”组合键,不绘制焦点矩形。请显示“当我以编程方式将控件设置为活动状态时”,您是如何做到这一点的?我们能看看你的代码吗?
ComboBox.SetFocus?如果使用键盘加速器,将绘制焦点矩形。操作系统就是这样工作的。运行记事本,打开文件,点击tab一次,文档类型按钮有焦点矩形。关闭对话框,再次打开文件,用鼠标点击文件类型组合键,不绘制焦点矩形。
ComboBox1.Perform(WM_UPDATEUISTATE, MakeWParam(UIS_CLEAR, UISF_HIDEFOCUS), 0);