comment simuler un enter (return ) par programmation
Utilisateur WDF
Inscrit:
19/04/2006 18:20
Post(s): 63
J'ai regle les autres problemes voir probleme de saisie dans une table


Comment simuler la touche entree (return)par programmation
pour passer pour passer a l'autre ligne sans intervention humaine
voir fonctionnement

Ce que je veux c'est de presenter le code barre au lecteur
et que l'information s'incrive direcetement dans la table aux fur et
a mesure de la presentation du code barre aux lecteurs sans manipulation
du clavier ni de la souris



J'ai essayer envoietouche de toute les manières


// **************** Fonctionnement **************************
1 - ouverture de ma fenetre directement en saisie sur le champs NoTag

2 - via la lecture du port renseigne NoTag qui via une requette alimente
Nom et description

3 - Presentement il faut que je frappe la touche enter pour changer de ligne
Normalement le fait d'alimenter par le code barre devrait suffire
donc comment simuler a la reception de la nouvelle saisie de NoTag
le retour qui a besoin pour continuer son traitement
ou le clic sur le bouton gauche de la souris

si vous avez une idee ,une remarque ,un bout de code ,je suis a bout




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

// ******************** Code ****************************

// ************** Initalisation de Table ****************

DonneFocus(Table.NoTag) // ouverture de la table sur la colonne NoTag


// ***************** initialisation de NoTag *************

SRECEPTION() //fonction qui alimente table.NoTag

// ***************** entree de NoTag **************

// **************** 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 3 }",Table.NoTag) // meilleur fonctionnement
//EnvoieTouche("{ENTREE }",Table.NoTag)

// reprend la possession de la ligne
RepriseSaisie(NoTag)
//ecranpremier(table.NoTag)//fontinnement identique RepriseSaisie(NoTag)

Contribution le : 21/05/2009 03:19

Edité par lass1250 sur 21/5/2009 3:46:37
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
avez vous essayé la méthode postmessage?

Contribution le : 22/05/2009 09:09
_________________
be aware
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
Utilisateur WDF
Inscrit:
19/04/2006 18:20
Post(s): 63
Je vous remercie pour vos reponses
mais rien vas

windev 14 26 t derniere version
windows xp sp3

Avec le trace je n'ai aucun probleme
je presente le media a la lecture
et il s'affiche sans probleme de retour

Voila la trace
00D00373EFB8<\r><\n>

evenement (buffers) longeur fixe 14 caracteres dont:

12 caractere 00D00373EFB8
1 caractere carriage return <\r>
1 caractere line feed <\n>
Donc 14 caracteres

Dans la description j'ai limiter a 12 13 14 caractere la longeur de NoTag

j'ai essayer postmessage
j'ai ajouter tableajouteligne
j'ai creer un bouton avec executetraitement(bouton,trclic)

J'ai deja effectuer des logiciel avec des lecteurs
Aussitot que le rc ou rc + lf est recu il change automatiquement

J'ai peut etre une erreur dans la desciption de la fenetre
ou je place mon code pas a la bonne position
Le trace lui fonctionne tres bien

je suis desespere

Contribution le : 25/05/2009 23:32
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
Ah, j'avais pas très bien lue vore code, le retour a la ligne par entrée ne fonctionne, si je ne me trompe pas, que si la touche entrée est actionnée, donc pas sur que postmessage fonctionne (ce que vous constaté) et meme envoietouche (a essayer tout de meme) a de forte chance de ne pas focntionner.

Par contre je suis surpris que tableajoute ou tableajouteligne ne marche pas!

Contribution le : 26/05/2009 09:05
_________________
be aware
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
Utilisateur WDF
Inscrit:
19/04/2006 18:20
Post(s): 63
j'ai fait le test suivant sans lecture serial et sans evenement
Juste lire et cecriere dans une table
fenetre vierge type wd11 insere une table memoire

champs
NoTag, Prenom ,Nom,Description sont des chaine sans saisie

voila le code

//********** initialisation table ******
SI TABLE..Vide ALORS TableAjoute(TABLE)
DonneFocus(TABLE.NoTag)
// ************** entre en saisie d'une ligne de table ***
//TableAjouteLigne(TABLE)
DonneFocus(TABLE.NoTag)
i est un entier
i = TableSelect (TABLE)
Info (i)
TableSelect (TABLE)

//
NoTag = "zzzzzzzz"
Nom = "aaaaa"
Prenom = "bbbbbb"
Description = "cccccccc"

// *** sortie d'une ligne de table ********
TableAjouteLigne(TABLE)
// ********************** fi de code ******************************

Resultat


Rien ne se passe rien c'est normal il ya aucune saisie
si je rend actif a la saisie NoTag
le table se rend a la saisi NoTag prend sa valeur "zzzzzzzz"
et attend un return pour passer pour informer le rest de la ligne
et change de ligne ainsi de suite

Faite le test

Donc le tableajouteligne ne me donne pas de ligne in me la donne seulement si
je lui fait un enter (return) a la saisie de NoTag

Si tu est capable de me le corriger donne moi le code



