IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

Le message Windows "La touche Verr. Maj. est activée" se multiplie


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2006
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 978
    Points : 1 401
    Points
    1 401
    Par défaut Le message Windows "La touche Verr. Maj. est activée" se multiplie
    Bonjour,
    j'ai une appli, dans laquelle je change le caractère qui cache le mot de passe d'un TEdit avec un TTimer et lorsque je tape un mot de passe avec des Maj, je me retrouve avec ce message Windows qui se multiplie jusqu’à saturer les ressources PC

    Nom : bug_maj.png
Affichages : 132
Taille : 16,6 Ko

    Ça vient de Windows ? On peut l'empêcher d'apparaitre ou y a-t-il y a un moyen d'effacer les anciens messages ? J'ai besoin de votre aide d'expert s'il vous plait.

    J'avais développé ça sur XP à une époque où Windows ne nous avertissait pas pour les Majuscules…

    Merci d'avance pour votre aide.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2007
    Messages
    14 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : janvier 2007
    Messages : 14 100
    Points : 38 174
    Points
    38 174
    Billets dans le blog
    59
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    je change le caractère qui cache le mot de passe d'un TEdit avec un TTimer
    Mais pourquoi alors qu'il y a une propriété passwordchar faite pour ça !?
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Tokyo, Rio, Sidney) ,D11 (Alexandria)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs Etats : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Ubuntu, Androïd

  3. #3
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2006
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 978
    Points : 1 401
    Points
    1 401
    Par défaut
    Oui c'est ce que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Procedure TMain.TimerHideTimer(Sender: TObject);
    Begin
      eData.PasswordChar := cCHARACTERS_TIMER_HIDE[Random(82)];
      eData.SelStart     := Length(eData.Text);
    End;
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 837
    Points : 23 250
    Points
    23 250
    Par défaut
    Suffit d'initialiser le PasswordChar une seule fois ... pourquoi mettre un truc aléatoire, suffit de mettre * et Windows le transforme en rond

    Même le InputQuery le gère avec une astuce, un caractère < 32 dans le prompt comme premier caractère provoque le * comme PasswordChar

    Et changer le SelStart dans un Timer, la vache, la saisie doit être infame, ça doit bouger le curseur au mauvais moment


    Modifier le PasswordChar provoque un EM_SETPASSWORDCHAR mais surtout un changement de style ES_PASSWORD, le contrôle est recréé à chaque fois
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 668
    Points : 28 194
    Points
    28 194
    Par défaut
    haha je connais ce bug

    je l'ai rencontré sur un composant TEdit dérivé qui contenant un bouton (comme un TButtonedEdit), lequel bouton était utilisé pour affiche le mot de passe - comme on a souvent maintenant.

    je crois que j'ai corrigé cela en modifiant le style Windows avant de changer PasswordChar

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
        var Style := GetWindowLong(EditPassword.Handle, GWL_STYLE) and (not ES_PASSWORD);
        SetWindowLong(EditPassword.Handle, GWL_STYLE, Style);
        EditPassword.PasswordChar := #0;
    sinon en effet la popup de warning apparait en boucle quand la touche CapsLock est activée, c'est donc bien un bug Windows
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 837
    Points : 23 250
    Points
    23 250
    Par défaut
    Est-ce un bug de Windows qu'un Bouton à l'intérieur d'un Contrôle provoque la destruction de ce Contrôle ?
    Pour ce cas, j'utilise un TSpeedButton à coté avec le Down et un ImageIndex qui affiche une image différente pour le mot pressé (visible) et relevé (masqué)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 668
    Points : 28 194
    Points
    28 194
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Est-ce un bug de Windows qu'un Bouton à l'intérieur d'un Contrôle provoque la destruction de ce Contrôle ?
    Pour ce cas, j'utilise un TSpeedButton à coté avec le Down et un ImageIndex qui affiche une image différente pour le mot pressé (visible) et relevé (masqué)
    en fait ça le fait aussi avec un SpeedButton (qui ne prend pas le focus contrairement à un TButton)

    on pourrait dire que le bug vient de ce que la popup de notification n'est pas détruite quand on recrée le Handle

    Nom : Presse-papiers-2.png
