PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Application windevMobile
Application windevMobile
Iniciado por LE MOAL, 10,mar. 2009 12:42 - 4 respuestas
Publicado el 10,marzo 2009 - 12:42
Bonjour,

Je développe pour un client une application windevMobile pour un datalogic memor.
J'ai une fenêtre avec un champ en saisie.
A l'affichage de cette fenêtre je positionne le focus sur mon champ en saisie et lorsque j'utilise la touche SCAN du Datalogic je récupère automatiquement le code barre scanné par ce dernier.

Afin de pouvoir gérer un certain nombre de touche de fonction du datalogic, j'ai posté un évènement avec WM_KEYDOWN. Je récupère bien l'ensemble des touches manipulés par l'utilisateur mais mon code barre lors du Scan ne s'affiche plus dans mon champ de saisie.

Quelqu'un pourrait-il m'indiquer dans quelle structure ou par quel biais je peux retrouver ce code barre, sachant que la structure _EVE ne le contient pas.

Merci d'avance
Publicado el 10,marzo 2009 - 19:05
Bonjour,

Pouvez-vous indiquer le code que vous utilisez dans la procédure WM_KEYDOWN ?


Cordialement,
Gautier Cuquemelle

-------------------------------------
www.v-ingenierie.com

Intégrateur en solutions de collectes
de données par code barre et RFID
-------------------------------------
Publicado el 10,marzo 2009 - 23:50
Dans la partie initialisation de mon champ en saisie,
nRetSai=Evénement("Proc_EvenementSaisie","SAI_cb",WM_KEYDOWN)


Dans la procedure Proc_evenementSaisie
PROCEDURE Proc_evenementSaisie()

sCodBar est une chaîne = ""

DélaiAvantFermeture(100)
Erreur("Le Code Barre saisie n'est pas valide"+sCodBar, ErreurInfo()) // Message d'avertissement car le fichier est vide


// Test de la touche de fonction utilisée
SELON _EVE.wParam
CAS 48 // Scan du code barre
sCodBar=SAI_cb
// Appel de la fonction de vérification du code barre
SI Proc_VerifieCB(sCodBar) = Faux ALORS
DélaiAvantFermeture(100)
Erreur("Le Code Barre saisie n'est pas valide"+sCodBar, ErreurInfo()) // Message d'avertissement car le fichier est vide
gsCodeBarre=""
SINON
gsCodeBarre=sCodBar
// Enregistrement dans le fichier
Proc_SauveSaisie()
FIN
Après je teste les touches VK_RETURN, VK_ESCAPE, et d'autres.
Le 48 correspond à l'activation sur la datalogic memor de la touche SCAN.

J'espère avoir été clair.
Merci
Publicado el 11,marzo 2009 - 11:42
Bonjour,

Vous n'avez pas besoin de déclarer manuellement l'évènement WM_KEYDOWN : Windev fait ça très bien de manière automatique:
- Afficher le code associé au champ (Clic droit sur le champ puis "Code")
- Repérez sous la fenêtre de code la série de petites icônes : il y en a une représentant une touche de clavier rouge, et une verte. Cliquez sur la touche rouge pour créer automatiquement la procédure associée à l'évènement WM_KEYDOWN (touche enfoncée), ou sur la touche verte pour créer la procédure WM_KEYUP (touche relachée).

Je pense que vous êtes parti dans la mauvaise direction... En général, on peut fonctionner de deux manières différentes pour gérer la lecture d'un code-barres:

1) L'émulation clavier, ou mode wedge : le scanner est un permanence activé, et renvoie les données saisies comme si elles avaient été lues au clavier. Ce mode est activé par défaut sur les dernières versions de firmware des terminaux Memor. Pour vérifier si le mode wedge est activé, cliquez sur l'icône représentant un code-barres en bas de l'écran : un menu s'ouvre permettant de configurer le scanner et d'activer/désactiver le mode wedge. Dans ce mode de fonctionnement, il est difficile de savoir si les données viennent du clavier ou du scanner.

Le scanner étant par défaut paramétré pour ajouter automatiquement le code CR a la fin du code lu, il suffit de gérer l'évènement WM_KEYUP:
SI _EVE.wParam=13 ALORS
// Appui sur Enter ou CR en fin de code
// ...
// Recherche du code et traitements complémentaires
// ...
FIN


2) Le pilotage "manuel" du scanner. Il faut dans ce cas avoir désactivé le mode wedge !! Ce mode permet d'activer et de désactiver le scanner à la demande, et de pouvoir être sur que le code a été lu par le scanner et non saisi au clavier. Il faut ajouter le composant Datalogic (inclus dans Windev) au projet.

Code d'initialisation de la fenêtre:
Initialisation(Handle(FEN_Fenêtre1),Vrai)
ActiveScanner()
SpécifieCallBack("LectureCode")


Code de fermeture de la fenêtre:
DésactiveScanner()


Procédure locale LectureCode:
Procedure LectureCode(nTypeEvenement)
SI nTypeEvenement=WM_SCAN_COMPLETE ALORS
// Récupération du dernier code lu
SAI_Code=DernierCodeBarreLu()

// Validation du code
SI VerificationCode()=Faux ALORS
Erreur("Ce code est incorrect !")
SAI_Code=""
FIN
FIN


Je ne garanti pas que ce code fonctionne car je n'ai pas de Memor à portée de main pour tester, mais ça doit être ça à peu de choses près.

Sinon il y a des boites spécialisées dans ce genre de matériel (V-Ingénierie par exemple...) qui peuvent s'occuper du développement ;-)

Cordialement,
Gautier Cuquemelle

-------------------------------------
www.v-ingenierie.com

Intégrateur en solutions de collectes
de données par code barre et RFID
-------------------------------------
Publicado el 12,marzo 2009 - 01:12
Merci pour l'ensemble de vos informations et conseils.
J'apprécie d'autant plus que la qualité de vos réponses prouve vraiment que V-ingénierie serait à même de réaliser ce type de prestation.

Merci encore et je ne manquerai pas de faire appel à vous dans ce cas là.

Cordialement