Delphi:避免运行时组件选择破折号

Delphi:避免运行时组件选择破折号,delphi,Delphi,如何避免TToggleSwitch控件的标题在单击时在其标题上显示选择破折号 我试过ActiveControl:=nil在单击事件之后,但单击时仍会显示选定内容一段时间 按钮文本周围的虚线用于标记使用选项卡选择选择按钮 因此,将TabStop属性设置为False将防止出现那些点划线 但请注意,这也会阻止任何人使用TAB键将焦点移动到此按钮,从而使用键盘按下/切换此按钮。您可以将插入器声明与WM_Queryistate的消息处理程序一起使用,如下所示: unit Unit1; interface

如何避免
TToggleSwitch
控件的标题在单击时在其标题上显示选择破折号

我试过
ActiveControl:=nil在单击事件之后,但单击时仍会显示选定内容一段时间


按钮文本周围的虚线用于标记使用选项卡选择选择按钮

因此,将
TabStop
属性设置为
False
将防止出现那些点划线


但请注意,这也会阻止任何人使用TAB键将焦点移动到此按钮,从而使用键盘按下/切换此按钮。

您可以将插入器声明与WM_Queryistate的消息处理程序一起使用,如下所示:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.WinXCtrls;

type
  TToggleSwitch = class(Vcl.WinXCtrls.TToggleSwitch)
  private
    procedure WMQueryUIState(var Msg: TMessage); message WM_QUERYUISTATE;
  end;

  TForm1 = class(TForm)
    ToggleSwitch1: TToggleSwitch;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TToggleSwitch }

procedure TToggleSwitch.WMQueryUIState(var Msg: TMessage);
begin
  Msg.Result := UISF_HIDEFOCUS;
end;

end.
可惜它没有属性。

这是一个焦点矩形,表示控件具有键盘焦点。这些视觉提示对于喜欢使用键盘而不是鼠标1的用户来说非常重要,比如我(速度更快,更符合人体工程学),以及在由于某种原因(确实发生了)无法使用指针设备的情况下

当我在切换开关中看到焦点矩形时,我知道该控件具有键盘焦点,我可以通过按空格键进行切换。如果没有这个长方形,我就不敢按空格键2。如果你试图在控件接收到键盘焦点后立即将焦点从控件上移开,你会使我无法在没有鼠标的情况下使用窗体

因此,这个矩形很重要。你不应该把美学放在功能和可访问性之前

如果我没记错的话,在WindowsXP中,微软意识到大多数人都不像我。相反,他们更喜欢使用鼠标,而且确实觉得焦点矩形和带下划线的字母很烦人。因此,他们选择隐藏这些东西,直到用户表示他想要使用键盘。例如,您可能已经注意到,只有按Alt键,对话框中的下划线字符才会出现

这是你能做到的。就我所见,
TToggleSwitch
控件默认情况下遵循这些规则,因此您不需要更改任何内容

似乎使用了相关的API来无条件地禁用焦点矩形,对此我强烈反对。如果我没有弄错的话,雷蒙德·陈已经在博客上写了这个话题。(也许)永远不要在专业软件中这样做


1对于键盘用户来说,表单中最重要的一点是,所有控件都只能使用键盘访问,而且使用起来很方便。例如,制表符顺序非常重要。按tab键应该将您从控件带到其右侧或下方的相邻控件,而不是在屏幕上乱跳。此外,键盘加速键(如
&Save
,或
&color:
)应始终存在,并且应始终在适当的位置设置
TButton.Default
TButton.Cancel
属性

这听起来像是在咆哮,但我每天都在忍受这些事情


2因为我不能确定这个切换开关控件是否是当前的焦点控件。我的意思是,有焦点和没有焦点看起来都一样!它可能是聚焦的,或者聚焦控件可能是屏幕上远处的某个按钮,或者其他一些控件也会由于没有绘制聚焦矩形而出现错误行为。另一个控件很可能是“不保存退出”按钮。

几天之内我想起了一个类似的问题。是你的吗?怎么搞的?顺便说一句,我们说的是哪个站台?不是我的。Windows将ShowStateCaption设置为False,并在其旁边使用一个TLabel?输入焦点和选项卡选择是两件不同的事情。虚线标记具有输入焦点的控件。您可以关闭选项卡选择,当单击“打开”时,控件仍然可以获得输入焦点,而现在键盘用户无法使用该应用程序。@AndreasRejbrand我猜您的意思是他们无法使用tab键切换到TToggleSwitch。另一种方法是修补Vcl.WinXCtrls单元,以便不显示焦点矩形drawn@Dave:您仍然可以对其进行制表,但您不知道何时到达控件,因为无论是否使用键盘焦点,它看起来都完全相同。因此,您必须进行制表和猜测,希望接收空格键消息的控件确实是这个控件。