Affichages : 107
Taille : 14,8 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TForm1.SpeedButton1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      SetCaptureControl(SpeedButton1);
      Edit1.PasswordChar := #0;
    end;
     
    procedure TForm1.SpeedButton1MouseUp(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      Edit1.PasswordChar := '*';
      SetCaptureControl(nil);
    end;
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 837
    Points : 23 250
    Points
    23 250
    Par défaut
    Je n'ai pas ce comportement de répétition du Hint, je peux cliquer comme un fou, ça se comporte tout à fait normalement
    Et sinon, cela réaffiche le Hint au clic (OnEnter) mais dès que l'on tape au clavier, cela le cache

    Code dfm : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    object btnPasswordView: TSpeedButton
      Left = 2
      Top = 70
      Width = 23
      Height = 22
      AllowAllUp = True
      GroupIndex = 1
      Glyph.Data = {...}
      NumGlyphs = 4
      OnClick = btnPasswordViewClick
    end
    object edMotPasse: TEdit
      Left = 112
      Top = 71
      Width = 524
      Height = 21
      PasswordChar = '*'
      TabOrder = 2
    end

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    //------------------------------------------------------------------------------
    procedure TxxxConfigEditorLoginForm.btnPasswordViewClick(Sender: TObject);
    begin
      if btnPasswordView.Down then
        edMotPasse.PasswordChar := #0
      else
        edMotPasse.PasswordChar := '*';
    end;
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 668
    Points : 28 194
    Points
    28 194
    Par défaut
    Nom : GIF 08-09-2022 17-14-05.gif
Affichages : 80
Taille : 1,20 Mo
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 837
    Points : 23 250
    Points
    23 250
    Par défaut
    Amusant, dès que je déplace la fenêtre de login, cela ferme le hint ...
    Le SpeedButton est en mode Toggle Up/Down et j'utilise OnClick, c'est un mode "permanent", je n'ai pas cette réapparition du panneau au mauvais endroit.
    Le MouseDown/MouseUp, faut maintenir le bouton pour voir le mot de passe, je comprends l'idée mais cela semble pas ergonomique, je n'ai pas testé.
    Melanger les deux, c'est pas un bon test, faut soit l'un soit l'autre pas les deux à mon avis.


    Et le sujet initial traite d'un TTimer pour modifier PasswordChar de façon aléatoire, c'est donc encore un autre sujet, et là je ne pige pas du tout le but de faire ça.

    Par curiosité, ajoute un second TEdit
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    juillet 2006
    Messages
    12 837
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2006
    Messages : 12 837
    Points : 23 250
    Points
    23 250
    Par défaut
    Interessant, dans un projet neuf, même en mettant la fenêtre comme une seconde form modal, en bsDialog, en fsStayOnTop, avec le même CreateParams, je reproduis l'anomalie !
    Et je note que c'est le Hint lorsque l'on affiche le mot de passe qui reste affiché alors que le hint quand on cache le mot de passe se comporte normalement.

    Qu'est-ce que mon projet réel contient pour ne pas provoquer ce bug ?
    Intrigant, ça demande que je cherche un peu plus !
    J'ai déjà noté que je n'ai QUE le hint lorsque l'on cache le mot de passe, je n'ai pas de hint lorsque l'on affiche le mot de passe
    J'ai aussi un AutoSelect qui se produit lors que l'on affiche le mot de passe, alors que sur le projet Neuf, le PasswordChar n'impacte pas la sélection.

    J'ai trouvé !
    Mon TEdit est dans un TPanel, cela change le comportement du AutoSelect et aussi quand s'affiche le Hint !
    Paul Toth, met ton TEdit et TSpeedButton dans un même Panel pour voir
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  12. #12
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    8 668
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 8 668
    Points : 28 194
    Points
    28 194
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    J'ai trouvé !
    Mon TEdit est dans un TPanel, cela change le comportement du AutoSelect et aussi quand s'affiche le Hint !
    Paul Toth, met ton TEdit et TSpeedButton dans un même Panel pour voir
    En effet c'est délirant, il suffit de mettre le TEdit dans un TPanel (pas besoin d'y mettre le bouton) pour que ça fonctionne ^^
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  13. #13
    Membre expérimenté
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    août 2006
    Messages
    978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : août 2006
    Messages : 978
    Points : 1 401
    Points
    1 401
    Par défaut
    Tous d'abord merci pour votre aide, vos deux solutions fonctionne.

    Citation Envoyé par ShaiLeTroll Voir le message
    J'ai trouvé !
    Mon TEdit est dans un TPanel, cela change le comportement du AutoSelect et aussi quand s'affiche le Hint !
    Paul Toth, met ton TEdit et TSpeedButton dans un même Panel pour voir
    J'ai opté pour la solution du TPanel

    Citation Envoyé par ShaiLeTroll Voir le message
    Et le sujet initial traite d'un TTimer pour modifier PasswordChar de façon aléatoire, c'est donc encore un autre sujet, et là je ne pige pas du tout le but de faire ça.
    Bon j'aurais préférer le garder pour moi c'est bête mais il m'arrive souvent d'avoir quelqu'un à coté de moi lorsque je tape mon passe, du coup il se focalise sur les caractères qui change et j'ai presque à chaque fois "Euh sa écrit n'importe quoi" parce que bizarrement je me suis déjà fait remballé lorsque j'ai demandé à des clients envahissant de détourner le regard. C'est vrai quoi c'est privé les mots de passe moi je fixe pas les clients quand il tapent le leurs, un peu de respect.
    Il existe 3 sortes de gens: ceux qui savent compter et ceux qui ne savent pas.

  14. #14
    Membre expert Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    juin 2013
    Messages
    1 601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2013
    Messages : 1 601
    Points : 3 014
    Points
    3 014
    Par défaut
    Citation Envoyé par ouiouioui Voir le message
    Bon j'aurais préférer le garder pour moi c'est bête mais il m'arrive souvent d'avoir quelqu'un à coté de moi lorsque je tape mon passe, du coup il se focalise sur les caractères qui change et j'ai presque à chaque fois "Euh sa écrit n'importe quoi" parce que bizarrement je me suis déjà fait remballé lorsque j'ai demandé à des clients envahissant de détourner le regard. C'est vrai quoi c'est privé les mots de passe moi je fixe pas les clients quand il tapent le leurs, un peu de respect.
    tu peux mettre des "*" et un bouton d'affichage du mot de passe qui demande un CAPTCHA ou affiche n'importe quoi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] INFOBULLE "la touche Verr Maj est active"
    Par Bwafa dans le forum WinDev
    Réponses: 23
    Dernier message: 22/01/2018, 14h59
  2. [Textbox] Bulle Touche Verr. Maj active
    Par Invité dans le forum VB.NET
    Réponses: 4
    Dernier message: 22/08/2014, 22h47
  3. alert en javascript pour prévenir que la touche maj est activé
    Par limy9 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2011, 00h30
  4. Réponses: 8
    Dernier message: 01/10/2007, 16h19
  5. [D7] Simuler l'appui sur la touche VERR MAJ ??
    Par fredfred dans le forum Delphi
    Réponses: 8
    Dernier message: 14/06/2006, 15h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo