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

Composants FMX Delphi Discussion :

[XE7] OnClick et OnDblClick


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Par défaut [XE7] OnClick et OnDblClick
    Bonjour,

    Je viens de découvrir un phénomène bizarre, j'utilise un TImage avec l'événement OnDblClick() pour changer l'image à afficher, jusqu'à maintenant, pas de problème, cela fonctionne.

    Et puis j'ai décidé d'utiliser aussi l'événement OnClick() sur ce Timage pour faire autre chose et chose étonnante, l'événement OnDblClick n'est plus utilisé, lorsque je fais un double click sur le TImage, c'est l'évènement OnClick qui est généré ...

    Je ne vois pas d'ou cela peut provenir, que je fasse un click ou un double click, c'est toujours l'événement OnClick qui est généré et plus du tout le OnBblClick....

    ( je précise que le HitTest du Timage est à True )

  2. #2
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    XE7 et Firemonkey ne me pose aucun problème de ce genre avec le code suivant:

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    unit Unit2;
     
    interface
     
    uses
      System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
      FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Layouts,
      FMX.Memo, FMX.Objects;
     
    type
      TForm2 = class(TForm)
        Image1: TImage;
        Memo1: TMemo;
        procedure Image1DblClick(Sender: TObject);
        procedure Image1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.fmx}
     
    procedure TForm2.Image1Click(Sender: TObject);
    begin
      Memo1.Lines.Add('Image1Click');
    end;
     
    procedure TForm2.Image1DblClick(Sender: TObject);
    begin
      Memo1.Lines.Add('Image1DblClick');
    end;
     
    end.
    le double-click affiche

    Image1Click
    Image1DblClick

  3. #3
    Membre émérite
    Avatar de free07
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 941
    Par défaut
    Salut,

    J'avais fait l'essai avec juste une image sur une fiche et en affichant un message sur chacun des événements et j'avais le même problème.

    Et on le voit aussi dans ton exemple, sur un double click il génère l'évenement OnClick(), puis l'événement OnDblClick()

    Pourquoi ne génére t'il pas seulement l'événement OnDblClick() ?

  4. #4
    Membre Expert

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

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Parce qu'un double clic, ce sont deux clics d'affilée dans un laps de temps donné. Pour le gérer, il n'y a deux solutions:
    - tu retardes chaque clic, du laps de temps pour détecter un double clic (temps donné par le système d'exploitation). Ce qui peut être très problématique en fonction de ce délai, en terme de réactivité.
    - tu fais un clic, puis un double clic. C'est ce qui est fait.

    Si tu veux le comportement 1, c'est à toi de le gérer avec un timer:
    - tout dans le OnClick. Tu cliques, si le timer est actif, c'est un doucle clic, sinon tu réactive le timer. Si le timer atteint sa limite tu le désactives et tu fais l'action correspondant au clic simple.

  5. #5
    Membre Expert

    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2007
    Messages
    3 530
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 530
    Par défaut
    Je ne vois pas d'ou cela peut provenir, que je fasse un click ou un double click, c'est toujours l'événement OnClick qui est généré et plus du tout le OnBblClick....
    La phrase indiquait que le double-clic ne se déclenchait plus.
    Mon exemple démontrait le contraire.

    Comme le dit Linkin, un double-clic est une suite de 2 clic. Normal que OnClick soit déclenché aussi .
    Si le fait de coder le double clic doit désactiver le clic simple, on peut faire un truc dans le genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TForm1.Image1Click(Sender: TObject);
    begin
      if not Assigned(Image1.OnClick)  then
       memo1.Lines.Add('onclic');
    end;
     
    procedure TForm1.Image1DblClick(Sender: TObject);
    begin
      memo1.Lines.Add('ondoubleclic');
    end;

  6. #6
    Membre Expert

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

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Le double clic ne se déclenchait plus car il affichait un message (ShowMessage), le deuxième click n'était pas sur le bouton, mais sur le message .

Discussions similaires

  1. Réponses: 7
    Dernier message: 09/01/2012, 16h47
  2. Réponses: 5
    Dernier message: 07/07/2011, 09h39
  3. Evenement onclick et ondblclick independant
    Par seb0634 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/10/2007, 13h34
  4. Modification de l'évènement OnClick
    Par MrJéjé dans le forum C++Builder
    Réponses: 9
    Dernier message: 22/08/2002, 12h52
  5. Un Sender peut-il s'auto-détruire lors d'un onClick?
    Par Flo. dans le forum C++Builder
    Réponses: 2
    Dernier message: 17/07/2002, 10h31

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