| Mars 2010 | | 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 | 31 | | | | | Calendrier |
|
| | | Comment terminer une saisie dans un objet par entrée | |
| |
| Auteur | Message |
|---|
Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: Comment terminer une saisie dans un objet par entrée Dim 31 Mai 2009 - 18:29 | |
| Bonsoir, J'essai de terminer une saisie dans un objet EDIT par la touche entrée du clavier. J'ai essayé scancode, inkey$, input..... a$=inkey$ nt = asc(a$) if nt = 13 then .... ou nt=scancode if nt=13 then .... Rien n'y fait, je suis obligé d'avoir un BUTTON pour terminer la saisie dans l'EDIT (ce que je voudrais justement éviter) Quelqu'un peut-il me donner un tuyau Merci et A+ |
|  | | Georges

Nombre de messages: 244 Age: 41 Localisation: Martinique Date d'inscription: 29/05/2009
 | Sujet: saisie EDIT par Entrer Mar 16 Juin 2009 - 15:08 | |
| Salut J-C Voici une piste que je te propose de suivre pour la validation d'un EDIT par entrer | Code: | label boucle,suite,quit,retour dim a,a$,t$,te$ width 0,250 : height 0,280 edit 1 top 1,20 : left 1,50 : width 1,80 : height 1,30 on_click 1,retour button 2 top 2,20 : left 2,150 : width 2,60 : height 2,30 caption 2,"Afficher" on_click 2,suite button 3 top 3,60 : left 3,150 : width 3,60 : height 3,30 caption 3,"Terminer" on_click 3,quit retour: t$="" boucle: a$ = inkey$ t$ = t$ + a$ text 1,"" text 1,t$ if a$ = chr$(13) then goto suite goto boucle end suite: hide 2 a = len (t$) a = a-1 te$ = mid$ (t$,1,a) print_locate 100,100 print te$ goto retour quit: terminate
|
Il y a un ou deux bug mais ça marche. Le bouton afficher est la aussi pour valider l'edit mais il est facultatif
georges |
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: RE:terminer une saisie dans un edit par entrée Mar 16 Juin 2009 - 20:06 | |
| Merci Georges de t'être attaqué au problème. Mais désolé chez moi ça marche pas. Le label Quit entraine un message d'erreur (Violation....) Dans l'édit on ne voit pas la saisie se dérouler. Et surtout a = len (t$) a = a-1 te$ = mid$ (t$,1,a)Cette partie BUG a est trop petit. Je comprends bien ta tentative boucle: a$ = inkey$ t$ = t$ + a$ text 1,"" text 1,t$ if a$ = chr$(13) then goto suite Mais si a$="", on fait quoi ? Je suis un peu surpris par la position de endMais bon, cela ne marche pas Merci néanmoins d'avoir essayé. Avis au PRO, Je pense que le problème n'est pas simple. Que le meilleur d'entre vous trouve la solution, il aura droit à mes félicitations. Pour le Champagne, pas facile par internet. (La bonne excuse!) Je vais moi-même retenter, en m'inspirant du code de georges, et si je trouve, j'aurais droit à vos félictations. A+ Allez au boulot! |
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: RE: Mar 16 Juin 2009 - 20:15 | |
| Pour PANORAMIC: et pouquoi pas ceci: LABEL findesaisie EDIT 1 rem avec ses dimensions ON_RETURN 1, findesaisie END findesaisie: la on fait ce qu'on veut RETURN Mais peut-être j'abuse. A+ |
|  | | Georges

Nombre de messages: 244 Age: 41 Localisation: Martinique Date d'inscription: 29/05/2009
 | Sujet: entrer dans l'EDIT Mar 16 Juin 2009 - 20:43 | |
