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

API, COM et SDKs Delphi Discussion :

Mettre une application en premier plan


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut Mettre une application en premier plan
    Bonjour,

    Mon logiciel est composé de deux applications. (encodage et édition).
    La communication entre-eux se fait par message Windows.
    Jusque là, tout va bien...

    Lors de l'appui de certaine touche ou click dans le menu, j'affiche le second programme.

    Pour cela , j'utilise l'API SetForeGroundWindow et ca marche ! mais rien que sur mon pc de programmation, Sur tout les autres (ou la plupart), la seconde application reste en arrière plan et clignote dans la barre des tâches.

    Existe t'il une autre API similaire ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Bonjour,

    L'ordre "BringToFront" ne pourait'il pas convenir ?

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Non, va pas

  4. #4
    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
    J'avais exactement le même souci.
    2 applis communiquent avec les messages windows, et l'une doit demander à l'autre de passer au 1er plan
    -> L'icône se met à clignoter dans la barre des tâches uniquement.
    Selon moi, le problème provient du fait que ce n'est pas l'application active.

    Je me souviens pas avoir trouvé la solution à ce problème...
    Sinon, la seule solution que je pouvais envisager était de fusionner les 2 appli en une seule.
    De retour parmis vous après 10 ans!!

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par Sub0
    Sinon, la seule solution que je pouvais envisager était de fusionner les 2 appli en une seule
    J'y pense même pas . J'ai choisi de faire deux programmes indépendants pour la simple et bonne raison d'avoir un logiciel pas trop lourd --> pas trop lents,etc.

    En fait, j'y suis presque au niveau de l'affichage en premier plan, seul petit problème est lors du premier appel où là, la fenetre ne se met pas au premier plan et clignote, ensuite ca va bien, donc... le problème est au 3/4 résolu.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 560
    Points : 576
    Points
    576
    Par défaut
    Votre application ne serait elle pas minimizer, ou ne se considérerait'ell pas comme minimizer ?

    Cela expliquerais les cicones clignotante.

  7. #7
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Essaye avec setForegroundWindow()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetForegroundWindow(Handle);
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  8. #8
    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
    Lil_jam63 n'a lu que le titre du topic !!

    (c'est l'heure de la pause... )
    De retour parmis vous après 10 ans!!

  9. #9
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Citation Envoyé par Sub0
    Lil_jam63 n'a lu que le titre du topic !!

    (c'est l'heure de la pause... )
    Exact .
    Apres avoir tout lu cette fois, je pencherais plus pour utiliser setWindowPos() avec le flag HWND_TOPMOST
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SetWindowPos(HandleFenetre, HWND_TOPMOST, 0, 0, 0, 0, SWP_SHOWWINDOW or SWP_NOSIZE or SWP_NOMOVE);
    Je n'ai pas delphi sous les yeux mais ça devrait marcher.
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  10. #10
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Aïche, j'ai oublié de préciser que la seconde application, donc celle qui doit s'afficher en premier plan, affiche des prévisualisations d'impressions . (

    Donc , la seconde application ne peut pas avoir l'état FsStayOnTop puisqu'au sinon, toutes le prévisualisation seront en arrière plan de celle-ci

    La solution de Lil_jam63 marche parfaitement à par que ma fiche réagi comme si la propriété FormStyle était en FsStayOnTop.

    oui je sais, je suis chiant....

    Mais un grand merci pour tout

    Une autre solution ?

  11. #11
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 43
    Points : 48
    Points
    48
    Par défaut
    Tape ForceForegroundWindow sous Google. C'est une méthode qui devrait faire ce que tu recherches.
    Je n'ose pas la recopier directement ici car je ne sais pas qui l'a écrite et ses droits dessus.

  12. #12
    Membre expérimenté
    Avatar de Bloon
    Homme Profil pro
    Consultant Freelance
    Inscrit en
    Avril 2002
    Messages
    467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant Freelance
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2002
    Messages : 467
    Points : 1 339
    Points
    1 339
    Par défaut
    Est-ce que c'est ta première appli qui essaye de faire passer la seconde au premier plan, ou bien est-ce la seconde qui essaye de se mettre au premier plan par elle-même, à la réception d'un message ?

    Bloon
    A lire : Les règles du club
    Delphi : La FAQ - Articles

  13. #13
    Membre habitué

    Profil pro
    Inscrit en
    Février 2005
    Messages
    317
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 317
    Points : 183
    Points
    183
    Par défaut
    sinon tu peux créer un vbscript, avec la fonction appactivate("titre fenêtre") puis le supprimer ensuite.

  14. #14
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Citation Envoyé par Bloon
    Est-ce que c'est ta première appli qui essaye de faire passer la seconde au premier plan, ou bien est-ce la seconde qui essaye de se mettre au premier plan par elle-même, à la réception d'un message ?

    Bloon
    C'est la deuxième qui essaie de se mette en premier plan à la réception d'un message.

    Crois-tu que le problème viendrait de là ?

    Tape ForceForegroundWindow sous Google. C'est une méthode qui devrait faire ce que tu recherches.
    Je n'ose pas la recopier directement ici car je ne sais pas qui l'a écrite et ses droits dessus.
    Merci, je viens d'aller sur Torry.net et en effet ils ont l'air d'avoir une solution (que je n'ai pas testée) . Elle me paraît un peu trop grosse pour le bete problème que j'ai.
    Mais merci quand meme , je la garde au chaud et la prendrait si aucune autre solution n'est possible.

    Merci

  15. #15
    Candidat au Club
    Inscrit en
    Février 2005
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Personellement, j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if IsIconic(hWnd) then
       ShowWindow(hWnd, SW_RESTORE);
    SetForegroundWindow(hWnd);
    mais après avoir été voir sur torry.net, il s'avère que mon bout de code ne marche pas à tous les coups sous 98 et 2000

    Utiliser la fonction non documentée SwitchToThisWindow me paraît être la meilleure solution.

  16. #16
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Bloon a vu juste.
    Le problème venait bien du fait que l'appel a SetForegroundWindow etait fait à partir de la fenetre concernée. (Application 2 appelle SetForegroundWindow(Application.fenetre.handle)

    Bein , j'ai essayé a partir de l'application1 et ca marche .

    Merci à tous pour les différentes techniques proposées .

    A++

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

Discussions similaires

  1. Mettre une application au premier plan
    Par retwas dans le forum VB.NET
    Réponses: 0
    Dernier message: 15/04/2011, 09h04
  2. Mettre une application au premier plan sous XP
    Par retwas dans le forum VB.NET
    Réponses: 6
    Dernier message: 29/08/2010, 21h00
  3. Mettre une fenetre au premier plan
    Par madislak dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 14/02/2006, 00h32
  4. Réponses: 1
    Dernier message: 22/11/2005, 11h00
  5. Réponses: 2
    Dernier message: 07/02/2005, 16h43

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