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 :

Boucler sur un affichage d'une fenêtre [WD17]


Sujet :

WinDev

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut Boucler sur un affichage d'une fenêtre
    Hello tout le monde,

    je bloque sur un affichage de fenêtre.

    J'ai une fenêtre qui apparait lorsqu'on envoi un message aux utilisateurs. En autre temps elle est iconisé et invisible.

    J'envoi une infobox pour indiquer le nombre de message à lire. une fois qu'on clique sur le ok de l'infobox je fais apparaitre la fenêtre avec le message.

    Le problème : Malgré que je fais apparaitre une info box il suffit qu'on clique ailleurs sans le voir l'info box se glisse en arrière plan (du coup on affiche pas le message il reste en attente). Serait-ce possible de refaire apparaitre l'info box après 15 secondes par exemple si on a toujours pas lu le message?

    J'ai essayé en mettant un booléen. Si on a un message à lire mais qu'on a pas valider la lecture en cliquant sur le bouton valider de la fenêtre qui apparait j'ai une procédure qui s'exécute toute les 15 secondes et qui test l'état de la fenêtre avec le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SI gbBoolMesslu = Faux ALORS
    	Trace(FenEtat(FEN_Messages))
    	SELON FenEtat(FEN_Messages)
    		CAS ActifDevant
    			Trace("actif")
    		CAS Invisible
    			afficheFen()
    		CAS Inexistant
    			Trace("inexistant")
    	FIN
    FIN
    le soucis c'est que quand je trace l'état il me renvoie 0. et aucune propriété de fenêtre ne correspond à zéro.

    J'ai alors essayé de faire apparaître à nouveau l'info box en testant si la fenêtre est toujours invisible c'est qu'on a pas cliqué sur 'ok' et donc je refais un fenetat(Fen_messages, ActifDevant). Mais l'infobox n'apparait pas.

    Alors j'ai une solution de secours, je pensais à regarder pour faire clignoter l'icone dans la barre des tâches. Mais c'est la dernière solution ça. Si vous avez une idée je suis preneur ! Merci d'avance à tous !
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  2. #2
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    mutlitâche-multifonction
    Inscrit en
    juin 2003
    Messages
    3 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : mutlitâche-multifonction
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 3 472
    Points : 5 895
    Points
    5 895
    Par défaut
    Pourquoi ne mets tu pas ton infobox en dessustout ?
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Il diffère très peu entre le Actifdevant et le dessustout. Cependant dans l'aide je vois qu'on ne peut mettre le dessustout que sur l'état d'une fenêtre. Et non sur une info(). Maintenant je me trompe p-e.

    Car l'infobox vient bien au dessus de tout, mais il suffit que l'infobox arrive en premier plan et qu'à ce moment la on clique sur un autre endroit de la fenêtre sans le voir l'infobox se glisse derrière.

    Merci de ta réponse.
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 1 278
    Points : 2 149
    Points
    2 149
    Par défaut
    Citation Envoyé par GiGii Voir le message
    Il diffère très peu entre le Actifdevant et le dessustout. Cependant dans l'aide je vois qu'on ne peut mettre le dessustout que sur l'état d'une fenêtre. Et non sur une info(). Maintenant je me trompe p-e.

    Car l'infobox vient bien au dessus de tout, mais il suffit que l'infobox arrive en premier plan et qu'à ce moment la on clique sur un autre endroit de la fenêtre sans le voir l'infobox se glisse derrière.

    Merci de ta réponse.
    Bonjour,

    Tu pourrais pas appeler une fonction via un timer qui vérifie que tout les messages sont lus et qui replace ton infobox devant si ça n'est pas le cas ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    Bonjour,

    Tu pourrais pas appeler une fonction via un timer qui vérifie que tout les messages sont lus et qui replace ton infobox devant si ça n'est pas le cas ?
    C'est exactement ce que je fais (ou ce que je veux faire). Sauf que j'arrive pas à replacer l'infobox devant. C'est la tout le problème.
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 1 278
    Points : 2 149
    Points
    2 149
    Par défaut
    Citation Envoyé par GiGii Voir le message
    C'est exactement ce que je fais (ou ce que je veux faire). Sauf que j'arrive pas à replacer l'infobox devant. C'est la tout le problème.
    Oupssss... J'avoue... j'ai lu en diagonale....

    Solution un peu porcasse : tu fais un CAS 0.... je sais pas à quelle constante ça correspond mais ça devrait marcher !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  7. #7
    Membre éprouvé Avatar de miripesage
    Homme Profil pro
    gerant
    Inscrit en
    novembre 2009
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : gerant
    Secteur : Industrie

    Informations forums :
    Inscription : novembre 2009
    Messages : 725
    Points : 1 157
    Points
    1 157
    Par défaut
    bonjour, pourquoi ne dirige-tu pas le clic sur ta fen_info ou son bouton de validation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurseurCapture(Vrai, Handle(MaFenêtre//ou//BTN_Valider))
    Au travail, le plus difficile, c'est d'allumer la petite lampe du cerveau. Après, ça brûle tout seul!

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    Oupssss... J'avoue... j'ai lu en diagonale....

    Solution un peu porcasse : tu fais un CAS 0.... je sais pas à quelle constante ça correspond mais ça devrait marcher !
    Le focus ne revient que si je fais apparaître la fenêtre derrière. .. C'est un peu porcasse en effet ahah . Si vraiment ça ne fonctionne pas plus proprement je créerai moi meme une fenêtre infobox ce qui me permettra d'avoir la main.
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  9. #9
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par miripesage Voir le message
    bonjour, pourquoi ne dirige-tu pas le clic sur ta fen_info ou son bouton de validation ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CurseurCapture(Vrai, Handle(MaFenêtre//ou//BTN_Valider))
    Bonjour Miris, désolé pour le retard je n'avais pas vu ton commentaire.
    J'ai testé le code. Malheureusement ça ne correspond pas vraiment. L'idée est de ne pas bloquer l'utilisateur mais que s'il clique ailleurs et que la fenêtre passe en second plan, toute les 30 secondes tant qu'il n'a pas lu le message la fenêtre repasse devant.

    Bizarrement le FenEtat me fait apparaitre la fenêtre une fois devant. Mais si je clique à nouveau à côté elle ne revient plus malgré un nouvel appel à la fonction FenEtat.
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 1 278
    Points : 2 149
    Points
    2 149
    Par défaut
    Citation Envoyé par GiGii Voir le message
    Bonjour Miris, désolé pour le retard je n'avais pas vu ton commentaire.
    J'ai testé le code. Malheureusement ça ne correspond pas vraiment. L'idée est de ne pas bloquer l'utilisateur mais que s'il clique ailleurs et que la fenêtre passe en second plan, toute les 30 secondes tant qu'il n'a pas lu le message la fenêtre repasse devant.

    Bizarrement le FenEtat me fait apparaitre la fenêtre une fois devant. Mais si je clique à nouveau à côté elle ne revient plus malgré un nouvel appel à la fonction FenEtat.
    Bonjour,

    J'y pense que maintenant mais avez vous testé avec les fonctions DonneFocus et SysDonneFocus ?
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  11. #11
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    Bonjour,

    J'y pense que maintenant mais avez vous testé avec les fonctions DonneFocus et SysDonneFocus ?
    Bonjour, oui j'ai essayé. ça fonctionne tout aussi bien que fenEtat. C'est à dire :

    Un message s'affiche. Je clique ailleurs la fenêtre se glisse en arrière plan. X secondes plus tard qd la procédure est appelée, la fenêtre réapparaît. Donc pour la seconde fois je clique ailleurs et la surprise générale. La fenêtre ne réapparaitra plus. Que ça soit avec FenEtat, donneFocus, SysDonneFocus, curseurcapture. Etc etc...

    J'ai tout de même généré un exécutable soupçonnant que le fait de le faire en mode test puisse influer. Rien n'y fait. C'est tout de même curieux..

    Merci à tous pour vos réponses.
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  12. #12
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    mutlitâche-multifonction
    Inscrit en
    juin 2003
    Messages
    3 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : mutlitâche-multifonction
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 3 472
    Points : 5 895
    Points
    5 895
    Par défaut
    Ce que je ferais : je crée une fenêtre de validation. Ca fera plus joli si tu mets une belle image dedans en plus.
    Je la mets au premier plan (via API -> topmost).
    Un petit timer (1 seconde),
    puis je remets son état à normal.

    Un lien (en VB) pour faire tout ça (ou presque).

    [EDIT]Ca va mieux avec le lien...
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  13. #13
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par frenchsting Voir le message
    Ce que je ferais : je crée une fenêtre de validation. Ca fera plus joli si tu mets une belle image dedans en plus.
    Je la mets au premier plan (via API -> topmost).
    Un petit timer (1 seconde),
    puis je remets son état à normal.

    Un lien (en VB) pour faire tout ça (ou presque).

    [EDIT]Ca va mieux avec le lien...
    J'ai pas tout compris

    j'ai compris le fait de créer une fenêtre de validation. Mais intéragir sur plusieurs plans de ma fenêtre n'équivaut pas (de manière grossière certe) à la fenêtre de validation?
    et qu'entends tu par remettre son état à normal?

    merci
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  14. #14
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    170
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : mars 2009
    Messages : 170
    Points : 396
    Points
    396
    Par défaut
    Bonjour,

    Solution pas très propre mais sans api, envoyer une touche toutes les x secondes dans la fenêtre. (testé sur 7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Procédure avec timer appelée dans l'initialisation de la fenêtre
    Hwnd est un entier système = Handle(....)
    EnvoieTouche(" ",Hwnd)
    Il faut penser à décocher accessible par TAB dans les boutons pour ne pas avoir de validation intempestive.

  15. #15
    Expert confirmé
    Avatar de frenchsting
    Homme Profil pro
    mutlitâche-multifonction
    Inscrit en
    juin 2003
    Messages
    3 472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : mutlitâche-multifonction
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2003
    Messages : 3 472
    Points : 5 895
    Points
    5 895
    Par défaut
    Citation Envoyé par GiGii Voir le message
    J'ai pas tout compris

    j'ai compris le fait de créer une fenêtre de validation. Mais intéragir sur plusieurs plans de ma fenêtre n'équivaut pas (de manière grossière certe) à la fenêtre de validation?
    et qu'entends tu par remettre son état à normal?

    merci
    Non, je ne joue pas avec les plans d'une fenêtre ("au sens windev"), mais avec ceux de l'écran : par exemple, tu as des fenêtres windows qui sont au dessus de tout et c'est ce que fait cette API. Ensuite, je remets la fenêtre à un état normal, c'est à dire qu'elle pourra passer derrière les autres fenêtres (Word, Excel, navigateur,...).

    Essaye la solution de themayu. Si elle fonctionne chez toi, elle est archi simple...
    Commencez toujours par là : et puis n'hésitez à passer par là : ou par un autre moteur de recherche...
    Pas de question par MP s'il vous plait. Le forum est fait pour cela...

    Make it real not fantasy

  16. #16
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    février 2011
    Messages
    177
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : février 2011
    Messages : 177
    Points : 230
    Points
    230
    Par défaut
    Citation Envoyé par themayu Voir le message
    Bonjour,

    Solution pas très propre mais sans api, envoyer une touche toutes les x secondes dans la fenêtre. (testé sur 7)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // Procédure avec timer appelée dans l'initialisation de la fenêtre
    Hwnd est un entier système = Handle(....)
    EnvoieTouche(" ",Hwnd)
    Il faut penser à décocher accessible par TAB dans les boutons pour ne pas avoir de validation intempestive.
    J'ai essayé le code. Même résultat. ça l'affiche une fois mais pas deux..

    par contre toute les X secondes je vois bien une intéraction à l'écran comme quoi que le handle se fait bien. Mais la fenêtre ne revient pas au premier plan. :/

    Edit : ça fonctionne. En faisant un donnefocus après l'appel du Handle ça fonctionne Merciiiii !!!!
    Bon Dev
    La touche F1 est proche de vous !
    Oubliez pas de voter

  17. #17
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : mars 2009
    Messages : 1 278
    Points : 2 149
    Points
    2 149
    Par défaut
    Citation Envoyé par GiGii Voir le message
    J'ai essayé le code. Même résultat. ça l'affiche une fois mais pas deux..

    par contre toute les X secondes je vois bien une intéraction à l'écran comme quoi que le handle se fait bien. Mais la fenêtre ne revient pas au premier plan. :/

    Edit : ça fonctionne. En faisant un donnefocus après l'appel du Handle ça fonctionne Merciiiii !!!!
    Ouffff t'as trouvé une solution !!!!! ***dev développez 10 fois plus vite... (sic)
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

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

Discussions similaires

  1. [C#] Problème d'affichage d'une fenêtre (event Load)
    Par PB-W dans le forum Windows Forms
    Réponses: 3
    Dernier message: 10/03/2006, 14h48
  2. Evénement quand on clic sur le bord d'une fenêtre ?
    Par gloode dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 17/01/2006, 10h28
  3. pb affichage dans une fenêtre
    Par Mat 74 dans le forum Windows
    Réponses: 8
    Dernier message: 28/11/2005, 00h14
  4. Erreur sur l'ouverture d'une fenêtre popup
    Par misa dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/11/2005, 16h21
  5. [C#] Besoin d'aide sur l'affichage d'une combobox
    Par dcd3 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 08/10/2005, 01h43

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