| Salut Jean-Claude Mais un rem devant la ligne a=a-1 Cela devrait fonctionner. J'ai mis cette ligne parce que quand j'exécute ce code à l'affichage j'ai un caractère pour le CHR$(13). Si tu as un bug sur le a c'est que ta machine ne tiens pas compte du code d'entrer pour l'affichage. Je tacherai d'améliorer ce code. P.S. : je n'ai pris que moins de dix minutes pour sortir ce code. Avec un peu plus de temps la dessus je pense pouvoir sortir quelque chose de mieux. Soit dit en passant l'entrer dans l'edit bloque tout autre commande d'entrer. Mon idée est de donner l'illusion de l'edit. Je sortirais un code dans cette optique. georges |
|  | | Georges

Nombre de messages: 244 Age: 41 Localisation: Martinique Date d'inscription: 29/05/2009
 | Sujet: complement de réponse Mar 16 Juin 2009 - 23:04 | |
| Salut Jean-Claude si a$="" , la bouche continue et attends une entrée la position de end est un peu normale, elle permet de dissocier la présentation du programme du reste.C'est un automatisme que je préfère garder avec le code panoramic. elle permet aussi d'empécher des plantages intempestifs. les programmes sont bizarres des fois. georges |
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: RE: terminer une saisie dans un edit par entrée Mar 23 Juin 2009 - 20:30 | |
| Bonsoir, Je suis désolé Georges, mais même avec le rem devant a=a-1, cela ne marche pas. J'ai un message d'erreur à la ligne suivante: te$ = mid$ (t$,1,a). Il semble que "a" soit égal à zéro. De plus rien ne s'affiche dans l'EDIT. POUR PANORMIC: une petite rectification concernant ON_RETURN 1,findesaisie. Jaurais dû dire plûtot: ON_ENTER 1,findesaisie Soit: | Code: | LABEL findesaisie
EDIT 1 rem avec ses dimensions ON_CHANGE 1, insert ON_ENTER 1, findesaisie
END
rem--------------------------------
insert: a$=UPPER$(TEXT$(1)) RETURN
findesaisie: la on fait ce qu'on veut RETURN
|
Le but de la manoeuvre est d'avoir une commande qui, quand on tape sur la touche [Entrée] , branche sur un LABEL. Je sais bien que comme ça sur le papier, c'est facile. Est-ce possible ?
Bonne soirée, A+ |
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: RE: terminer une saisie dans un edit par entrée Sam 4 Juil 2009 - 13:43 | |
| Bonjour, Je n'ai pas réussi à programmer une fin de saisie par Entrée dans un EDIT. Le but étant que comme la saisie dans l'édit se fait à partir du clavier, je souhaitais donner la possibilité à l'utilisateur de taper [Entrée] pour lui éviter de reprendre la souris en main. Eh! Oui pour moi le programmeur doit être au service de l'utilisateur. Donc, pour le moment, je continues de d'affubler mon EDIT d'un BUTTON "OK" de petite taille à sa droite. Mais, pour ceux que çà intéresse, j'ai découvert par hasard la "combine" suivante: à la fin de la saisie, je presse la touche [TAB] qui m'envoie direct sur le boutton "OK" et la je tape [Entrée], donc tout çà à parir du clavier. Et RE [TAB] pour aller à la saisie (EDIT) suivante et ainsi de suite. A+ |
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: Re: Comment terminer une saisie dans un objet par entrée Dim 2 Aoû 2009 - 9:17 | |
| J'ajoute une nouvelle découverte sur ce sujet. Il s'ait de SET_FOCUS qui permet au programme de positionner le pointeur directement dans l'EDIT, ce qui permet que l'utilisateur n'a pas besoin de cliquer dans cet EDIT pour commencer sa saisie. A+ |
|  | | JL35
Nombre de messages: 849 Localisation: 77 Date d'inscription: 29/11/2007
 | Sujet: Re: Comment terminer une saisie dans un objet par entrée Dim 2 Aoû 2009 - 22:25 | |
