Septembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | | | | | | Calendrier |
|
| | Panoramic et Scanette | |
| | Auteur | Message |
---|
Yannick
Nombre de messages : 8633 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Panoramic et Scanette Mar 24 Sep 2024 - 0:54 | |
| Bonjour à tous ! Je sais ce que vous vous dites : "Casse bonbons est de retour..." ...Pas faux. Là je reviens avec un casse tête. Je suis amené à me servir d'une scanette ou douchette pour lire des codes barres ou QR Codes. Sur un objet Edit, celui ci affiche bien le contenu scanné pas de souci. Mais, si je veux déclencher un sous programme de façon automatique avec un on_change sur l'objet Edit, là, tout se complique. Effectivement, pas tous les codes barre n'ont pas la même longueur et les caractères sont transmis un à un comme si ils étaient tapés au clavier et déclenche chacun un évènement. Quelqu'un a t il une astuce pour savoir quel caractère transmis par la douchette est le dernier ? | |
| | | JL35
Nombre de messages : 7100 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Panoramic et Scanette Mar 24 Sep 2024 - 9:30 | |
| désolé Yannick, mais à part la scanette de bière je ne suis pas compétent... | |
| | | Marc
Nombre de messages : 2451 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Panoramic et Scanette Mar 24 Sep 2024 - 10:20 | |
| Bonjour à tous ! - Yannick a écrit:
- Je sais ce que vous vous dites : "Casse bonbons est de retour..."
...Pas faux. Pas du tout, tout au contraire, le sujet est très intéressant. Avant de l’afficher dans l’EDIT, Il faudrait traiter la chaîne de caractères qui se constitue. Quand elle est valide, tu l’affiches dans l’EDIT. Tu trouveras plusieurs articles sur la toile. >>> En voici un en français qui permet d’effectuer une première approche. <<< Peux-tu nous détailler les parties hardware et software entre la scanette et l’EDIT ? Bonne continuation ! | |
| | | Yannick
Nombre de messages : 8633 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mar 24 Sep 2024 - 19:49 | |
| Après une longue réflexion... ... je vais tenter un pause 500 ms après la détection du premier caractère pour laisser le temps aux autres de s'afficher puis je traiterai le texte affiché. Et advienne que pourra. | |
| | | Marc
Nombre de messages : 2451 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Panoramic et Scanette Mer 25 Sep 2024 - 14:40 | |
| Bonjour à tous ! @Yannick J’ai une idée pour la gestion de la scanette. Essaie ce petit programme de démonstration : - Code:
-
dim chrono%, delai%, memoireTexte$, on%
edit 1 :' zone de saisie left 1,10 top 1,75
list 2 :' stockage informations left 2,154 top 2,75
button 3 :' bouton START top 3,20 left 3,20 caption 3,"Start"
button 4 :' bouton STOP top 4,20 left 4,110 caption 4,"Stop"
button 5 :' bouton Quitter top 5,20 left 5,200 caption 5,"Quitter"
delai% = 800 :' délai en millisecondes chrono% = number_ticks memoireTexte$ = text$(1)
' boucle de fonctionnement while 1=1 if on% = 1 if text$(1) <> memoireTexte$ chrono% = number_ticks :' réinitialisation du chronomètre memoireTexte$ = text$(1) end_if
if number_ticks > chrono% + delai% if text$(1) <> "" action() end_if text 1,"" chrono% = number_ticks :' réinitialisation du chronomètre end_if if clicked(4) = 1 :' détection appui bouton STOP on% = 0 end_if end_if if clicked(5) = 1 :' détection appui bouton QUITTER exit_while end_if
if clicked(3) = 1 :' détection appui bouton START on% = 1 text 1,"" :' effacer le contenu résiduel du champ EDIT chrono% = number_ticks :' réinitialisation du chronomètre set_focus 1 end_if
pause 20 :' petite pause pour ne pas affoler le processeur end_while
terminate end
sub action() item_add 2,text$(1) end_sub
Fonctionnement : Clique sur START pour commencer à saisir des données dans l’EDIT en utilisant le clavier (ceci pour simuler l’arrivée des caractères issus de la scanette). Lorsque tu arrêtes la saisie pendant plus de 800ms : - le contenu de l’EDIT est validé et copié dans le LIST ; - L’EDIT est remis à zéro ; - Le chrono qui calcule les 800ms de délai est remis à zéro ; L’EDIT est prêt pour recevoir une série de nouvelles données ; Et ainsi de suite jusqu’à l’appui sur le bouton STOP. Bonne continuation ! | |
| | | Yannick
Nombre de messages : 8633 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 25 Sep 2024 - 19:46 | |
| Salut Marc. J'ai trouvé une astuce tard dans la nuit et j' étais en zone blanche toute la journée, oui oui en 2024, ce qui fait que je n'ai pas posté cette solution. Je charge un fichier *.csv contenant une colonne de numéros d'objet et une colonne de numéros de séries. je scanne le code barre d'un produit et je veux que mon appli me renvoi son numéro d'objet. Je récupère le code scanné qui correspond au numéro de série dans un edit et je veux donc que l'appli me renvoie le numéro d'objet. comme je ne connais pas la longueur du code barre pour et que celui ci est écrit caractère par caractère dans l'objet Edit je suis gêné pour me servir de l'évènement "on_change". Pour palier à ce souci je fais ce qui suit : je détecte le premier on change Je bloque la capture d'événement on_change je place un pause 500 qui permet au scanner de finir d'afficher le reste du code barre puis après celui je capture le texte de l'objet Edit dans une variable $ et je lance ma recherche sur une boucle for...next et un exit for sur la ligne trouvé - Spoiler:
- Code:
-
' DECLARATION DES VARIABLES ' ============================================================================== dim x% dim no% dim txt$,it$,res$ dim voix$ dim RetMess% dim RetDll% dim OnOff% dim Ltr$ dim Num$ ' ============================================================================== ' DECLARATION DES CONSTANTES D ENVIRONNEMENT ' ============================================================================== ' --- Dossiers --- dim Path$ dim Fic$ dim Img$ ' --- Fichiers --- dim Dll$ dim Csv$ dim FinIco$(2) ' ============================================================================== ' DECLARATION DES CONSTANTES OBJETS ' ============================================================================== dim ObjPanel% dim ObjAlpha%(3) dim ObjEdit% dim ObjDlist% dim ObjBtPict% ' ============================================================================== ' DECLARATION DES SOUS PROGRAMMES ' ============================================================================== label CLIC label CHANGE ' ============================================================================== ' AFFECTATION DES VALEURS DES CONSTANTES D ENVIRONNEMENT ' ============================================================================== ' Dossiers Path$ = file_extract_path$(param_value$(0)) Fic$ = Path$+"dlls" Img$ = Path$+"imgs" ' Fichiers Dll$ = Fic$+"KGF.dll" Csv$ = Param_value$(1) FinIco$(1)= Img$+"FinIco_1.bmp" FinIco$(2)= Img$+"FinIco_2.bmp" ' ============================================================================== ' AFFECTATION DES VALEURS DES CONSTANTES OBJET ' ============================================================================== no%=no%+1 : ObjPanel% = no% for x%=1 to 3 : no%=no%+1 : ObjAlpha%(x%) = no% : next x% no%=no%+1 : ObjEdit% = no% no%=no%+1 : ObjDlist% = no% no%=no%+1 : ObjBtPict%= no% Dll_on Dll$ ' ============================================================================== ' INTERFACE UTILISATEUR ' ============================================================================== BUILD_FORM0(200,300,0,0,"F.I.N") Color 0,49,74,74 SET_TEXT_ATTRIBUT(0,"Carlito",10,"0000",49,74,74) BUILD_OBJECT("PANEL",ObjPanel%,0,height_client(0)-10,width_client(0)-10,5,5,"") BUILD_OBJECT("ALPHA",ObjAlpha%(1),ObjPanel%,20,250,15,5,"Code barre") BUILD_OBJECT("EDIT",ObjEdit%,ObjPanel%,22,250,30,5,"") on_change ObjEdit%,CHANGE BUILD_OBJECT("ALPHA",ObjAlpha%(2),ObjPanel%,20,250,70,80,"X 00000") SET_TEXT_ATTRIBUT(ObjAlpha%(2),"Carlito",24,"0000",49,74,74) BUILD_OBJECT("ALPHA",ObjAlpha%(3),ObjPanel%,20,120,height_client(ObjPanel%)-20,5,"") SET_TEXT_ATTRIBUT(ObjAlpha%(3),"Carlito",10,"0000",49,74,74) BUILD_OBJECT("BUTTON_PICTURE",ObjBtPict%,ObjPanel%,32,32,height_client(ObjPanel%)-37,width_client(ObjPanel%)-37,"") button_picture_target_is_picture height ObjBtPict%,24 : width ObjBtPict%,24 if file_exists(FinIco$(1))=1 : file_load ObjBtPict%,FinIco$(1) : end_if on_click ObjBtPict%,CLIC hint ObjBtPict%,"Son" BUILD_OBJECT("DLIST",ObjDlist%,0,0,0,0,0,"") if file_exists(Csv$)=1 file_load ObjDlist%,Csv$ caption ObjAlpha%(3),"Fichier chargé." pause 1000 caption ObjAlpha%(3),"" end_if voix$ = string$(255," ") RetDll% = dll_call1("SpeakVoices",adr(voix$)) set_focus ObjEdit% END ' ============================================================================== ' SOUS PROGRAMMES ' ============================================================================== CLIC: if number_click = ObjBtPict% if OnOff%=1 OnOff%=0 if file_exists(FinIco$(1))=1 : file_load ObjBtPict%,FinIco$(1) : end_if set_focus ObjEdit% else OnOff%=1 if file_exists(FinIco$(2))=1 : file_load ObjBtPict%,FinIco$(2) : end_if set_focus ObjEdit% end_if end_if return ' ------ CHANGE: off_change ObjEdit% if len(text$(ObjEdit%))=1 pause 500 txt$ = trim$(text$(ObjEdit%)) for x%=1 to count(ObjDlist%) it$ = item_read$(ObjDlist%,x%) if trim$(right$(it$,len(it$)-7))=txt$ res$ = left$(it$,6) exit_for end_if next x% Caption ObjAlpha%(2),res$ Ltr$ = left$(res$,1) Num$ = str$(val(right$(res$,5))) res$ = Ltr$+chr$(32)+Num$ display if OnOff%=0 RetDll% = dll_call1("SpeakMode",0) RetDll% = dll_call4("Speak",adr(res$),50,1,1) end_if text ObjEdit%,"" set_focus ObjEdit% end_if on_change ObjEdit%,CHANGE return ' ============================================================================== ' PROCEDURES DE CREATION ET DE GESTION DES OBJETS ' ============================================================================== ' BUILD_OBJECT(Object$,Obj%,Par%,H%,W%,T%,L%,Lib$) ' BUILD_FORM0(H%,W%,T%,L%,Lib$) ' SET_TEXT_ATTRIBUT(Obj%,FtName$,FtSize%,FtStyle$,FtColR%,FtColG%,FtColB%) ' ------------------------------------------------------------------------------ ' Construction d'objets SUB BUILD_OBJECT(Object$,Obj%,Par%,H%,W%,T%,L%,Lib$) dim_local i%,ListObject$,ObjName$,Type%,Fen%,capt% ListObject$ ="SCENE3D BUTTON EDIT MEMO COMBO ALPHA FORM LIST PICTURE CHECK OPTION"+chr$(32) ListObject$ = ListObject$ + "MAIN_MENU SUB_MENU SOUND MOVIE TRACK_BAR OPEN_DIALOG SAVE_DIALOG"+chr$(32) ListObject$ = ListObject$ + "SCROLL_BAR PROGRESS_BAR SPIN GRID CONTAINER MEMO_RICH BUTTON_PICTURE DLIST SCENE2D TIMER"+chr$(32) ListObject$ = ListObject$ + "PANEL - MAIN_MENU_POP CONTAINER_OPTION OPEN_DIALOG_PIC SAVE_DIALOG_PIC SHAPE HVIEWER SERIAL LED1 DIGIT1"+chr$(32) ListObject$ = ListObject$ + "SWITCH1 IMAGE CONTAINER_TAB TAB - - SYNEDIT CHART"+chr$(32) for i%=1 to 47 ObjName$ = left$(ListObject$,instr(ListObject$,chr$(32))-1) ListObject$ = right$(ListObject$,len(ListObject$)-instr(ListObject$,chr$(32))) if ObjName$ = Object$ Type% = i% exit_for end_if next i% select Type% case 1 : Fen% = 1 : SCENE3D Obj% case 2 : Fen% = 1 : capt% = 1 : BUTTON Obj% case 3 : Fen% = 1 : EDIT Obj% case 4 : Fen% = 1 : MEMO Obj% case 5 : Fen% = 1 : COMBO Obj% case 6 : Fen% = 1 : capt% = 1 : ALPHA Obj% case 7 : Fen% = 1 : capt% = 1 : FORM Obj% case 8 : Fen% = 1 : LIST Obj% case 9 : Fen% = 1 : PICTURE Obj% case 10 : Fen% = 1 : capt% = 1 : CHECK Obj% case 11 : Fen% = 1 : capt% = 1 : OPTION Obj% case 12 : Fen% = 0 : MAIN_MENU Obj% case 13 : Fen% = 0 : capt% = 1 : SUB_MENU Obj% case 14 : Fen% = 0 : SOUND Obj% case 15 : Fen% = 0 : MOVIE Obj% case 16 : Fen% = 1 : TRACK_BAR Obj% case 17 : Fen% = 0 : OPEN_DIALOG Obj% case 18 : Fen% = 0 : SAVE_DIALOG Obj% case 19 : Fen% = 1 : SCROLL_BAR Obj% case 20 : Fen% = 1 : PROGRESS_BAR Obj% case 21 : Fen% = 1 : capt% = 1 : SPIN Obj% case 22 : Fen% = 1 : GRID Obj% case 23 : Fen% = 1 : capt% = 1 : CONTAINER Obj% case 24 : Fen% = 1 : MEMO_RICH Obj% case 25 : Fen% = 1 : capt% = 1 : BUTTON_PICTURE Obj% : button_picture_target_is_object case 26 : Fen% = 0 : DLIST Obj% case 27 : Fen% = 1 : SCENE2D Obj% case 28 : Fen% = 0 : TIMER Obj% case 29 : Fen% = 1 : capt% = 1 : PANEL Obj% case 30 case 31 : Fen% = 0 : MAIN_MENU_POP Obj% case 32 : Fen% = 1 : capt% = 1 : CONTAINER_OPTION Obj% case 33 : Fen% = 0 : OPEN_DIALOG_PIC Obj% case 34 : Fen% = 0 : SAVE_DIALOG_PIC Obj% case 35 : Fen% = 1 : SHAPE Obj% case 36 : Fen% = 1 : HVIEWER Obj% case 37 : Fen% = 0 : SERIAL Obj% case 38 : Fen% = 1 : LED1 Obj% case 39 : Fen% = 1 : capt% = 1 : DIGIT1 Obj% case 40 : Fen% = 1 : capt% = 1 : SWITCH1 Obj% case 41 : Fen% = 0 : IMAGE Obj% case 42 : Fen% = 1 : capt% = 1 : CONTAINER_TAB Obj% case 43 : Fen% = 0 : capt% = 1 : TAB Obj% case 44 case 45 case 46 : Fen% = 1 : SYNEDIT Obj% case 47 : Fen% = 1 : CHART Obj% end_select if Par%>0 parent Obj%,Par% end_if if Fen% = 1 height Obj%,H% width Obj%,W% top Obj%,T% left Obj%,L% end_if if Lib$<>"" and capt% = 1 caption Obj%,Lib$ end_if END_SUB ' ------------------------------------------------------------------------------ ' paramètres graphiques du form 0 SUB BUILD_FORM0(H%,W%,T%,L%,Lib$) height 0,H% width 0,W% if T%=0 : top 0,(screen_y-height(0))/2 : else : top 0,T% : end_if if L%=0 : left 0,(screen_x-width(0))/2 : else : left 0,L% : end_if if Lib$<>"" : caption 0,Lib$ : end_if END_SUB ' ------------------------------------------------------------------------------ ' Attributs du texte d'un objet SUB SET_TEXT_ATTRIBUT(Obj%,FtName$,FtSize%,FtStyle$,FtColR%,FtColG%,FtColB%) font_name Obj%,FtName$ font_size Obj%,FtSize% if mid$(FtStyle$,1,1)="1" : font_bold Obj% : else : font_bold_off Obj% : end_if if mid$(FtStyle$,2,1)="1" : font_italic Obj% : else : font_italic_off Obj% : end_if if mid$(FtStyle$,3,1)="1" : font_underline Obj% : else : font_underline_off Obj%: end_if if mid$(FtStyle$,4,1)="1" : font_strike Obj% : else : font_strike_off Obj% : end_if font_color Obj%,FtColR%,FtColG%,FtColB% END_SUB ' -
Pour ce qui est du fichier *.csv voilà le format d'une ligne : X00001;KGFJ230ER54895 Je vais regarder de plus près ton code marc mais là c'est l'heure sacrée du miam | |
| | | Yannick
Nombre de messages : 8633 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 25 Sep 2024 - 22:16 | |
| @ Marc, Je viens de regarder ton code qui rempli un list. Avec une scanette, ou douchette, le remplissage d'un list, curieusement, se fait ligne par ligne comme si il y avait un retour charriot alors que si on demande le code asc on ne le voit pas. | |
| | | Contenu sponsorisé
| Sujet: Re: Panoramic et Scanette | |
| |
| | | | Panoramic et Scanette | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |