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 :

Désactiver le "double-click" dans une appli


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Tchaill39
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 110
    Par défaut Désactiver le "double-click" dans une appli
    Bonjour,

    Dans mon logiciel, j'ai des boutons qui déclenchent des action longues sur un "click". Mon problème est que l'utilisateur, s'il fait deux clicks rapides sur le meme bouton, fait planter l'application car on entre deux fois dans la meme procedure : BIZARRE!!!!!

    Quelqu'un a-il déjà rencontrer ce problème et comment le résoudre une fois pour toute, sans être obligé d'implémenter dans caque action déclenchée ?

  2. #2
    Membre émérite Avatar de PadawanDuDelphi
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2006
    Messages
    678
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Bâtiment

    Informations forums :
    Inscription : Août 2006
    Messages : 678
    Par défaut
    Salut,

    Corriger ton problème sans corriger chaque procedure responsable de ce problème, je ne sais pas si c'est possible.
    En revanche tu peux isoler les procédures longues et rajouter ces lignes de codes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var OldEvent: TNotifyEvent;
    begin
      OldEvent := TonButton.OnDblClick; 
      TonButton.OnDblClick := nil; 
    ....Ton code...
      TonButton.OnDblCLick := OldEvent;
    end;
    A+.

  3. #3
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Il me semble, pour ton pb plus cohérent de modifier le fonctionnement de l'appli. C'est à dire, d'empècher de lancer 2 fois la même procédure.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Par défaut
    N'est-il pas plus simple de faire en sorte que le 1er click sur le bouton considéré provoque immédiatement la neutralisation du bouton ? Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure form1.button1click(sender..);
    begin       button1.enabled:=false;
                  button1.Refresh; // pour prise en compte immédiate du false
                  puis instructions de lancement de l'action longue 
    end;
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    => Gilbert.
    Oui en fait, c'est ce que je sous entendais.
    Ne pas oublier de le remettre en enable à la fin....

  6. #6
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    ou meme déplacé ton traitement dans mouseup

  7. #7
    Membre confirmé Avatar de Tchaill39
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 110
    Par défaut
    Bon, si je résume, j'ai deux solutions :

    - soit je vais dans chaque procedure lancée par un click et j'insere un booleen qui empeche de rentrer plusieurs fois dedans : UN PEU CONTRAIGNANT

    - Soit je surcharge les le onclick de mes bouton en le rendant "enabled" le temps que l'action qu'il contienne se finisse. Mais comment est-ce possible de déterminer la fin de l'action Onclick?

  8. #8
    Membre confirmé Avatar de Tchaill39
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 110
    Par défaut
    Ton traitement long lance t-il un autre thread ?

    Car dans ce cas, il peut effectivement y avoir ré-entrance, c'est à dire, que la procédure est executée une 2eme fois, alors qu'elle n'est pas encore terminée dans sa 1ere version, ce qui peut souvent impliquer un plantage.
    C'est exactement ce que je constate !!!!!

Discussions similaires

  1. Click droit dans une TextBox
    Par BRUNO71 dans le forum Macros et VBA Excel
    Réponses: 19
    Dernier message: 17/01/2019, 15h01
  2. [XL-2007] Double condition If dans une boucle for
    Par luko6 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 10/11/2009, 14h01
  3. Réponses: 1
    Dernier message: 30/04/2009, 17h19
  4. Double affichage OpenGL dans une meme fenetre
    Par greghass dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/11/2006, 21h57

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