PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2024 → Scan d'un code barre (EAN13) le buffer reviens vide.
Scan d'un code barre (EAN13) le buffer reviens vide.
Iniciado por prog, 29,mar. 2006 17:57 - 6 respuestas
Publicado el 29,marzo 2006 - 17:57
Lorsque je scan une code barre Ean13, dans le champ de saisie en cours, j'ai bien la valeur de celui-ci qui s'affiche. Ce que j'aimerais faire par contre c'est que peut importe le focus pris dans ma fenetre, un traitement s'execute au scan d'un code barre.

Ainsi, dans le code d'initialisation de ma fenetre j'ai :

sOuvre(1,5000,5000,50)
sFixeParamètre(1,19200,0,8,0)

gnTimer = Timer("Réception",20)


La Procédure Réception correspond à:

IF sDansFileEntrée(1)>0 THEN
Trace(sLit(1,sDansFileEntrée(1)))
END


La valeur retournée est nulle. A quel niveau se trouve mon erreur?
Merci de votre aide.

Cordialement.
Matt.
Publicado el 29,marzo 2006 - 19:47
Ca ne fonctionne pas en mettant ta procedure dans "A chaque modification
de " ?

Pour une application similaire, procedure a chaque scan, j'ai simplement
fait suivre un bouton avec la procedure au champ de saisie et parametre
le lecteur pour qu'il envoie a chaque scan un Tab suivie d'un retour
chariot, a la fin de la procedure je remet le focus sur le champ de saisie.
Publicado el 29,marzo 2006 - 20:55
Justement, j'aimerais eviter d'avoir a redonner le focus a mon champ. J'aimerais pouvoir intercepter le code barre et ce peut importe ou soit le focus. c'est pour cela que j'ai mis un timer a l'initialisation de la fenetre qui appelle ma procedure reception.
Publicado el 30,marzo 2006 - 02:10
Bonjour,

Je pense surtout que les parametres de com ne sont pas corrects et que rien n'arrive.

Concernant la lecture du port, je préfère:

sOuvre(NumPort,512,512) //suffit amplement

*** Reception***
Buffer=""
TANTQUE sDansFileEntrée(sPort)
Buffer+=sLit(sPort,1)
FIN

si Taille(Buffer)= la taille attendue alors
//Traitement
...
fin

Ca fonctionne très bien depuis des années sur des matériels très différents.

*******
Une autre voie (préconisée): sEvenement ... voir la doc.

Bon dev,
PEGOS
Publicado el 30,marzo 2006 - 11:55
Le lecteur est connecté en rs232



Le code :
//Initialisation de la fenetre

sOuvre(NumPort,512,512) //suffit amplement
gnTimer = Timer("Reception",20)

//Procédure Reception***
Buffer=""
TANTQUE sDansFileEntrée(sPort)
Buffer+=sLit(sPort,1)
FIN
Trace(Buffer)
//Fin Procédure Reception***


Ne renvoie que des chaine vide

De même, avec sEvenement :

//Déclaration globale du projet

sOuvre(1,512,512,sTimeoutDéfaut,Vrai)
sEvénement (1, sEveCaractèreReçu , "Lecture")

//Procédure Lecture ***
Info ( sLit (1, sDansFileEntrée (1)))
//Fin Procédure Lecture ***



La procédure ne renvoie rien du tout.
Publicado el 30,marzo 2006 - 13:21
Bonjour,

Pour t'assurer que les infos sont bien envoyées, essaie en premier avec Hyperterminal.
Si ça ne fonctionne pas, change de PC; peut-être le port HS ?
Quel est le matériel et est-il bien configuré ?

PEGOS
Publicado el 30,marzo 2006 - 19:16
Bonjour,

Apriori le lecteur est connecté en RS232 ou USB ?

Si oui, dans le même cas de figure j'ai fait mon ouverture de port COM à l'ouverture de l'application en précisant un sEvenement.
Donc a chaque fois qu'il y a une écriture sur le port COM, je lis ce qui y a d'ecrit et je traite.

Ai-je répondu ?

Ne pas oublier de fermer le port COM en sortant !

A bientot