gpt4 book ai didi

delphi - vcl组合框并不总是显示它有焦点

转载 作者:行者123 更新时间:2023-12-02 17:53:21 25 4
gpt4 key购买 nike

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

是否有解决此行为的方法?

我有德尔福XE6

<小时/>

MCVE

unit Unit27;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls;

type
TForm27 = class(TForm)
Edit1: TEdit;
Button1: TButton;
ComboBox1: TComboBox;
procedure Button1Click(Sender: TObject);
private
public
end;

var
Form27: TForm27;

implementation
{$R *.dfm}

procedure TForm27.Button1Click(Sender: TObject);
begin
ComboBox1.SetFocus;
end;

end.

object Form27: TForm27
Left = 0
Top = 0
Caption = 'Form27'
ClientHeight = 90
ClientWidth = 246
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Edit1: TEdit
Left = 16
Top = 8
Width = 121
Height = 21
TabOrder = 0
Text = 'Edit1'
end
object Button1: TButton
Left = 152
Top = 8
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 1
OnClick = Button1Click
end
object ComboBox1: TComboBox
Left = 16
Top = 39
Width = 145
Height = 21
Style = csDropDownList
ItemIndex = 2
TabOrder = 2
Text = '2'
Items.Strings = (
'0'
'1'
'2'
'3')
end
end

enter image description here

启动应用程序并左键单击 Button1,这将调用

  ComboBox1.SetFocus;

请注意,没有绘制焦点矩形,但组合具有焦点,如下所示:按键盘向上箭头或向下箭头。组合项发生变化,现在焦点矩形变得可见。显示焦点矩形一次后,在鼠标单击 Button1 后也会将其绘制在组合上。因此,要重复出现该问题,请重新启动应用程序。

最佳答案

这是操作系统设计的,可防止用户不使用键盘时屏幕上出现困惑。 Here是对原因的彻底解释。和here是对该机制如何工作的解释。

您可以发送WM_UPDATEUISTATE更改窗口(及其子窗口,根据文档)的状态。

ComboBox1.Perform(WM_UPDATEUISTATE, MakeWParam(UIS_CLEAR, UISF_HIDEFOCUS), 0);

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

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

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

关于delphi - vcl组合框并不总是显示它有焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36154126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com