Stocker les commandes envoyées au port Comm

Lokomass Messages postés 191 Date d'inscription jeudi 7 janvier 2010 Statut Membre Dernière intervention 15 mai 2013 - 4 janv. 2010 à 22:55
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 9 févr. 2010 à 10:23
Bonsoir à tous,

J'établis une communication avec un Switch grâce au port Comm.
J'envoi des commandes à ce Switch à travers mon Textbox qui me sert en gros d'hyperterminal qui communique avec le commutateur.
J'aimerais, (comme dans Teraterm par exemple) cré un historique de commandes. Elle sont enregistrées à partir du moment ou je tape "Entrée" pour les envoyées au Switch les unes à la suite des autre dans un tableau par exemple.

Voila ce que j'ai fais :

Private Sub txtTerm_KeyPress(KeyAscii As Integer)
    ' Si le port de communication est ouvert...
    If MSComm1.PortOpen Then
        ' Envoie les touches frappées vers le port de communication.
        MSComm1.Output = Chr$(KeyAscii)
        If KeyAscii = vbKeyReturn Then 'Lorsque j'envoi mes données au Switch avec Entrée
              If Not Phrase = "" Then 'Si ma commande n'est pas vide
               Tablo(Table) = Phrase 'Je la stock dans mon tableau
                Table = Table + 1 'Auquel j'ajoute un indice pour la prochaine commande
                Phrase = "" 'Je vide la phrase
              End If
        Else
              Phrase = Phrase & Chr$(KeyAscii) 'Tant que je n'envoi pas la commande au Switch je rempli mon buffer
        End If
        ' À moins que le mode Écho ne soit activé,
        ' le contrôle texte n'a pas besoin d'afficher les touches.
        ' En général, un modem renvoie un caractère en retour.
        If Not Echo Then
            ' Place la position à la fin du terminal.
            txtTerm.SelStart = Len(txtTerm)
            KeyAscii = 0
        End If
    End If
End Sub



Jusque la OK. C'est la que ça se corse, j'aimerais, lorsque j'appuie sur la touche UP du clavier, qu'il m'affiche la dernière commande tapée dans le prompt, si je retape UP, la commande tapée encore avant, etc etc jusqu'à la première.
J'aimerais également pouvoir faire la chose inverse à savoir si je tape DOWN on affiche dans le prompt la commande suivante dèjà tapée (je n'ai pas encore écrit cette fonction)

J'ai donc fait ceci :

Private Sub txtTerm_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode vbKeyUp Or KeyCode vbKeyDown Then KeyCode = 0
If KeyCode = vbKeyUp Then
    MSComm1.Output = Tablo(Table - 1)
    Table = Table - 1
    Exit Sub
Trache:
    Table = 1
End If
End Sub


Alors pour ce code a mon avis plein de chose sont a revoir.
Je vous explique ce que j'ai actuellement comme résultat et ce que je veux vraiment avoir.

Je tape une série de commande au Switch :
Dans l'ordre :

Cisco_Bdx#a
Cisco_Bdx#z
Cisco_Bdx#e
Cisco_Bdx#r
Cisco_Bdx#t
Cisco_Bdx#y
Cisco_Bdx#
Cisco_Bdx#
Cisco_Bdx#



J'envoi donc "a", "z", "e", "r", "t", "y" et entrée entrée entrée

J'aimerai une fois en bas, le prompt normal (Cisco_Bdx#) si je fais UP j'ai => Cisco_Bdx#y (y qui s'affiche dans le prompt)
Si je refais un UP, je n'aurai plus "y" mais "t" => Cisco_Bdx#t. Une fois ici, si je fais un DOWN j'aimerai avoir => Cisco_Bdx#y.

Je ne sais pas du tout si je suis clair, une sorte d'historique des commandes passées, pouvoir naviguer entre elles, le plus dur je pense étant l'affichage de celles-ci.

Actuellement moi, quand j'envoi la même chose ci - dessus (j'ai des phenomenes etranges encore mais bon)

Une fois en bas, je fais UP => Cisco_Bdx#y, je refais UP, il ne m'efface pas la commande précédante (normal je lui demande pas dans le code lol) , il m'affiche donc => Cisco_Bdx#yt, encore un UP => Cisco_Bdx#ytr


Voila en gros ce soucis d'affichage dans un premier temps et apres la fonction avec vbKeyDown pour l'inverse qui me manquera.

Merci de votre aide

4 réponses

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
6 janv. 2010 à 08:02
chose toute bête :

Private Sub txtTerm_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode vbKeyUp Or KeyCode vbKeyDown Then KeyCode = 0
If KeyCode = vbKeyUp Then
    MSComm1.Output = Tablo(Table - 1)
    Table = Table - 1
    Exit Sub
Trache:
    Table = 1
End If
End Sub


tu remet le KeyCode à 0
du coup, quand ton test :

If KeyCode = vbKeyUp Then

ne pourra jamais être vrai ^^

j'ai pas regardé le détail, mais dans la logique, faire plutôt :

Private Sub txtTerm_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyUp Then
    MSComm1.Output = Tablo(Table - 1)
    Table = Table - 1
    KeyCode = 0
    Exit Sub
Trache:
    Table = 1
End If
End Sub


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0