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

C++Builder Discussion :

Comment faire en sorte qu'une application prenne la main / le focus ?


Sujet :

C++Builder

  1. #1
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut Comment faire en sorte qu'une application prenne la main / le focus ?
    Bonjour,

    Je cherche à réaliser une application qui appararaisse en 1er plan, et qui permette de saisir du texte via un TEdit à tout moment.

    L'application se compose d'une barre de la taille de la barre des tâches de Windows, est collée en haut de l'écran, et apparaît lorsqu'on passe le curseur de la souris dessus (événement onMouseMove), de la même façon que la barre des tâches de Windows lorsque l'option "masquer automatiquement" est activée.

    Ma fenêtre a pour FormStyle fsStayOnTop afin de se mettre au dessus de toutes les autres fenêtres.

    Elle contient un TEdit, et je souhaiterai qu'instantanément, en passant le curseur de la souris sur la fenêtre, celle-ci prenne la main afin que l'on puisse saisir du texte sans avoir à cliquer en + dans le TEdit.

    Pour cela, j'ai tenté :
    Form1->SetFocus();
    Form1->Edit1->SetFocus();
    SetForegroundWindow(FindWindow("Mon application",NULL));

    mais ça ne fonctionne pas... le focus est bien dans le TEdit, mais si ma fenêtre n'est pas l'application "active", et bien lorsque je tape sur le clavier le texte n'est pas entré dans le TEdit, il l'est dans toute autre application active.

    Comment faire en sorte que mon application prenne vraiment la main ?

    Merci d'avance pour vos réponses !

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Bonjour,

    Peut-être avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Application->BringToFront();
    Mais je n'en suis pas sur.

    Cordialement,

    Benjamin

  3. #3
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    Merci pour cette proposition. Malheureusement cela ne fonctionne pas...

    Je viens également de tenter en vain :
    Application->Restore();
    Application->RestoreTopMosts();

  4. #4
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    J'ai fait une recherche sur le forum pour trouver le code pour simuler un clic souris... Je suis tombé sur ce très bon tutoriel :
    http://tcharles.developpez.com/simul/

    et j'ai extrait le code suivant, la fenêtre de mon application ayant pour coordonnées 0,0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SetCursorPos(0,0);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
    et ça marche !
    Le contrôle est bien pris par ma fenêtre !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 190
    Points : 179
    Points
    179
    Par défaut
    Bonsoir,

    Super! Et merci d'avoir posté la solution. Cela devrait en aider plus d'un.

    Cordialement,

    Benjamin

  6. #6
    Membre régulier Avatar de benj63
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Mai 2002
    Messages
    207
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 207
    Points : 99
    Points
    99
    Par défaut
    De rien, c'est normal !


    Après quelques tests, je me suis rendu compte que j'avais oublié quelque chose ! En effet, on simule un clic du bouton gauche vers le bas (MOUSEEVENTF_LEFTDOWN), c'est à dire le bouton enfoncé, mais on ne simule pas le fait de remonter le bouton vers le haut ! du coup cela est considéré par Windows comme si l'on maintenait le bouton gauche de la souris enfoncé... Pour corriger cela, il suffit de rajouter MOUSEEVENTF_LEFTUP !

    J'ai édité mon code, je remets la version finale ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SetCursorPos(0,0);
    mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
    mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);

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

Discussions similaires

  1. Comment faire des etats pour une application web ?
    Par ovh dans le forum Autres outils décisionnels
    Réponses: 6
    Dernier message: 06/07/2021, 03h25
  2. Réponses: 28
    Dernier message: 13/07/2008, 14h31
  3. Comment faire 2 sessions dans une application
    Par ZiedCSS dans le forum Windows Forms
    Réponses: 1
    Dernier message: 03/04/2007, 14h36
  4. Réponses: 1
    Dernier message: 26/03/2007, 12h58
  5. Comment faire un exécutable d'une application access
    Par b_steph_2 dans le forum Runtime
    Réponses: 4
    Dernier message: 09/02/2006, 16h21

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