PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Lecture d'un code barre via un terminal
Lecture d'un code barre via un terminal
Débuté par Jeremy, 19 oct. 2016 09:24 - 14 réponses
Posté le 19 octobre 2016 - 09:24
Bonjour,

J'aimerais savoir comment et sur quel événement je peux récupérer la lecture du code barre qui va être effectuée sur un terminal CB Honeywell MX7 Tecton ?
A chaque lecture d'un code barre je souhaite envoyer le résultat dans une table.

Merci d'avance.
Membre enregistré
1 623 messages
Popularité : +100 (114 votes)
Posté le 19 octobre 2016 - 11:07
En principe, la lecture du code barre est une émulation clavier.
Il faut donc placer le focus sur un champ de saisie et flasher le code barre.
Le champ de saisie sera alors rempli.
Il suffit ensuite de récupérer le contenu du champ de saisie
Posté le 19 octobre 2016 - 11:56
On n'a pas la possibilité de détecter l'appui sur la touche concernée ?

Merci encore
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 19 octobre 2016 - 14:37
bonjour
Ttu peux par exemple adapter ceci

(dans l-init du projet)
EXTERNE "KEYCONST.wl"

(dans la prise de focus d'une fenêtre)
Evénement("CaptureClavier",".*",WM_KEYDOWN)

(ta procédure)
PROCEDURE CaptureClavier(Message, wParam, lParam)
SI wParam=13 ALORS
DonneFocus(btnval)
FIN


Bon dev
Posté le 19 octobre 2016 - 14:58
Merci pour l'info je vais tester cela.
Posté le 20 octobre 2016 - 16:38
Bonjour,
Je ne comprends pas très bien à quoi correspondent "Message" et "lParam" dans la procédure car ils ne sont pas utilisés ?

Merci encore.
Posté le 20 octobre 2016 - 17:14
VOici ce que j'ai fait, peut-être que je me trompe car cela ne fonctionne pas.

J'ai ajouté un traitement optionnel sur : Prise de focus (WM_SETFOCUS) de FEN_Prepa
DAns lequel j'ai ajouté ce code :
WM_KEYDOWN est un entier = 13
Evénement("CaptureClavier", "SAI_EAN", WM_KEYDOWN)


Au niveau de la procédure CaptureClavier, voici mon code:
Procedure CaptureClavier(Message, wParam, lParam)

SI wParam=13 ALORS
HExécuteRequête(REQ_recherche_lignes_cde,hAvecFiltre,gsNumCommande,MoiMême)
HLitPremier(REQ_recherche_lignes_cde)
SI HTrouve(REQ_recherche_lignes_cde) ALORS
TableAjoute(FEN_Prepa.TABLE_prepa_en_cours,REQ_recherche_lignes_cde.Code_article+TAB+REQ_recherche_lignes_cde.quantite+TAB+REQ_recherche_lignes_cde.Unite+TAB+"")
FIN

FEN_Prepa.SAI_EAN=""
FIN



J'ai certainement loupé quelque chose ou alors je ne comprends pas comment fonctionne les événements. j'ai consulté l'aide mais ça ne m'avance pas énormément.
Pourriez-vous m'éclairer ?

Merci encore pour votre aide.
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 21 octobre 2016 - 09:20
Bonjour
En premier dans l'init de ton projet il faut mettre :
EXTERNE "KEYCONST.wl"

ensuite ta ligne
WM_KEYDOWN est un entier = 13 ne sert à rien

après met toi en débog et trace wParam pour connaître ce que wParam reçoit quand tu appuies sur ton scan.
(voir table ascii)
le 13 est pour exemple c'est égal à RC (Carriage Return )
Posté le 21 octobre 2016 - 12:09
Bonjour,
Donc voici ce que j'ai fait et qui fonctionne mais pas comme je le souhaiterais.

A l'init du projet j'ai donc ajouter la ligne :
EXTERNE "KEYCONST.wl"


Dans la prise de focus (WM_SETFOCUS) de la fenêtre FEN_Prepa :
WM_KEYDOWN est un entier
Evénement("CaptureClavier", "SAI_EAN", WM_KEYDOWN)


Procédure CaptureClavier:
Procedure CaptureClavier(Message, wParam, lParam)

SI wParam=13 ALORS
HExécuteRequête(REQ_recherche_lignes_cde,hAvecFiltre,gsNumCommande,MoiMême)
HLitPremier(REQ_recherche_lignes_cde)
SI HTrouve(REQ_recherche_lignes_cde) ALORS
TableAjoute(FEN_Prepa.TABLE_prepa_en_cours,REQ_recherche_lignes_cde.Code_article+TAB+REQ_recherche_lignes_cde.quantite+TAB+REQ_recherche_lignes_cde.Unite+TAB+"")
FIN

FEN_Prepa.SAI_EAN=""
RepriseSaisie(FEN_Prepa.SAI_EAN)

FIN


Sauf que si je clique sur un autre champ cela ne fonctionne plus.

J'ai donc remplacé l’événement par :
Evénement("CaptureClavier",".*",WM_KEYDOWN)


Mais cela ne fonctionne plus du tout.

Pouvez-vous m'aider ?

MErci encore.
Posté le 24 octobre 2016 - 09:14
Bonjour,
Désolé de relancer mais auriez-vous un peu plus d'informations suite à ma question ci-dessus ?
Merci encore pour votre aide.
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 24 octobre 2016 - 10:51
Bonjour,
déjà ta ligne :
WM_KEYDOWN est un entier Ne sert à rien
Après met toi en debog et regarde si tu entres bien dans ta procédure quand tu scan.
Bien sur ton champ SAI_EAN il faut qu'il est le focus et en début de sortie de ce champ tu peux rajouter l'évènement.
C'est à toi d'adapter le code suivant tes besoins.
Posté le 24 octobre 2016 - 15:52
Bonjour,
Merci pour la réponse.
Si je ne mets pas la ligne "WM_KEYDOWN est un entier" WM_KEYDOWN n'est pas reconnu...

A la prise de focus sur la fenêtre, j'ai ce code : Evénement("CaptureClavier", "SAI_EAN", WM_KEYDOWN)

Cependant si je clique sur une table présente dans la fenêtre et que je scanne de nouveau, je n'ai plus le focus sur le champ SAI_EAN, donc ça ne fonctionne plus.

Comment puis-je faire pour que dès que je scanne, le focus se remettre systématiquement sur le champ SAI_EAN ?

Désolé pour le dérangement...
Posté le 24 octobre 2016 - 16:07
Bonjour

WM_KEYDOWN n'est pas une variable, mais une constante de windows..

Donc soit il faut inclure le fichier texte des constantes windows (avec
le mot clé EXTERNE) soit il faut remplacer WM_KEYDOWN par la valeur
numérique correspondante (voir google)

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com

Le 10/24/2016 à 7:52 AM, Jeremy a écrit :
Bonjour, Merci pour la réponse. Si je ne mets pas la ligne "WM_KEYDOWN
est un entier" WM_KEYDOWN n'est pas reconnu...

A la prise de focus sur la fenêtre, j'ai ce code :
Evénement("CaptureClavier", "SAI_EAN", WM_KEYDOWN)

Cependant si je clique sur une table présente dans la fenêtre et que je
scanne de nouveau, je n'ai plus le focus sur le champ SAI_EAN, donc ça
ne fonctionne plus.
Comment puis-je faire pour que dès que je scanne, le focus se remettre
systématiquement sur le champ SAI_EAN ?

Désolé pour le dérangement...
Posté le 24 octobre 2016 - 16:42
Merci pour la réponse.
Cependant, qu'en est-il du second point ?

Merci encore.

A la prise de focus sur la fenêtre, j'ai ce code : Evénement("CaptureClavier", "SAI_EAN", WM_KEYDOWN)

Cependant si je clique sur une table présente dans la fenêtre et que je scanne de nouveau, je n'ai plus le focus sur le champ SAI_EAN, donc ça ne fonctionne plus.

Comment puis-je faire pour que dès que je scanne, le focus se remettre systématiquement sur le champ SAI_EAN ?
Membre enregistré
189 messages
Popularité : +4 (8 votes)
Posté le 25 octobre 2016 - 08:58
Bonjour,
Par exemple
à la fin de ton code quand tu clic sur ta table fait un : RepriseSaisie(FEN_Prepa.SAI_EAN)