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

WinDev Discussion :

Redonner focus à une fenêtre


Sujet :

WinDev

  1. #1
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut Redonner focus à une fenêtre
    Bonjour à tous,


    Je sèche pour redonner la main à une fenêtre windev :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    RetourFonction est un booléen // Type C :BOOL
     
    LanceAppli("c:\windows\notepad.exe",exeActif,exeBloquant)
    Multitâche(50)
     
    RetourFonction = FenEtat(MaFenêtre, DessusTout)
    ListeAjoute(Liste1, NumériqueVersChaîne(RetourFonction))
    Multitâche(10)
    FenEtat(MaFenêtre, Normal)
    Multitâche(10)
    Ce que he veux faire : j'ai une appli windev qui lance un exe extérieur. Quand l'appli est fermée, je veux que la fenêtre ait le focus pour pouvoir poursuivre une saisie.

    Comment reproduire :
    1. Une fenêtre + un bouton
    2. Lancer et cliquer sur le bouton : le bloc notes s'ouvre.
    3. Afficher une fenêtre (non maximisée de façon à voir la croix de fermeture du bloc notes) au dessus du bloc notes qui est ouvert.
    4. Fermer le bloc notes.
    5. La fenêtre est bien repassée au dessus mais n'a pas le focus.

    Notes : j'ai essayé
    - avec les API ShowWindow/ SetForegroundWindow / SetWindowsPos sans succès. Au mieux,j'ai eu le résultat que me donne FenEtat.
    - En mettant le focus sur un champ de la fenêtre, repriseSaisie,...

    [EDIT] : je viens de tester en simulant un clic de souris sur la fenêtre avec EnvoieTouche() mais cela ne fonctionne pas.

    Si vous avez des idées...

    Merci d'avance,

    Claude
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juillet 2014
    Messages : 21
    Points : 69
    Points
    69
    Par défaut
    Salut,

    J'ai simplement essayé en testant le résultat de la fonction LanceAppli et le focus se fait bien dans mon champ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Res = LanceAppli("c:\windows\notepad.exe",exeActif,exeBloquant)
    SI Res = 1 ALORS
        DonneFocus(Saisie1)
    FIN
    Est ce que c'est le résultat attendu ?

  3. #3
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Merci pour ta réponse.

    Je précise que j'ai simplifié mon projet afin de pouvoir reproduire le comportement plus facilement.

    Ton code ne fonctionne pas. Je pense que tu ne fais pas l'étape 3. Dans mon cas, je restaure un navigateur.

    Ce qui est dingue, c'est qu'après la fin du traitement, mon navigateur reste bien derrière la fenêtre qui est donc top most...
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  4. #4
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 57
    Points : 102
    Points
    102
    Par défaut
    bonjour,

    c'est normale
    car quand tu clic sur le bouton tu ouvre note pad
    ensuite tu fait venir une fenetre
    donc ta fenetre windev est 3 eme dans la liste des fenetres

    si tu ferme le note pad elle passe deuxieme
    le fait de la passer devant ne veut pas dire qu'elle est active (j'ai deja eu ca sur des appli mis en systray qui avait bcp de mal a reprendre le focus)
    du coup hyper simple : comme ton appli est pas au premier plan il suffit de l'iconser et de la restaure = elle sera au premier plan et active
    et je l'envoie dans un champs de saisie comme ca des que tu touche au clavier tu es dans le champs de saisie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    LanceAppli("c:\windows\notepad.exe",exeActif,exeBloquant)
    Iconise(MaFenêtre)
    Restaure(MaFenêtre)
    RepriseSaisie(Saisie1)

  5. #5
    Membre régulier
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2011
    Messages : 57
    Points : 102
    Points
    102
    Par défaut
    et si tu veux eviter le iconise et restaure si ta fenetre est la suivante (cela evite la disparition et apparition)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    LanceAppli("c:\windows\notepad.exe",exeActif,exeBloquant)
    SI API("user32.dll", "GetForegroundWindow") <> Handle() ALORS
    	Iconise(MaFenêtre)
    	Restaure(MaFenêtre)
    FIN
    RepriseSaisie(Saisie1)
    c'est le code que j'utilise dans mes fenetres systray car elles peuvent etre iconisées ou non donc pour eviter un scintillement
    j'avais fait ca en windev 20 = ca doit marche en 22

  6. #6
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Hello kool-Paladin,

    Merci pour tes réponses.
    Ca marche nickel sur mon projet test, mais pas sur mon projet réel. J'ai créé un patch chez l'utilisateur mais tout est resté réduit.

    Pour info, mon exemple de test est simplifié à l'extrême car la fenêtre de départ est très complexe (10 Mo). Le mode opératoire est le suivant :

    Clic sur un bouton. Appels de procédure diverses. Ouverture d'une fenêtre qui lance un IE pour récupérer des infos. A la fermeture de IE récupération et transfert des valeurs dans la fenêtre de départ puis fermeture de la fenêtre, puis lancement de procédures dont une qui ouvre la fenêtre qui pose souci.
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

Discussions similaires

  1. Comment focus une fenêtre Tkinter
    Par Mattness69 dans le forum Général Python
    Réponses: 1
    Dernier message: 14/12/2017, 18h23
  2. Donner le focus à une fenêtre non java
    Par Khyinn dans le forum Général Java
    Réponses: 2
    Dernier message: 15/05/2010, 12h40
  3. Réponses: 5
    Dernier message: 17/06/2006, 15h32
  4. Réponses: 4
    Dernier message: 05/09/2005, 16h01
  5. Réponses: 3
    Dernier message: 22/08/2005, 17h15

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