Re: probleme de saisie dans table avec port serie |
Sujet: Re: probleme de saisie dans table avec port serie par lass1250 sur 20/5/2009 4:27:50 Correction a jours Je galere depuis quelque jours sur ce probleme Ce que je veux obtenir 1 - ouverture de ma fenetre directement en saisie sur le champs NoTag (Resolu) Resolu avec la fonction DonneFocus(NoTag) 2 - via la lecture du port renseigne NoTag qui via une requette alimente Nom et description Non resolu il faut que lise 2 fois pour que NoTag renseigne bien NoTag Je peux comprendre pour la premiere fois Car le buffer est vide de plus il faut que je tappe un ENTER manuel pour alimenter le reste de la ligne 3 - une fois informer Nom et descrition NoTag Change de ligne et reprend la saisie et ainsi de suite,sans aucune manipulation du clavier ni de la souris. Non resolu le changementde ligne s'effectue grace a EnvoieTouche ("{TAB 4}",Table.NoTag) Mais il faut faire un retour ENTRE manuel pour continuer Lors de l'ouverture de la fenetre ,Je veux que l'usager presente son code barre et qui se lit ainsi de suite sans toucher au clavier ni souris les lots a lire qui peut etre de 200 a 300 unites j'ai 3 lecteur qui effectue le travail similiaire relie a un meme serveur Donc une table avec saisie sur NoTag ,l'usager presente le code barre identification et validation avec la requete et un autre code barre ainsi de suit sans manipulation de la souris ou du clavier La seule manipulation de la souris sera sur le bouton de fermeture J'ai une Table memoire alimenter par le port serie Ma table contient 3 colonne soit NoTag ,Nom et Description NoTag est en saisie et les autre en affichage alimente par une requete Pour assigner à la touche ENTREE l'action de générer une nouvelle ligne dans la colonne, - dans le détail de la table, cocher "Retour à la ligne par ENTREE" - dans le détail de la colonne NoTag,Defilement Retour a la ligne automatique //******************** Probleme a regler ************* Double lecture pour saisir la bonne information Comment faire un ENTER software (dans le buffer il y a un cr et lf) Je lit 14 caractere et 12 sont bons 12+cr+lf J'ai essayer EnvoieTouche("{ENTREE 2 }",Table.NoTag) Caract(13) + caract(10) Peut etait-il mal placer Je suis pas certain de l'emploie du timer et sEvenemt Faut-il implanter un thread ,multitache ? si oui comment Faut-il vider le buffer Tous vos commentaire sont bons s'il vous plait commenter avec du code // ******************* voila le code ************* //******************** Declaration global fenetre7 GLOBAL Port est un entier gsGuyBuffer est une chaîne LOCAL Taux est un entier Parite est un entier BitDonnee est un entier BitStop est un entier Port=1 Taux=9600 Parite= 0 BitDonnee=8 BitStop=1 //SI sOuvre(Port,5000,5000)=FAUX ALORS SI sOuvre(Port,5000,5000,sTimeoutDéfaut,Vrai)= Faux ALORS Erreur("Erreur lors de l'ouverture du port "+Port) Ferme() FIN sFixeParamètre(Port,Taux,Parite,BitDonnee,BitStop) Timer("sReception",50,1) //-- Fin du code généré par l'assistant sEvénement(1,sEveCaractèreReçu,SRECEPTION) //**************** fermeture fenetre7***************** // Fermeture du port sFerme(Port) sFinEvénement(1) // ************** Initalisation de Table **************** DonneFocus(Table.NoTag) // ***************** initialisation de NoTag ************* // ***************** entree de NoTag ************** SRECEPTION() // **************** sortie de NoTag *************** // Initialise la requête SI PAS HExécuteRequête(REQ_VetementTag,hRequêteDéfaut,NoTag) ALORS Erreur("Erreur d'initialisation de la requête"+RC+HErreurInfo()) RETOUR FIN // lecture du premier enregistrement de la requête HLitPremier(REQ_VetementTag,NoTag) NoTag = REQ_VetementTag.NoTag Prenom = REQ_VetementTag.Prenom Nom = REQ_VetementTag.NomEmployer Description = REQ_VetementTag.DescService HAnnuleDéclaration(REQ_VetementTag) // permet de d'aller sur la prochaine ligne EnvoieTouche("{TAB 4 }",Table.NoTag) //EnvoieTouche("{ENTREE 2 }",Table.NoTag) // non operationnel test // reprend la possession de la ligne RepriseSaisie(NoTag) // **************** Procedure Locale ********************** FONCTION SRECEPTION() //Info ("guy1renvoueyer",NoTag) wtaille est un entier wtaille2 est un entier sBuffer est une chaîne FlagOK est un booléen nbcaralire est un entier nbcaralire=14 FinTimer(1) wtaille=sDansFileEntrée(Port) FlagOK=Faux // Lecture des informations sur le port série en fonction de la condition d'arrêt SI wtaille>nbcaralire ALORS sBuffer=sLit(Port,nbcaralire) FlagOK=Vrai Trace(Port,sBuffer,wtaille) NoTag = Gauche(sBuffer,12) FIN // Traitement des informations lues sur le port série SI FlagOK // Info(buffer) FIN Timer("sReception",50,1) RENVOYER(NoTag) |