|
|
|||||||||
| t |
Dans le cadre de mon travail (je suis directeur du développement mobilité dans une société Chambérienne) je suis tous les jours en contact avec des cahiers des charges d'applications Pocket PC. La gestion de la signature client est une demande qui revient au moins 30% du temps, autant dire que c'est un sujet important.
La saisie de la signature n'est qu'une partie du problème. En effet, il faut pouvoir la stocker (de préférence dans une base de données), la récupérer pour l'afficher sur le Pocket PC, mais aussi, sur le PC car 9 fois sur 10 le PC et le Pocket PC sont synchronisés (quelle que soit la manière) et les données de la signature migrent du Pocket PC vers le PC où des traitements complémentaires peuvent être réalisés (impression papier entre autres). Celà signifie que l'on doit disposer d'une méthode qui fonctionne aussi bien sur Pocket PC que sur PC, et là les choses se compliquent. Il existe bien un composant gratuit "signature" (voir article sur ce sujet) mais il se borne à gérer la signature sur le Pocket PC et pas plus loin, donc il ne répond (dans la plus part des cas) qu'à la moitié du cahier des charges.
Je vous propose aujourd'hui du code qui fonctionnera avec eVB. Le code en lui même n'étant pas très compliqué, les développeurs PC utilisant VB ou d'autres langages n'auront normalement aucun mal à l'adapter.
Chaque caractère est codé sur 8 bits (0 à 255). Le caractère n°0 a donc comme valeur binaire 00000000 (sur 8 bits donc) et le caractère N°255 a comme valeur binaire 11111111 (toujours sur 8 bits). Nous allons utiliser le dernier bit (celui le plus à gauche) pour indiquer si le point est un début de tracé (le bit sera activé, à 1 donc). Ainsi, si le point X a pour valeur 8 et qu'il est un début de tracé il sera codé 10001000 (car 8 est codé en binaire 00001000 et on active le dernier bit). Pour "lever" un bit avec eVB il faut utiliser l'opérateur logique OR (voir dans le code eVB comment OR est mis en oeuvre). Pour vérifier qu'un bit particulier est "levé" il faut utiliser l'opérateur logique AND (voir aussi dans le code son mode d'utilisation). Cette méthode (très pratique et simple à mettre en oeuvre) pose un problème. Comme on utilise le dernier bit pour indiquer une information, il ne nous reste que 7 bits pour stocker la valeur réelle de la coordonnée ce qui réduit la taille de notre zone de signature à 255x127 ou 127x255 suivant quelle coordonnée portera l'information sur son 8ème bit. Pas cool... Heureusement il existe une astuce qui consite à diviser par 2 la valeur de la coordonnée qui porte l'information lorsqu'on stocke la valeur et à multiplier cette même valeur par 2 lorsqu'on l'utilise, on se retrouve ainsi avec une zone de saisie de signature de 255x255
Si on applique cette méthode, on génère 2 caractères à chaque point. Les points caractérisant un début de tracé (l'utilisateur pose le stylet sur la zone, événement MouseDown de eVB) ont leur le dernier bit du Y qui est "levé". Notre signature, au fur et à mesure qu'elle est tracée est stockée dans une chaine de caractères
Ce n'est pas très difficile de choisir le contrôle qui sera utilisé pour recueillir et afficher le tracé de la signature. Le contrôle PictureBox est le seul (en standard) à fournir les méthodes de dessin et les événements de récupération des mouvements du stylet nécessaires. Le système de coordonnées du PictureBox doit être IMPERATIVEMENT de type PIXEL (ScaleMode = VbPixels) sinon nous allons récupérer des Twips qui ne sont pas du tout adpatés à notre système de mémorisation.
Pour récupérer les informations de déplacement du stylet nous devons répondre aux événements MouseDown et MouveMouve du contrôle PictureBox :
Lorsque l'utilisateur pose le stylet sur le PictureBox, il faut réagir et traiter ceci comme le début d'un tracé. On réagit grâce à l'événement MouseDown. Important : on doit utiliser 2 variables globales (au moins globales à la fenêtre qui "porte" le PictureBox) qui mémorisent d'un coup sur l'autre les coordonnées du style sur le PictureBox. Ces variables sont oX et oY de type Single. On utilise aussi une variable temporaire qui est chargée de stocker la signature sous la forme d'une chaine, c'est la variable wBuffer de type String. Ces 3 variables sont utilisées dans le code suivant.
Avec le code de l'événement MouseDown et celui de l'événement MouseMove on arrive à stocker les coordonnées des points formant la signature.
Le code d'affichage parcourt la chaine contenant les coordonnées de la signature à afficher et dessine dans le PictureBox :
Comme la signature est stockée dans une chaine de caractères, il est très simple de l'enregistrer dans un champ texte d'une base de données, dans la base de registre, ou tout simplement dans un fichier texte. On a le choix !
N'oubliez pas que
les forums |
||||||||
|
|
|||||||||
|
Copyright 2001-2004 - Tous droits réservés
|
|||||||||
|
iPAQ
est un produit de COMPAQ.
|