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étecter le double-clic sur un Panel


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut Détecter le double-clic sur un Panel
    Bonjour

    Je me demande s'il est possible sur un Panel de détecter le double-clic, dans le cas où la méthode du simple clic est également affectée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TForm1.pnlTestClick(Sender: TObject);
    begin
      ShowMessage('Hello = Simple clic !');
    end;
     
    procedure TForm1.pnlTestDblClick(Sender: TObject);
    begin
      ShowMessage('Hello = DOUBLE clic, snifff personne ne me verra...');
    end;
    Possible de détecter le double-clic ?

    C'est vraiment une question de débutant

    Je suppose que ce compo est un peu bâti comme le TImage et que son clic tourne autour du double-clic... ?

    Merci de vos lumières.

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    un boolean...

    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
     
     private
        { Déclarations privées }
        dbclick:boolean;
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
     dbclick:=true;
    end;
     
    procedure TForm1.Panel1Click(Sender: TObject);
    begin
     dbclick:=not dbclick ;
     if not dbclick  then    ShowMessage('Hello = Simple clic !');
    end;
     
    procedure TForm1.Panel1DblClick(Sender: TObject);
    begin
     if dbclick then ShowMessage('Hello = DOUBLE clic, snifff personne ne me verra...');
    end;
     
    end.

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Excuse, il faut encore compléter car pour deux clicks décalés dans le temps par exemple ça ne marche pas (normal) à cogiter...
    C'est faisable, en réfléchissant un peu...

  4. #4
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    C'est vrai que ce n'est pas simple car même en rajoutant :
    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
     
    procedure TForm1.Panel1Click(Sender: TObject);
    begin
     if not dbclick  then
     begin
      ShowMessage('Hello = Simple clic !');
      dbclick:=true;
     end;
    dbclick:=not dbclick ;
    end;
     
    procedure TForm1.Panel1DblClick(Sender: TObject);
    begin
     if dbclick then ShowMessage('Hello = DOUBLE clic, snifff personne ne me verra...');
    end;
    dbclick est à false par défaut au départ...(pas besoin de rajouter oncreate...

    la procedure panel1click est parcourue même pour un double click...


    pas cool lol

  5. #5
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Archimède, je te remercie de te pencher sur ce souci, je suis étonné de n'avoir lu nulle part que personne n'ai soulevé 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
    17
    18
    procedure TForm1.pnlTestMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    begin
      If NOT (ssDouble in Shift)  Then
     begin
       ShowMessage('SIMPLE-clic');
       exit; //  halt;
     end;
     
     
     If (ssDouble in Shift)  Then
     begin
       ShowMessage('Double-clic');
       exit;
     end;
     
     //else  ShowMessage('SIMPLE-clic')
    end;
    Super curieux, car même en tentant de ruser comme ci-dessus, ça foire lamentablement.

    Qui pensait que cette particularité relevait du niveau débutant

    @+

  6. #6
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    oui, c'est bien vu à toi d'avoir soulevé ce truc là !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 629
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 629
    Par défaut
    Bonjour à toutes et à tous,

    @ Droïde Système7

    Voici ma proposition plus légère et sans timer :

    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Procedure DoubleClick1(Sender: TObject);
        Procedure OnClick1(Sender: TObject);   
     procedure FormCreate(Sender: TObject); // A ajouter
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    panel1.ondblClick := DoubleClick1;
    panel1.onClick := OnClick1;
    end;
    
    Procedure TForm1.DoubleClick1(Sender: TObject); // Procédure ajoutée
    begin
    
     panel1.ondblClick := DoubleClick1;
     panel1.caption := 'C''est Ok pour un double click';
    
    end;
    
    Procedure TForm1.OnClick1(Sender: TObject); // Procédure ajoutée
    begin
    
     panel1.onClick := OnClick1;
     panel1.caption := 'C''est Ok pour un seul click';
    
    end;
    
    end.
    @+,

    Cincap

  8. #8
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Hello Cincap

    Heuu.... oui mais si tu as bien tout lu, ton code ne fonctionne pas avec une fenêtre modale.

    Ajoute un ShowMessage au lieu de placer une indication dans le caption du panel

    En lisant plus haut, il est bien indiqué qu'en tous les cas, le SIMPLE clic passe en premier.

    Alors, si tu ajoutes des ShowMessages... ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 629
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 629
    Par défaut
    @ Droïde Système7

    Je me suis basé uniquement sur ta question par défaut sans vraiment vérifier les réponses.

    Je me demande s'il est possible sur un Panel de détecter le double-clic, dans le cas où la méthode du simple clic est également affectée :
    Voila, voila.

    Au fait, on éliminer la procédure Onclick et utiliser ce code :

    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
    41
    42
    43
    44
    45
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
           Procedure DoubleClick1(Sender: TObject);
     
        procedure FormCreate(Sender: TObject); // A ajouter
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    panel1.ondblClick := DoubleClick1;
     
    end;
     
    Procedure TForm1.DoubleClick1(Sender: TObject); // Procédure ajoutée
    begin
     
     panel1.ondblClick := DoubleClick1;
     panel1.caption := 'C''est Ok pour un double click';
     showmessage('bien');
     
    end;
     
     
    end.
    @+,

    cincap

  10. #10
    Membre Expert
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 288
    Par défaut
    Cincap, bref, tu as lu en travers

    Mais je suis certain que tu peux nous montrer une autre méthode : valable avec un ShowMessage

    @+

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 629
    Détails du profil
    Informations personnelles :
    Âge : 72
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 629
    Par défaut
    Bonjour à toutes et à tous,

    @ Droïde Système7,

    Voici donc la méthode avec un showmessage :

    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
    41
    42
    43
    44
    45
    46
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ExtCtrls;
     
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
     
        Procedure DoubleClick1(Sender: TObject);// A ajouter
     
        procedure FormCreate(Sender: TObject);
     
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    panel1.ondblClick := DoubleClick1;
     
    end;
     
    Procedure TForm1.DoubleClick1(Sender: TObject); // Procédure ajoutée
    begin
     
     panel1.ondblClick := DoubleClick1;
     panel1.caption := 'C''est Ok pour un double click';
     showmessage('Et maintenant tu me vois !');
     
    end;
     
    end.
    Citation, il est vrai que si tu places aussi un message dans le onclick de ton panel, c'est ce message qui sera prioritaire.

    @+,

    Cincap

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

Discussions similaires

  1. ouverture d'un programme par double clic sur un fichier
    Par zieg18 dans le forum Visual C++
    Réponses: 6
    Dernier message: 12/07/2006, 10h02
  2. Double clic sur une feuille de données
    Par louroulou dans le forum Access
    Réponses: 7
    Dernier message: 14/06/2006, 11h33
  3. Réponses: 5
    Dernier message: 08/06/2006, 16h11
  4. écoute de touches, de double clics sur un JTable
    Par Nicool dans le forum Composants
    Réponses: 7
    Dernier message: 06/06/2006, 12h52
  5. comment autoriser le double clic sur un champ desactivé ?
    Par linou dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 28/04/2005, 17h23

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