Je veux un code ou un exemple qui me permet a partir
d'un lecteur de type Barre code d'alimenter une table
uniquement par presentation d un media au lecteur

La fonction trace le fait parfaitenment

Autre soucis le thread versus evenement et comment le coder

merci de vos reponses

ps nous ne sommes pas sur le meme fuseau horaire propablement

Contribution le : 26/05/2009 20:19
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
pour moi, cela me semble normal que cela ne fonctionne pas, car il me semble bien que les portion de code de la table "sortie d'une ligne de le table" ne s'exécute que sur une action d'utilisateur, non?

voir ou placer exactement la ligne executetraitement(TABLE,trtSortieLigne) pour forcer l'exécution de la portion de code se trouvant dans le portion "sortie de ligne de la table", je pense a vue de nez a la fin de votre code se trouvant dans la portion "entrée en saisie dans la ligne de la table".

en espérant vous avoir aidé

Contribution le : 28/05/2009 09:18
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
Utilisateur WDF
Inscrit:
19/04/2006 18:20
Post(s): 63
Tu as raison ASTHROTH ,j'ai modifier ma logique



1 premier test
je viens de faire un test : j'ai créée une table en saisie avec 3 colonnes
dont une en saisie les deux autres en lecture

cela fonctionne très bien sans avoir à faire "enter"
je passe bien à la ligne suivante et je suis en saisie dans la colonne NoTag


C O D E 1 test
//****************************************************
dans le code de la colonne NoTag

à chaque modification j'ai mis le code suivant:

si taille(moimeme)=3 alors // pour controler la saisie de 3 caractères

Prenom = "aaaaaaaaaaaaaa"
Nom = "bbbbbbbbbbbbbbb"
Description = "ccccccccccc"

tableajouteligne(table_table1)
tableselectplus(table_table1,tableoccurrence(table_table1))
reprisesaisie(table_table1.col_colonne1)
fin
// **************** fin code test 1 *****************



Par la suite j'ai ajouter La gestion du port serial et la procedure reception
en me disant que cela devrait fonctionner,mais non retour a la case de depart



Il ne veut pas passer a la modification de Notag
J'ai mis un info au debut de modification NoTag
pour verifiez Voci le code que j'ai fait

C O D E test 2

// *********** Declaration global de fenetre *****

// declaration du serial
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=0
// 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)
SRECEPTION()
// *******************************************************


// ******** initialisation de la table *************
DonneFocus(TABLE.NoTag)

// ***************************************************

// **** a chaque modification de NoTag **********

Info ("guy",NoTag) // l'info ne sort pas il n'a pas acces
SI Taille(MoiMême)=14 // pour controler la saisie de 14 caractères
// Initialise la requête
SI PAS HExécuteRequête(REQ_VetementTag,hRequêteDéfaut,Gauche(NoTag,12)) 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)
TableAjouteLigne(TABLE)
TableSelectPlus(TABLE,TableOccurrence(TABLE))
RepriseSaisie(TABLE.NoTag)
FIN
// *********** *************************************

PROCEDURE SRECEPTION()
wtaille est un entier
sBuffer est une chaîne
nbcaralire est un entier
nbcaralire=14
//Fintimer(1)
wtaille=sDansFileEntrée(Port)
// Lecture des informations sur le port série
SI wtaille>nbcaralire ALORS

sBuffer=sLit(Port,nbcaralire)

Trace(Port,sBuffer,wtaille,sDansFileEntrée(Port))

NoTag = sBuffer // 14 caracteres

FIN

//Timer("sReception",50,1)
RENVOYER(NoTag)
//*************************************************************
fin du C O D E

A la lecture le trace de la fonction SRECEPTION est bonne
l"information RENVOYER(NoTag) va s'inscrire dans NoTag et attend un return
Une fois le return effectuer,il n'afficche pas les autre colonnes c'est normal car il ne passe pas
par modification de NoTag
il passe a la ligne suivante sur NoTag,c'est normal ila eu son retour et les autres colonnes sont innactifs
en saisise


Alors comment on peut le dejouer pour lui dire qu'il est en modification

Ou autres solutions

Contribution le : 28/05/2009 17:25
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
ChefDeProjet WDF
Inscrit:
29/05/2007 17:03
De Sassenage
Post(s): 180
moi je mettrais le code "a chaque modification de notag" dans la procedure SRECEPTION en adaptant un peu pour ecrire sur la bonne ligne (apres le tableAjoute, utiliser l'indice [TABLE..occurrence] pour ecrire un bon endroit

Contribution le : 28/05/2009 18:26
_________________
be aware
Créer un fichier PDF de la contribution Imprimer


Re: comment simuler un enter (return ) par programmation
Utilisateur WDF
Inscrit:
19/04/2006 18:20
Post(s): 63
j'ai pris quel que jours de breaks,j'etais ecoeurrer,


j'ai essauyer pour moi ce matin , et ton concept a bien fonctionner


je te remercie encore

On est dans la merde et on ni voie plus re=ien des fois,on regard second comme toi est toujours agreable , merci encore


si du des gens sont interreser je peux mettre la solution sur le forum merci encore a toi pout ta generositer



by

Contribution le : 02/06/2009 18:40
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2