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 :

Affichage d'une valeur dans une zone de texte : Problème d'affichage


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut Affichage d'une valeur dans une zone de texte : Problème d'affichage
    Bonjour à tous ...

    Je débute en VB6 et je suis en train de tenter de faire de la communication avec le port COM de mon pc avec un appareil de mesure.

    J'arrive à récupérer une valeur depuis mon appareil de mesure mais le problème que j'ai c'est que je n'arrive pas à l'afficher dans une zone de texte de mon formulaire.

    Voici mon code :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Private Sub MSComm1_OnComm()
    'OnComm et exécuté chaque fois que la valeur en paramètre est modifiée (MSComm1)
     
        Dim str_tampon As String
     
        frmMain.lab_AffichageMesure.Alignment = 2
     
        'La ligne Terminal de données prêt est activée lors de l'ouverture du port (si = TRUE)
        frmMain.MSComm1.DTREnable = True
     
        ' La ligne Demande pour émettre est active au moment de l'ouverture du port et inactive lors de sa fermeture
        frmMain.MSComm1.RTSEnable = True
     
        'Si RThreshold = 1, le contrôle MSComm génère l'événement OnComm chaque fois qu'un caractère est
        'placé dans le tampon de réception
        frmMain.MSComm1.RThreshold = 1
     
          'Indique le mode d'extraction des données par la propriété Input
        MSComm1.InputMode = comInputModeText
     
        str_tampon = ""
        'Récupération de la valeur de l'appareil (INPUT)
        str_tampon = frmMain.MSComm1.Input
     
        If (str_tampon = "") Then
     
            frmMain.lab_AffichageMesure.Caption = "*****.*****"
            Exit Sub
     
        Else
     
        MsgBox str_tampon
        frmMain.txt_retour_mesure.Text = str_tampon
        frmMain.txt_retour_mesure.Text = str_tampon
        frmMain.txt_retour_mesure.Refresh
     
        End If
     
    End Sub
    Lorsque j'exécute mon code pas à pas avec des points d'arrêt, le contenu de ma variable str_tampon est bien la valeur qui est affichée sur mon appareil de mesure mais ce contenu, ne s'ajoute pas dans ma zone de texte.

    Savez-vous d'où peut provenir l'erreur ?
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

  2. #2
    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
    La propriété RTreshold est à 1 ce qui signifie que l'événement OnComm se produit dès qu'un caractère est reçu dans le tampon de réception de ton port Com.
    A ce moment là tu initialises ta variable str_tampon puis tu y places le caractère reçu et ainsi de suite pour chaque caractère mais tu remets str_tampon vide à chauque réception de caractère tu ne verras donc jamais une chaine complète !

    J'imagine que ton appareil de mesure envoit un CrLf à la fin d'une mesure (sur HyperTerminal, vérifie que à chaque mesure, le texte affiché passe à la ligne). Si c'est bien le cas, tu peux sabrer assez largement dans ton code (je n'ai pas testé le code suivant mais dans les grandes lignes c'est ce que je ferais) :

    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 MSComm1_OnComm()
    Static str_tampon As String
    Dim i as byte
     
    'Pourquoi mettre cette ligne ici ? Mets là ailleurs plutot que de la faire exécuter à chaque réception d'un caractère    
    frmMain.lab_AffichageMesure.Alignment = 2
     
    'La encore il vaut mieux soit le déclarer dans les propriétés en mode conception ou le mettre au from load par exemple, mais pas ici !    frmMain.MSComm1.RThreshold = 1
    
    'Idem, pas ici
    'Indique le mode d'extraction des données par la propriété Input
    MSComm1.InputMode = comInputModeText
        
        'Récupération de la valeur de l'appareil (INPUT)
        str_tampon = str_tampon & frmMain.MSComm1.Input
        
        i = instr(str_tampon, VbCrLf)
        If i then
          frmMain.txt_retour_mesure.Text =left(str_tampon,i - 2)
          frmMain.txt_retour_mesure.Refresh
          str_tampon = mid(str_tampon,i + 2)
        End If
    End Sub
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  3. #3
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Merci pour cette réponse rapide et très complète ... ...

    J'ai juste une question peut être un peu bête mais je tente ...

    Dans le code ci-dessous :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Private Sub MSComm1_OnComm()
    'OnComm et exécuté chaque fois que la valeur en paramètre est modifiée (MSComm1)
    
        Dim str_tampon As String
        
        frmMain.txt_retour_mesure.Text = "fasdffdsafsadf"
        
        'La ligne Terminal de données prêt est activée lors de l'ouverture du port (si = TRUE)
        frmMain.MSComm1.DTREnable = True
    
        ' La ligne Demande pour émettre est active au moment de l'ouverture du port et inactive lors de sa fermeture
        frmMain.MSComm1.RTSEnable = True
        
        'Si RThreshold = 1, le contrôle MSComm génère l'événement OnComm chaque fois qu'un caractère est
        'placé dans le tampon de réception
        frmMain.MSComm1.RThreshold = 1
        
        'Indique le mode d'extraction des données par la propriété Input
        MSComm1.InputMode = comInputModeText
        
        'Récupération de la valeur de l'appareil (INPUT)
        str_tampon = str_tampon & frmMain.MSComm1.Input
        
        If (str_tampon = "") Then
            frmMain.lab_AffichageMesure.Caption = "*****.*****"
            Exit Sub
        Else
            MsgBox str_tampon
            frmMain.txt_retour_mesure.Text = str_tampon
            frmMain.txt_retour_mesure.Refresh
            str_tampon = ""
        End If
    End Sub
    J'ai une ligne où j'ai mis un message box pour avoir qqch qui s'affiche à l'écran et c'est bien la valeur de mon instrument de mesure que j'ai dans str_tampon. Et cette valeur, dans la ligne du dessous, je dis qu'il faut la mettre dans la texte box ... ... étant donné que ma valeur n'est pas NULL pourquoi elle ne vient pas se mettre dans la texte box ??? (voir paragraphe en rouge dans le code) ...

    C'est peut être moi qui ai mal compris ... et j'en suis désolée d'avance ...

    Merci pour ces précisions ...

    [ PS : Je n'ai pas encore fait toutes les modifications que tu m'as dit mais j'aimerais déjà commencer par comprendre pourquoi je n'ai pas d'affichage ... )
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

  4. #4
    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
    Si tu as quelquechose d'affiché dans ta messageBox, tu devrais avoir la même chose dans ton controle text puisque tu y affiches la valeur de la même variable. Tu es vraiment SUR ET CERTAIN que quand tu as quelquechose affiché dans ton messagebox, la ligne suivante n'affiche rien dans ton controle text ??
    Personnellement j'utilise plutot le "Debug.print" que MsgBox pour controler la valeur de mes variables en cours d'execution, cela n'interrompt pas le programme à l'inverse d'une message box. Quand tu interromps ton programme tu lui donnes tout le temps nécessaire pour remplir le buffer du port com de plus d'un caractère.
    Pour VB6 : N'oubliez pas d'aller voir la FAQ et les Tutoriels
    Vous trouvez une reponse particulierement utile ? Votez pour !

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Points : 2 416
    Points
    2 416
    Par défaut
    Bonjour,
    Si la propriété Multiline de ton textBox est à true et que l'affichage (sans espace) est plus large que la largeur du TextBox, tout le texte est mis ligne par ligne et la 1ère n'est pas visible.
    Essaye en élargissant la zone de texte pour être sûr que la largeur est suffisante.
    A+

  6. #6
    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,

    Il n'est par ailleurs pas impossible que ton tampon contienne en son début un caractère exotique ...

    essaye dans un premier temps ceci (juste pour y voir clair) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    While Asc(Mid(str_tampon, 1, 1)) < 32
      str_tampon = Mid(str_tampon, 2)
    Wend
    Text1.Text = Trim(str_tampon)
    et dis-nous.
    Si celà ne va toujours pas, nous analyserons chaque caractère de ce tampon et nous saurons pourquoi.

  7. #7
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 087
    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 087
    Points : 16 673
    Points
    16 673
    Par défaut
    Je trouve curieux de re paramétrer le protocole de communication dans l'évènement _OnComm(), qui, tu le mets en commentaire dans ton code, se produit à chaque évènement réception ou envoi.

    A mon avis il faudrait paramétrer en dehors de cette procédure, puis dans la procédure d'évènement _OnComm(), tu ne fais que la récupération, cela devrait te permettes de ne pas perdre des données entre deux passages événementiels.
    pourquoi pas, pour remercier, un pour celui/ceux qui vous ont dépannés.
    saut de ligne
    OOOOOOOOO👉 → → Ma page perso sur DVP ← ← 👈

  8. #8
    Membre averti Avatar de snoopy69
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 737
    Points : 395
    Points
    395
    Par défaut
    Bonjour à tous ... merci pour toutes ces réponses et ces précisions ...

    Alors comme me l'a dit : ucfoutu j'avais bien des caractères exotiques et c'est pour cela que mon affichage ne fonctionnait pas ... ...

    Maintenant le problème est réglé ... ... ... ... cela à mis du temps mais c'est oki ...

    Je vous remercie tous pour votre aide ... @ tout bientôt ...

    Salutations ...

    S'Noop ... y
    ... Je me méfie de l'irrespect mais je revendique le droit à la frénésie ...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 3
    Dernier message: 24/10/2011, 10h27
  3. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  4. Réponses: 6
    Dernier message: 12/12/2006, 18h58
  5. Mettre une valeur d'une table dans une variable
    Par Raphou96 dans le forum Access
    Réponses: 5
    Dernier message: 06/02/2006, 15h19

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