如何强制“Caps Lock is On”气球进行密码编辑?

时间:2012-11-19 15:59:46

标签: delphi passwords editor delphi-xe balloon

我有一个TEditPasswordChar设置为*,如果Caps Lock模式启用,我希望标准的“Caps Lock is On”气球出现。该标准气球仅在编辑器获得焦点或已启用Caps Lock模式时出现,而焦点位于该编辑器中。

我的密码编辑器是应用程序的第一个集中控件。因此,当应用程序以Caps Lock模式以前开启时,我看不到任何气球,直到我的密码编辑器失去焦点然后再次聚焦。在一半的用例中,用户有机会看不到该气球!

我可以在应用程序启动时强制执行“Caps Lock is On”气球而不切换焦点吗?

1 个答案:

答案 0 :(得分:4)

解决方案是调用WM_KILLFOCUSWM_SETFOCUS,这会强制编辑器显示“Caps Lock is On”气球:

  if GetKeyState(VK_CAPITAL) and 1 <> 0 then
  begin
    if edtPassword.Focused then
    begin
      PostMessage(edtPassword.Handle, WM_KILLFOCUS, 0, 0);
      PostMessage(edtPassword.Handle, WM_SETFOCUS, 0, 0);
    end;
  end;