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


Sujet :

WinDev

  1. #1
    Membre actif
    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 éminent
    Pourquoi ne mets tu pas ton infobox en dessustout ?
    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.

    Make it real not fantasy.

  3. #3
    Membre actif
    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é
    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
    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é
    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é
    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
    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
    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é
    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
    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 éminent
    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 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.

    Make it real not fantasy.

  13. #13
    Membre actif
    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
    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 éminent
    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 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.

    Make it real not fantasy.

  16. #16
    Membre actif
    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é
    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 !

###raw>template_hook.ano_emploi###