| Si je reprends le code de Georges légèrement modifié, ça marche très bien: | Code: | label boucle,suite,quit,retour dim a,a$,t$,te$ width 0,250 : height 0,280 edit 1 top 1,20 : left 1,50 : width 1,80 : height 1,30 on_click 1, retour button 2 top 2,20 : left 2,150 : width 2,60 : height 2,30 caption 2,"Afficher" on_click 2,suite button 3 top 3,60 : left 3,150 : width 3,60 : height 3,30 caption 3,"Terminer" on_click 3,quit
retour: t$="" boucle: a$ = inkey$: if a$ = "" then goto boucle if a$ = chr$(13) then goto suite t$ = t$ + a$ text 1,"" text 1,t$ goto boucle end
suite: hide 2 print_locate 100,100 print t$ goto retour quit: terminate |
j'ai simplement mis le test de a$ vide juste après le inkey$, suivi du test de 13 (entrée), ce qui est logique, ce caractère n'a pas à être ajouté à t$ ! Je n'ai pas bien compris non plus l'utilité de faire: te$ = mid$(t$, 1, len(t$)) qui est strictement équivalent à: te$ = t$
Par contre, j'ai une erreur sur le Terminate: Access violation at address 00000017 etc... peut-être une ressource non libérée, mais je n'ai pas approfondi.
PS le code de saisie ci-dessus 'boucle' est un peu rustique, il faudrait au moins analyser également le caractère backspace (08) pour pouvoir effacer le dernier caractère entré (correction). Par exemple:
| Code: | if a$ = chr$(13) then goto suite if a$ = chr$(8) and len(t$)>0 t$ = left$(t$, len(t$)-1) else t$ = t$ + a$ end_if |
|
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: Re: Comment terminer une saisie dans un objet par entrée Lun 3 Aoû 2009 - 19:44 | |
| Effectivement çà marche (sauf afficher). J'ai le même problème de violation avec terminate. Ce qui est curieux c'est que si tu mets un end ou autre chose après ou avant terminate, la validation par entrée ne fonctionne plus. On s'approche du but. A+ |
|  | | Jack Admin

Nombre de messages: 563 Date d'inscription: 28/05/2007
 | Sujet: Re: Comment terminer une saisie dans un objet par entrée Mar 4 Aoû 2009 - 9:40 | |
| Cette discussion est très intéressante. Je ne suis pas intervenu car je suis curieux de voir comment elle va évoluer. J'interviens seulement pour vous dire que ma préoccupation est de sortir la version complète V 0.9.13 puis je m'attaquerai à ce problème de TERMINATE qui plante ou qui "beep". |
|  | | Jean Claude
Nombre de messages: 784 Date d'inscription: 07/05/2009
 | Sujet: Re: Comment terminer une saisie dans un objet par entrée Mar 4 Aoû 2009 - 19:23 | |
| Impatient de la nouvelle version, le reste peut attendre. Je vois que tu nous a toujours à l'oeil. Merci et A+ |
|  | | JL35
Nombre de messages: 849 Localisation: 77 Date d'inscription: 29/11/2007
 | Sujet: Re: Comment terminer une saisie dans un objet par entrée Mar 4 Aoû 2009 - 22:07 | |
| Je suis un peu perplexe... J'en suis arrivé au code ci-dessous, simplifié pour les tests: | Code: | label SAISIE, BOUCLE, FIN dim a$, t$
top 0, 20: left 0, 20: width 0, 250: height 0, 150 edit 1: top 1, 20: left 1, 20: width 1, 200: height 1, 30 on_click 1, SAISIE end
SAISIE: t$="" BOUCLE: If Scancode = 13 then goto FIN a$ = inkey$: If a$ = "" then goto BOUCLE if a$ = chr$(8) and len(t$)>0 t$ = left$(t$, len(t$)-1) else t$ = t$ + a$ end_if text 1, "": text 1, t$ goto BOUCLE
FIN: print_locate 20, 60: print t$: wait 1500 TERMINATE |
Finalement, le test du scancode semble plus sûr, inkey$ ne semblant pas renvoyer le code de la touche Entrée (qui semble ignorée). Donc on va bien à l'étiquette FIN par appui sur Entrée, et le programme se termine, mais le print final ne se fait pas, là il y a quelque chose qui m'échappe... |
|  | | Georges

