2012-11-19 1 views
4

J'ai un TEdit avec PasswordChar mis à * et je veux que le ballon standard "Caps Lock is On" apparaisse si le mode Caps Lock est activé. Cette bulle standard n'apparaît que lorsque l'éditeur obtient le focus ou lorsque le mode Caps Lock a été activé, alors que le focus était dans cet éditeur. Mon mot de passe éditeur est le premier contrôle ciblé de l'applicationComment forcer le ballon "Caps Lock is On" pour l'éditeur de mot de passe?

Ainsi, lorsque l'application commence avec Caps Lock mode précédemment sur, je ne peux pas voir de ballons jusqu'à ce que mon éditeur de mot de passe perdra le focus, puis sera à nouveau concentré. L'utilisateur a une chance de ne pas voir ce ballon dans la moitié des cas d'utilisation! Est-ce que je peux forcer ce ballon "Caps Lock is On" au démarrage de l'application sans passer le focus?

Répondre

4

La solution est d'appeler WM_KILLFOCUS et WM_SETFOCUS, cela forcera l'éditeur pour voir "Caps Lock est sur" ballon:

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; 
Questions connexes