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 :

Fenetre au dessus de toutes mes autres fenêtres windev mais pas des autres applications [WD21]


Sujet :

WinDev

  1. #1
    Membre éclairé Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Par défaut Fenetre au dessus de toutes mes autres fenêtres windev mais pas des autres applications
    Bonjour,

    Je dois créer une fenêtre qui devra être au dessus de toutes mes autres fenêtres de l'application Windev en cours, mais qui ne doit pas être au dessus des autres fenêtres des autres applications (word par exemple).

    J'ai commencé par faire un OuvreSoeur pour ouvrir cette fenêtre sans bloquer mes autres fenetres.
    Dans le code d'initialisation de celle-ci je fais un FenEtat(DessusTout)

    Avec ceci la fenêtre s'ouvre bien au dessus de mes autres fenêtres, mais le problème est qu'elle reste également au dessus des autres applications.

    Existe t-il une solution pour que cette fenêtre soit "en dessous" des autres applications, et donc qu'elle soit au-dessus des fenêtres de l'application Windev en cours ?

    Merci par avance.

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 528
    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 528
    Par défaut
    Hello Léon,

    pour avoir pas mal galéré (et abandonné, faute de solution pérenne dans mon cas), il faut regarder du côté des API Windows : SetWindowPos().

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2003
    Messages
    1 027
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2003
    Messages : 1 027
    Par défaut
    Bonjour,

    As-tu essayé ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OuvreSoeur("FEN_Fenêtre" + Dessus)

  4. #4
    Membre éclairé Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OuvreSoeur("FEN_Fenêtre" + Dessus)
    Cela permet simplement d'ouvrir la fenêtre au premier plan lors de son lancement. Dès le premier clic sur une autre fenêtre, la fenêtre soeur que l'on vient d'ouvrir passe en dessous.

    Pour le moment je n'ai rien trouvé de "simple" pour faire ça... L'application dans laquelle je dois intégrer cette nouvelle fenêtre utilise beaucoup de fenêtre interne. J'ai tenté de surveiller la fenêtre qui a le focus avec la fonction SysFenHandle() mais chaque fenêtre interne possède son propre identifiant. Les évènements Prise de focus et Perte de focus des fenêtres vont dans tout les sens à chaque fois qu'un clic est réalisé sur un champ fenêtre interne...

  5. #5
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 528
    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 528
    Par défaut
    J'ai fait une petite bidouille :
    - Clic sur bouton pour l'ouverture de la fenêtre : OuvreSoeur("FEN_Soeur"+ Dessus)
    - Code Survol souris (WM_MouseMouve) : FenEtat(ActifDevant)

    Est-ce que cela peut te suffire ?

  6. #6
    Membre éclairé Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Par défaut
    Code Survol souris (WM_MouseMouve) : FenEtat(ActifDevant)
    De quel élément ? Tu passerais par un évènement sur *.* ?

  7. #7
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 528
    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 528
    Par défaut
    Dans ta fenêtre fille, partie code, tu as en bas, dans la bande grise, des dessins de souris avec flèches. Tu cliques sur les "..." et dans la fenêtre qui s'ouvre, tu coches la case "survol souris..."

  8. #8
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Salut LeonCosnyd,

    j'ai le cas en ce moment avec mon panel de favoris (pour lequel d'ailleurs j'ai relancé un de tes sujets vieux de 3 ans ^^ hasard !)

    Je gère ça via un champs fenêtre interne, auquel je donne une altitude élevée, et elle reste devant les autres.

    Bon dev'

  9. #9
    Membre éclairé Avatar de LeonCosnyd
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    439
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 439
    Par défaut
    Bonjour,

    Après quelques essais je n'arrive pas à comprendre pourquoi tu (FrenchSting) penses mettre l'évènement de survol souris sur la fenêtre Popup (ouverte en Soeur et non en Fille). Car le problème est que lorsque je clic sur la fenêtre "mère" c'est elle qui prend le focus et qui passe par dessus la fenetre popup. Le survol souris est donc pris par la fenêtre mère et n'est plus géré par la fenetre Popup...

    En revanche ce qui marche est de mettre l'évènement sur "*.*" qui correspond à "toutes les fenêtres windev". Voici un code qui, je pense, marche :

    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
     
    // FENETRE MERE
    // Déclaration
    EXTERNE "WinConst.WL"
     
    // Initialisation
    Evénement(pl_PopupDevant,"*.*",WM_MOUSEMOVE)
    Evénement(pl_PopupDevant,"*.*",WM_LBUTTONDOWN)
    OuvreSoeur("fenPopup"+Dessus)
     
     
    // Fonction pl_PopupDevant
    PROCEDURE pl_PopupDevant()
     
    SI FenEtat(fenPopup) <> Inexistant ALORS
    	FenEtat(fenPopup,Dessus)
    FIN
    Sur un projet vide, ne contenant que deux fenêtres sans champs (et non en production) cela marche.

    Pour ma part l'application dans laquelle je travaille contient une fenêtre principale qui utilise beaucoup de fenêtre interne pour accéder aux différentes parties du logiciel (on n'ouvre pas de nouvelle fenêtre fille). J'ai donc opté pour la solution de Droliprane. J'ai mis un champ fenêtre interne avec l'altitude la plus élevé. Cela m'évite de gérer les ouvertures/fermetures des fenêtres soeurs, et de devoir masquer son apparition dans la barre des taches windows.

  10. #10
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 528
    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 528
    Par défaut
    Hello Léon,

    j'ai encore gaffé en parlant de fille et pas de soeur. J'ai soumis ce code "à tout hasard". J'avais bien mis "est-ce que cela peut suffire ?". En tout cas, la solution de droliprane est vraiment top.

    EDIT :
    J'ai refait un test en "améliorant" l'événement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Evénement(proc_LanceFen,"*.*",WM_MOUSEMOVE)
    et dans le code de la procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SI FenEtat(FEN_Menu) = Inexistant ALORS
    	OuvreSoeur("FEN_Menu"+ Dessus)
    SINON
    	FenEtat(FEN_Menu, ActifDevant)
    FIN

  11. #11
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Oui c'est satisfaisant dans 99% des cas, pour peu qu'en arrière plan de ta fenêtre du premier plan tu ne fasse pas scroller une table par exemple, auquel cas tu pourrais voir l'ascenseur de ta table en arrière plan venir se confondre/scintiller dans ta fenêtre du premier plan. Je dis ça, c'est juste pour te prévenir, si comme moi tu es perfectionniste, tu voudras aussi parer à cette éventualité mais à force de trouver des parades pour éviter des comportements, ça fait écrire du code pas toujours compréhensible, voire parfois usine à gaz pour un effet de bord qui arrive rarement... peut-être que dans les versions supérieures c'est stabilisé...

  12. #12
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 528
    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 528
    Par défaut
    Il y a des clignotements avec 2 fenêtres qui se chevauchent "largement". Sur une "petite" fenêtre genre menu flottant, pas sûr que ça se voie.

    Mais tu as raison, il faut essayer d'être perfectionniste. Mais à un moment, quand c'est trop usine à gaz, j'ai tendance à faire au plus simple. Inutile de pondre du code impossible à maintenir. Il y a une signature d'utilisateur ici qui dit "Ya mieux mais ça fonctionne".

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/02/2017, 02h44
  2. [OpenGL 3.x] Texturing GL_POINTS fait bugger toutes mes autres textures.
    Par orochimaru dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/03/2013, 15h55
  3. Fenetre au dessus de toutes les autres
    Par Analfabete dans le forum wxPython
    Réponses: 1
    Dernier message: 25/08/2007, 23h12
  4. Réponses: 1
    Dernier message: 16/02/2005, 12h04
  5. Réponses: 2
    Dernier message: 09/07/2003, 14h10

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