2012-11-19 1 views
4

У меня есть TEdit с PasswordChar, установленным на *, и я хочу, чтобы на экране появился стандартный флажок «Caps Lock is On», если включен режим Caps Lock. Этот стандартный воздушный шар появляется только тогда, когда редактор получает фокус или когда включен режим Caps Lock, в то время как фокус находился в этом редакторе.Как заставить воздушный шар «Caps Lock is On» для редактора паролей?

Мой редактор паролей - это первый сфокусированный контроль приложения. Итак, когда приложение начинается с Caps Lock режиме , ранее, я не вижу никаких воздушных шаров, пока мой редактор паролей не потеряет фокус, а затем снова сфокусируется. У пользователя есть шанс не видеть этот баллон в половине случаев использования!

Могу ли я заставлять этот баллон «Caps Lock is On» при запуске приложения без переключения фокуса?

ответ

4

Решение назвать WM_KILLFOCUS и WM_SETFOCUS, это заставит редактор, чтобы показать «Caps Lock Вкл» воздушный шар:

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;