Nombre de messages: 244 Age: 41 Localisation: Martinique Date d'inscription: 29/05/2009
 | Sujet: Re: comment terminer une saisie dans un edit par entrée Mer 5 Aoû 2009 - 13:36 | |
| Salut Jean-Claude , JL35 Suite au code de JL35, je vous propose trois codes source qui résolvent le problème posé par Jean-Claude Le premier est inspiré de celui de JL35 surtout sur l'utilisation de SCANCODE. En effet dans cette structure chr$(13) ne fonctionne pas. source1: _____________________________________________label BOUCLE,affich dim a$ top 0, 20: left 0, 20: width 0, 250: height 0, 200 edit 1: top 1, 20: left 1, 20: width 1, 200: height 1, 30 on_click 1,BOUCLE end
BOUCLE: If Scancode = 13 then goto affich a$ = inkey$ goto BOUCLE
affich: print_locate 20, 60 print "texte= " + text$(1) wait 3000 TERMINATE__________________________________________ l'utilisation de a$=inkey$ est indispensable, sinon le programme se court-circuite ou se plante. Il permet aussi à scancode de faire le test sur l'entrée d'une touche. L'édit étant toujours actif, il n'est pas nécessaire de faire de la concaténation. D'ailleurs si l'affichage ne se fait pas sur le code de JL35, c'est que la concaténation ne se construit pas (pourquoi?, ché pa!) Une fois l'édit testé sur le scancode 13, on utilise les fonctions standard de récupération des données dans un édit - à savoir text$(1) le code par construction devient plus simple et plus concit. C'est la routine BOUCLE qui s'occupe de faire cette tache. ----------------------- Dans le deuxième code, j'ai inséré le SET_FOCUS souhaité par Jean-Claude. Ainsi dès le RUN du programme le curseur se place directement dans l'édit. la ligne on_click 1, etc devient inutile - on rapproche le test BOUCLE avant le END source2: ________________________________________________ label BOUCLE, FIN dim a$ top 0, 20: left 0, 20: width 0, 250: height 0, 200 edit 1: top 1, 20: left 1, 20: width 1, 200: height 1, 30 set_focus 1
BOUCLE: If Scancode = 13 then goto FIN a$ = inkey$ goto BOUCLE end
FIN: print_locate 20, 60 print "texte= " + text$(1) wait 3000
TERMINATE____________________________________________ ---------------------- Le troixième code est une amélioration du source1. En insérant un bouton terminer, on peut choisir de quitter le programme sans l'exécuter. Cette option peut évidemment être mis dans le source2 source3: _________________________________________ label BOUCLE,affich,fin dim a$ top 0, 20: left 0, 20: width 0, 250: height 0, 200 edit 1: top 1, 20: left 1, 20: width 1, 200: height 1, 30 button 2: top 2,100: left 2,40: width 2,140: height 2,20: caption 2,TERMINER on_click 1,BOUCLE on_click 2,fin end
BOUCLE: If Scancode = 13 then goto affich a$ = inkey$ goto BOUCLE
affich: print_locate 20, 60 print "texte= " + text$(1) wait 3000 fin:
TERMINATE_______________________________________________ Voila, je pense que nous avons tous progressés dans la compréhension du code grace au problème posé para Jean-Claude et aux pistes de JL35. J'ai essayé ces trois codes sur mon poste, ils fonctionnent impec. @+ |
|  | | | | Comment terminer une saisie dans un objet par entrée | |
|
| Page 1 sur 5 | Aller à la page : 1, 2, 3, 4, 5  |
| | Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |