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

  1. #21
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 444
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 444
    Points : 5 864
    Points
    5 864
    Par défaut
    salut

    un peu complexe le bascule
    moi je l'aurait plutot fait comme cela

    Code : 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
     
    procedure Bascule(unBouton : tButton);
    var
      Evt : TNotifyEvent;
    begin
      Evt := unBouton.OnClick;
      unBouton.OnClick := nil;
      unBouton.enabled := not(unBouton.enabled);
      unBouton.Refresh;
      unBouton.OnClick := Evt;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Bascule(Button1);
    end;
    @+ Phil

  2. #22
    Membre expert
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Points : 3 575
    Points
    3 575
    Par défaut
    Il y a juste un truc que je n'ai pas tout a fait compris dans le problème.

    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.

    Sinon, si c'est la procédure qui est lancée une 2eme fois, en général c'est désagréable mais souvent, pas de plantage. (mais je connais pas le contexte)

    Sinon, dans les méthodes employées, toutes les méthodes sont bonnes
    - délier l'evt du bouton
    - poser une variable style 'déjà entrée dans la proc' -> avantage de pseudo désactiver l'evenement quelquesoit la méthode d'appel.
    - disabler le bouton (et l'enabler dans un finaly)

    Dans ce cas précis, pour ma part, une préférence pour le disabled du bouton: c'est en meme temps logique au niveau utilisateur (pas le droit de lancer une 2eme fois le traitement tant que le 1er n'est pas fini) et un verrou pour le code, à condition que cet évenement ne soit pas appelé manuellement autre part.

  3. #23
    Membre régulier 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
    Points : 70
    Points
    70
    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 !!!!!

  4. #24
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Citation Envoyé par philnext
    Si c'est juste le doubleclick qui gène, une autre solution c'est : plutôt que de mettre des boutons, mettre un composant qui gère le OnDblClick (style Tpanel) avec un look de bouton et tu fais pointer ton OnDblClick sur le OnClick.
    Je pense que dans le cas présent, Tchaill39 a fait un p'tit abus de langage dans le titre en utilisant "double-clique" D'où les guillemets et que par conséquent, il veut éviter des "multi-clicks" qui ne sont pas obligatoirement des clicks suffisamment rapprochés pour être interprêtés comme double-click...

    Sinon, une autre piste qui n'a pas été abordée...

    Créer ton propre bouton qui gère l'événement click.... pour éventuellement avoir des nouveaux événements (privés ou publics en fonction de tes besoins) du type OnDebutClick, OnFinClick où tu pourrrais gérer l'état de ton bouton de façon générique... et avoir simplement tes méthodes métiers sur l'événement OnClick... Et puis donc, ensuite, remplacer tes boutons par celui que tu aurais créé...

    Non ? vous en pensez quoi ?

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

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    @ Whiler : Oui bien sûr je suis d'accord avec toi, je répondais simplement 'à la question de base'. En fait c'est un simple problème d'organisation d'application.

  6. #26
    Membre éclairé
    Avatar de Whiler
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 298
    Points : 664
    Points
    664
    Par défaut
    Citation Envoyé par philnext
    En fait c'est un simple problème d'organisation d'application.
    @ philnext : +1
    @ philnext : et créer un composant... t'en penses quoi ?

  7. #27
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 292
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 292
    Points : 1 944
    Points
    1 944
    Par défaut
    Le thread suivant est intéressant pour voir le problème(et à but pédagogique ;-) ):
    http://www.developpez.net/forums/sho...ghlight=label1

  8. #28
    Membre régulier 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
    Points : 70
    Points
    70
    Par défaut
    L'idée de surcharger le composant "Bouton" m'est venue également à l'idée,
    mais je ne vois pas comment, dans mon composant, détecter la fin du futur code qui sera codé sous l'événement onclick !!!!



    Tchaill39 a fait un p'tit abus de langage dans le titre en utilisant "double-clique" D'où les guillemets et que par conséquent, il veut éviter des "multi-clicks"
    c'est vrai j'avoue..... : petit abus de language

  9. #29
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    @ philnext : et créer un composant... t'en penses quoi ?
    C'est une bonne idée à condition, pour le pb présent, de pouvoir créer des 'évènements' sur un évènement : ici quand on rentre puis quand on sort du OnClick, je ne sais pas si c'est possible.
    @Tchaill39 : pour l'instant tu as combien de boutons et de procédures lancées (à la louche) ?

  10. #30
    Membre régulier 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
    Points : 70
    Points
    70
    Par défaut
    Ben en fait c'est encore un peu plus compliqué .... désolé.

    En fait mes boutons sont liés à des actions qui elles-meme appellent des procédure. Ainsi les actions peuvent être lancer de plusieurs endroits.
    A la louche, j'ai au moins 200 actions

    J'aurais trouvé une petite parade qui serait de surcharger le TAction de dévier le onclick et de gérer moi meme le fait que l'action n'est as dispo

    Le problème c'est que les actions sont dans des TActionList et que pour simplifier le tout les bouton, les menus et tous ces objets ont comme propriété une action de type ........TAction En gros fo que je surcharge tout mes composants ......

  11. #31
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Tchaill39
    En fait mes boutons sont liés à des actions qui elles-meme appellent des procédure. Ainsi les actions peuvent être lancer de plusieurs endroits.
    A la louche, j'ai au moins 200 actions
    Ben je dirais, dans le même esprit que pour OnClick d'un TBouton, tu peux rendre ton action disabled:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.Action1Execute(Sender: TObject);
    begin
      TAction(Sender).Enabled := False;
     
      // Appel de ta procédure de traitement
     
      TAction(Sender).Enabled := True;
    end;
    Ainsi tous les contrôles liés à ton action seront grisés (Bouton, items de menu de popup, ...).

    Bon évidement puisque tu as 200 actions....

    @+ Claudius

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, 16h01
  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, 15h01
  3. Réponses: 1
    Dernier message: 30/04/2009, 18h19
  4. Double affichage OpenGL dans une meme fenetre
    Par greghass dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/11/2006, 22h57

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