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

VB 6 et antérieur Discussion :

Pb Form.Show avec Outlook


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Pb Form.Show avec Outlook
    Bonjour à tous cher développeurs et maîtres du code.

    Je développe en VB6 une appli qui m'affiche le nombre d'enregistrement d'une table SQL dans un Form.
    J'utilise un Timer pour que ce message se mette à jour toutes les secondes.

    Pendant ce temps, l'utilisateur peut travailler sur autre chose, c'est juste une alerte pour lui indiquer s'il a du travail à faire ou non.

    J'ai un souci avec Outlook, en effet mon Form.show qui se fait toutes les secondes prend le pas sur Outlook, ce qui fait que je "perd" Outlook toutes les secondes.
    Quand je parle de perdre, c'est comme si on faisait un "Atl + tab" pour se mettre toutes les secondes sur ma Form d'alerte.
    Ma version d'Outlook est le 2000, il faurt que je vois si c'est le cas avec d'autres versions sur d'autres postes.

    Après différents tests, codes commentées, etc... je confirme que celà vient bien du Form.Show.
    Car lorsque j'enlève le Timer le massage apparait 1 fois et n'est plus mis à jour.
    Si je remet le Timer et que je commente "Form.Show", pas de pb avec Outlook.

    Quelqu'un sait-il comment éviter cette "prise de pouvoir" de ma Form tout en faisant en sorte qu'elle se mette à jour toutes les secondes?

    Merci d'avance à vous.

  2. #2
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour,

    je ne comprends pas la nécessité de jouer avec le Show ...

    Je te propose :
    - de ne montrer qu'une fois pour toute ta Form d'alerte (ton Show)
    - de l'envoyer en réduction dans la barre des tâches
    - de la faire clignoter dans certaines circonstances (lorsque tu veux faire passer ton message "au boulot") en la laissant là où elle est (dans la barre des tâches)
    - d'arrêter son clignotement lorsque l'employé l'aggrandit.

    Attention : j'espère que ta forme d'alerte n'est pas modale ...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    En fait, nous voulons donner le moins de souplesse possible à l'utilisateur.
    C'est pourquoi on ne désire pas mettre de bouton de réduction de la fenêtre.

    Pour être plus précis sur le contenu, le formulaire indique (via le requêtage d'une table toutes les secondes) le nombre de fax que l'utilisateur doit traiter.

    Nous voulons que ce formulaire (qui est de petite taille afin d'avoir juste "vous avez && fax en attente") reste visible en permanence.
    Le clic gauche permet de déplacer le formulaire à l'écran et le clic droit permet d'ouvrir l'outil de traitement des fax ou de quitter cette petite application.

    Nous jouons de plus sur la transparence afin que l'utilisateur continu à voir tout son écran.

    Voici le code d'affichage qui se répète donc toutes les secondes :
    -------------------------------------------------------------------------
    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
    18
    19
    20
    21
    22
    23
    24
    Private Sub ManageMsgWindow(ByVal Feuille As Form)
     
    Dim nbIncomedFax, sMsg As String
     
    nbIncomedFax = getNbIncomingFax
    If nbIncomedFax > 0 Then
      sMsg = Chr(10) & Chr(13) & "Fax arrivé(s) - " & nbIncomedFax & " fax en attente de traitement"
    Else
      sMsg = Chr(10) & Chr(13) & "Pas de fax"
    End If
     
    lNotifyMsg.Caption = sMsg
     
    ' Affichage ou non de la fenêtre, au premier plan
    If nbIncomedFax > 0 Then
      'Des fax sont arrivés, il faut afficher la fenêtre
      Feuille.Show
     
    Else
      'Il n'y a pas de fax à traiter, la fenêtre de notification n'est pas affichée
      Feuille.Hide
    End If
     
    End Sub

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Citation Envoyé par fusuke Voir le message
    Bonjour à tous,

    En fait, nous voulons donner le moins de souplesse possible à l'utilisateur.
    C'est pourquoi on ne désire pas mettre de bouton de réduction de la fenêtre.
    Re,...

    - Je ne t'ai pas dit de mettre un bouton de réduction (il est toujours possible de réduire une fenêtre dynamiquement, sans pour autant la doter d'un bouton ad hoc !)
    - l'envoyer dans la barre des tâches te permet à la fois d'éviter la gestion de la transparence et d'encombrer l'écran
    - tu peux assortir son clignotement d'une série de bips, si tu veux
    - tu peux même (cerise sur le gâteau) mettre ton message (puisqu'il est vraiment court) en caption de ta Form clignotante (il clignotera dans la barre des tâches) !

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Re :-)

    Le soucis, c'est que nous avons déjà "vendu" la solution aux utilisateurs.
    Et nous voulons vraiment essayer de garder cette solution de feuille affichée en permanance pour indiquer le nombre de fax arrivés.

    Et j'aimerai aussi, de manière personnelle, comprendre pourquoi je n'ai de soucis de focus qu'avec Outlook et pas avec les autres applis.

    Je viens d'essayer différentes choses mais j'ai toujours cette "prise de pouvoir" de ma feuille sur Outlook.

    J'ai tenté le ZOrder à 0 ou à 1
    Mais également le setWondowPos de la librairie "user32" avec les propriétés HWND_TOPMOST (-1), HWND_NOTOPMOST (-2), HWND_TOP (0) et HWND_BOTTOM (1).
    Mais rien de concluant...

  6. #6
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Je ne suis pas sûr de bien comprendre, mais si tu veux avoir tout le temps cette petite fenêtre au premier plan tu peux ajouter ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    'Declaration de fonction pour garder une fenetre à l'avant plan
    Public Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
    Public Const swp_nomove = 2
    Public Const swp_nosize = 1
    Public Const flags = swp_nomove Or swp_nosize
    Public Const hwnd_topmost = -1
    Public Const hwnd_notopmost = -2
    Et dans le code de ta feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim x
    x = SetWindowPos(LeNomDeTaFeuille.hwnd, hwnd_topmost, 0, 0, 0, 0, flags)

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Bonjour, OhMonBato,

    Il se plaint précisément du contraire (de ce que la "montre" de sa fenêtre vient supplanter (et le "jeter" de) Outlook)...
    Ou alors, c'est moi qui n'ai rien compris ...

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Hello les amis,

    Merci OhMonBato et ucfoutu.
    Je vais tester ça.

    En fait ucfoutu, c'est un peu des 2

    J'ai besoin que ma fenêtre reste au devant de toute appli.
    Mais pour le cas d'Outlook et uniquement Outlook, je fait d'avoir cette fenêtre (via le .Show) qui se recharge toutes les secondes empêche l'utilisateur d'utiliser Outlook.
    Ou alors il faudrait que l'utilisateur fasse fumer son clavier pour écrire et envoyer son message en moins d'1 seconde.

    Dès qu'on clic sur Outlook, une seconde plus tard ma fenêtre reprend le focus.
    Alors que pour les autres applis, même Word ou autre, ma fenêtre reste bien en avant mais rien n'empêche d'écrire, sans être gêné par la fenêtre.

    Merci à vous pour votre aide.

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Points : 5 537
    Points
    5 537
    Par défaut
    Ah...

    Ce n'est plus le même problème (ou il avait mal été exposé)...

    Ajoute donc un Doevents juste après ton Show..., pour voir ...

    Et evite de montrer (ton show) toutes les secondes.
    Ne montre que si messages à montrer (expression conditionnelle).
    Et j'éviterais aussi de montrer toutes les secondes, même si message à passer ! (toutes les 10 secondes me parait suffisant pour une telle finalité).

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Hello,

    Je vais essayer le doEvents et je vous dirais ce que celà donne.

    Malheureusement, je me dois de faire des .show toutes les secondes car le projets concerne des arrivées de fax et certains doivent être traisés dans la 1/2h (rapatriement de personnes, dépannage, etc...)
    Et vu qu'il y a plusieurs actions à mener, la moindre seconde peut être importante.

    Dans le feu de l'action, je n'avais peut être aps été clair, désolé

    bonne journée à tous

  11. #11
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    As tu essayé la solution que je te proposais ?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Hello OhMonBato,

    Je n'ai pas encore essayé ta solution.
    etant sur différents projets en même temps, je n'ai pas encore bossé sur le problème depuis jeudi après-midi.

    Je devrais pouvoir m'occuper de celà ce soir ou demain matin.

    en tout cas merci à tous pour vos proposition et aides.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    Désolé OhMonBato, mais ta solution ne fonctionne toujours pas...
    Mon focus prend la main sur Outlook encore et toujours...

    Je suis sur Outlook 2000, je vais essayer de voir avec les admin s'il y a possibilité de tester avec une version plus récente...

    Sinon je vais devoir arrêter de faire du show toutes les secondes mais plutôt faire 1 seul .show et modifier le texte à l'intérieur... C'est moins classe et moins visuel pour les utilisateurs mais bon...

    Si jamais vous avez d'autres idées ou pistes, je suis preneur...

    Bonne après-m à tous !!!!

  14. #14
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    Je crois dans ce cas n'avoir rien compris à ce que tu voulais.

    Je pensais avoir compris que tu voulais cette petite fenetre TOUJOURS au premier plan et qu'effectivement, seul le message à l'intérieur de cette fenetre soit mis à jour toutes les secondes (et dans ce cas, nul besoin du Show). Visiblement ce n'est pas ça.

  15. #15
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Je vais essayer de la refaire
    Etant en plein dedans, c'est forcément logique pour moi et je ne suis donc pas assez clair à priori.

    J'ai un Outlook 2000.

    J'ai donc un exe VB6 qui m'affiche une petite fenêtre m'indiquant si des fax sont prêts à être traités et m'indique combien sont en attente.
    Ce nombre de fax à traiter est donc mis à jour toutes les secondes (pour des besoins d'urgence métier).
    Cette fenêtre est déjà au premier plan et n'empêche pas les utilisateur de faire fonctionner d'autres outil.
    Fonctionnement correct :
    On peut donc très bien aller dans Word, NotePad ou n'importe quel autre soft et travailler dessus tout en ayant ma fenêtre qui reste visible au premier plan et qui se met à jour si un fax arrive.
    ex : j'écris dans Word, un fax arrive, mon nombre de fax s'incrémente mais mon curseur reste toujours dans Word, celà est "transarent" pour l'utilisateur.

    Fonctionnement avec Outlook 2000 :
    Maintenant, j'ai un problème avec 1 seul outil : Outlook (tout du moins le 2000).
    Avec Outlook, je ne peux pas travailler correctement. Ma fenêtre (le Form.show) reprend la main à Outlook toutes les secondes.
    On ne peut même pas créer un nouveau mail et écrire dedans car à peine après avoir tapé 2 lettres, mon "alerteur" prend la main et le curseur n'est plus sur Outlook.
    On a même à peine le temps de sélectionner un autre mail pour le lire.
    Les utilisateurs ne peuvent dans ce cas clairement plus travailler avec Outlook tant que ma fenêtre est présente et qu'elle se rafraichit toutes les secondes.

    Objectif :
    Faire en sorte que ma fenêtre ne prenne pas la main toutes les secondes à Outlook et se conmporte avec ce dernier comme avec toutes les autres applis.

    J'espère avoir été un peu plus clair
    en tout cas, encore une fois merci à tous pour votre aide.

  16. #16
    Membre expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Points : 3 685
    Points
    3 685
    Par défaut
    C'est pourquoi je pense que ma solution (sans ton Form.Show) répondrait à ton problème.
    Elle ne fait que mettre la fenetre au premier plan mais sans lui donner le focus.
    Si cela ne fonctionne pas, peux tu décrire ce qui se passe ?

  17. #17
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 107
    Points : 16 633
    Points
    16 633
    Par défaut
    Objectif :
    Faire en sorte que ma fenêtre ne prenne pas la main toutes les secondes à Outlook et se comporte avec ce dernier comme avec toutes les autres applis.
    Pourtant ton programme prendra toujours la main durant la recherche de nouveau Mails, rendre le Form non visible durant cette recherche et ne la faire apparaitre qu’un temps (que tu définirais a quelque secondes) pour alerte permettrai de limiter ce temps de prise de main (qui devient une prise de tête pour toi ).

    Je n’ai pas relut a 100/100 toute la discussion, mais comme je suivais tout de même, voici une proposition.
    Dans le programme ou ce trouve le Timer de surveillance d’arrivée de Mail, donc la procédure Timer1_Timer() , détecter si Outlook 2000 est en cour, si oui, faire un AppActivate "Outlook" en fin de la procédure, au moins il redonnera la main à Outlook et si la fenêtre de ton programme de surveillance n’est pas visible, la durée prise sur Outlook sera quasiment imperceptible.

  18. #18
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2006
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Bonjour à tous,

    Pour mon problème, j'ai fais au plus simple :

    J'ai remonté le show dans une fonction précédente, je ne fais donc qu'un seul .show (je l'ai sorti du timer).
    Et dans le timer, je ne fais qu'une modification du libellé via un ".Caption".

    Le désavantage de cette solution est que la popup est toujours présente même s'il n'y a pas de fax à traiter (à ce moment là, j'indique "Pas de fax").

    Vous allez peut-être me lapider, me huer pour ne pas l'avoir fait tout de suite mais je me doutais que c'était faisable, je voulais néanmoins persister dans l'utilisation du .show à chaque seconde par curiosité.
    Car j'aimerai comprend pourquoi il n'y a qu'Outlook qui puisse poser problème de la sorte... On sait jamais, ça pourrait servir pour plus tard.
    Toujours dans cette optique, je vais aller tester le .show toutes les secondes sur un poste pourvu de Outlook2003 voir s'il y a une réaction différente du Outlook2000.

    En tout cas merci à tous pour vos réponse, ce forum est très vivant, les réactions sont rapides et c'est un vrai bonheur de discuter avec des gens qui s'y connaissent. encore merci.

Discussions similaires

  1. form.show avec connexion données
    Par looping dans le forum Bases de données
    Réponses: 3
    Dernier message: 10/10/2011, 18h17
  2. lien avec outlook
    Par LeBauw dans le forum Access
    Réponses: 3
    Dernier message: 15/09/2005, 10h26
  3. Envoi mail avec Outlook accusé de réception
    Par KapoueMan dans le forum Access
    Réponses: 2
    Dernier message: 14/04/2005, 10h41
  4. Utiliser mySmartUpload.Form("Toto") avec aspSmartU
    Par PrinceMaster77 dans le forum ASP
    Réponses: 8
    Dernier message: 15/02/2005, 13h53
  5. Réponses: 5
    Dernier message: 27/08/2003, 11h45

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