FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  ­FAQFAQ  ­RechercherRechercher  ­S'enregistrerS'enregistrer  ­MembresMembres  ­GroupesGroupes  ­ConnexionConnexion  
Derniers sujets
» option mark_on/off?
Aujourd'hui à 19:01 par cosmos70

» Passer des paramètres à un exécutable Panoramic
Aujourd'hui à 18:22 par JL35

» Gestion de mes fichiers
Hier à 17:05 par JL35

» version instantanée du 13 mars 2010
Hier à 1:18 par Nicolas

» Interception de la fermeture de form0
Hier à 0:50 par cosmos70

» jadore les includes
Dim 14 Mar 2010 - 17:58 par debut

» Création d'un script image pour page web
Dim 14 Mar 2010 - 16:12 par JL35

» Comment sélectionner du texte automatiquement ?
Dim 14 Mar 2010 - 1:50 par vicmac

» Mise en ligne de mes fonctions dans une DLL
Sam 13 Mar 2010 - 19:58 par Klaus

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mars 2010
LunMarMerJeuVenSamDim
1234567
891011121314
15161718192021
22232425262728
293031    
CalendrierCalendrier
Poster un nouveau sujet   Ce sujet est verrouillé, vous ne pouvez pas éditer les messages ou faire de réponses.Partager | 
 

 Comment terminer une saisie dans un objet par entrée

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : 1, 2, 3, 4, 5  Suivant
AuteurMessage
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Georges



Nombre de messages: 244
Age: 41
Localisation: Martinique
Date d'inscription: 29/05/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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 end
Mais 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!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Georges



Nombre de messages: 244
Age: 41
Localisation: Martinique
Date d'inscription: 29/05/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Georges



Nombre de messages: 244
Age: 41
Localisation: Martinique
Date d'inscription: 29/05/2009

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages: 849
Localisation: 77
Date d'inscription: 29/11/2007

MessageSujet: 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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jack
Admin


Nombre de messages: 563
Date d'inscription: 28/05/2007

MessageSujet: 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".
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://panoramic.free-boards.net
Jean Claude



Nombre de messages: 784
Date d'inscription: 07/05/2009

MessageSujet: 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+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
JL35



Nombre de messages: 849
Localisation: 77
Date d'inscription: 29/11/2007

MessageSujet: 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...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Georges



Nombre de messages: 244
Age: 41
Localisation: Martinique
Date d'inscription: 29/05/2009

MessageSujet: 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.

@+
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 

Comment terminer une saisie dans un objet par entrée

Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 5Aller à la page : 1, 2, 3, 4, 5  Suivant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: A l'aide!-
Poster un nouveau sujet   Ce sujet est verrouillé, vous ne pouvez pas éditer les messages ou faire de réponses.