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 VCL Delphi Discussion :

Comment savoir si le bouton d'une fenêtre est enfoncé ?


Sujet :

Composants VCL Delphi

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Comment savoir si le bouton d'une fenêtre est enfoncé ?
    Bonjour, j'ai besoin de faire le test suivant :
    Je voudrais savoir si avec un test sous Delphi, il est possible de savoir si un bouton a été enfoncé, dans un programme quelconque.

    Par exemple, je prends calc.exe lancé, et avec mon prog sous delphi, je voudrais qu'il affiche un message par ex, si le bouton 9 est enfoncé.

    J'ai déjà testé la fonction EnumWindowsProc pour trouver la bonne fenêtre, mais je ne sais pas accéder aux boutons hérités.

    Merci

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 47
    Points
    47
    Par défaut
    Je pense que le minimum est de connaitre le handle du bouton à surveiller. Sans cela je ne pense pas que tu iras loin. Une fois ce handle connu, il faudrait voir du côté des hooks qui permettraient de catcher les messages destinés à ce bouton et d'y répondre comme tu le veux.

    C'est tout ce que je peux dire.

  3. #3
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Voici un code permettant de capturer la position absolue et l'état des boutons de la souris dans tous les programmes, et ceci sans hook.

    http://sub0.developpez.com/delphi/mouse.zip

    Utilise la fonction PtInRect pour savoir si le curseur de la souris se trouve dans l'espace du bouton. Il existe sûrement une fonction permettant d'obtenir des infos sur l'objet survolé par la souris (ControlAtPos, WindowFromPoint, etc...).

    Sinon, regarde cette source, elle devrait te permettre d'obtenir ce que tu veux, c'est-à-dire, soit la position et les dimensions du bouton, soit son handle...

    http://nono40.developpez.com/sources/source0061/


    Lien tout en bas à gauche de cette fenêtre

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut,

    et avec ca...

    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
    procedure TForm1.Timer1Timer(Sender: TObject);
    var
      p:Tpoint;
      h1:HWnd;
      t1:Array[0..255] of Char;
      t2:Array[0..255] of Char;
      g1:tagwndclassA;
    begin
     
      windows.GetCursorPos(p);
      Label1.Caption:=IntToStr(p.x);
      Label2.Caption:=IntToStr(p.y);
      h1:=Windows.WindowFromPoint(p);
      Windows.GetClassName(h1,t1,255);
      windows.GetWindowText(h1,t2,255);
      windows.GetClassInfo(h1,t1,g1);
     
      If T1='Button' then
       begin
        Label1.Caption:='Et un Bouton'+ ' '+t2;
       end
      else
        Label1.Caption:=' ' ;
    end;
    _________________
    Balises [CODE] rajoutées par Sub0

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 51
    Points : 47
    Points
    47
    Par défaut
    Chez moi ca marche à moitié. Disons que sur les boutons de la calculatrice cela fonctionne. Par contre si je mets des boutons sur une form de Delphi, RIEN : : :

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 62
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut,

    ho desoler et 1000 excuse...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    If T1='Button' then 
       begin 
        Label3.Caption:='Et un Bouton'+ ' '+t2; 
       end 
      else 
        Label3.Caption:=' ' ;
    _________________
    Balises [CODE] rajoutées par Sub0

  7. #7
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Citation Envoyé par jouaud bernard
    Salut,

    et avec ca...
    Je viens de tester ton code (et toi, l'as-tu testé ?)

    Ce n'est pas Button, mais TButton qui est retourné...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If t1='TButton' then ...

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    J'ai testé le programme de nono40, béton, même trop. Je n'arrive pas à trouver le bon bouton .
    Avec le source du timer, j'ai bien button.
    Je vais voir si je peux jouer avec les positions dans la fenêtre.
    Merci

Discussions similaires

  1. Comment savoir si une fenêtre est sélectionnée
    Par whitebird001 dans le forum MFC
    Réponses: 2
    Dernier message: 07/06/2008, 22h30
  2. Comment savoir si le champ d'une table est vide?
    Par CleeM dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/07/2007, 11h35
  3. Comment savoir si une fenêtre est maximisée ?
    Par Silverstone dans le forum Windows
    Réponses: 4
    Dernier message: 20/09/2006, 21h01
  4. Réponses: 28
    Dernier message: 29/07/2006, 16h04
  5. Réponses: 19
    Dernier message: 26/01/2005, 10h41

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