How to force the "Caps Lock is On" balloon for password editor?

balloon, delphi, delphi-xe, editor, passwords

Solution

The solution is to call `WM_KILLFOCUS` and `WM_SETFOCUS`, this will force the editor to show "Caps Lock is On" balloon:

  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;

Problem

I have a `TEdit` with `PasswordChar` set to `*` and I want the standard "Caps Lock is On" balloon to appear if the `Caps Lock` mode is on. That standard balloon appearing only when the editor is getting focus or when `Caps Lock` mode has been turned on, while the focus was in that editor. My password editor is the first focused control of the application. So, when the application starts with `Caps Lock` mode previously on, I cannot see any balloons until my password editor will lose focus and then will be focused again. The user has a chance to not see that balloon in half of the use cases! Can I force this "Caps Lock is On" balloon at application startup without switching focus?

Original source