Précédent   Forum des professionnels en informatique > Environnements de développement > MATLAB > Interfaces Graphiques
Interfaces Graphiques Forum d'entraide sur les interfaces graphiques en MATLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2012, 15h44   #1
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Par défaut Ecriture Edit limitée

Bonjour,

Est il possible de limité le type d'écriture dans la zone Edit de façon a ce qu'il n'accepte pas l'écriture de type alphabétique ...

Donc quelques choses de ce style :
Citation:
1;2; 10:20 ;
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 17h35   #2
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Bonjour,

Une recherche avec le mot clé 'KeyPressFcn' te donnera des éléments de réponse.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 11h39   #3
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Ha merci,

Par contre je suis confronté à quelques problèmes :

Le premier : limité le nombre d'espace car keypresse avec un espace me renvoie ' ' est non la touche 'space' .

Si j'appuie sur 'space' le programme ne rentre pas dans la boucle de mon code (ci dessous) ni dans cette boucle :
Code :
1
2
3
4
if isempty(event.Character)
disp '123'
return
end

Mon second :
Code :
if isempty(data.testKey_alphanum)
Ne reconnais pas non plus la case vide

Et mon dernier : Ne fonctionne pas correctement du fait que le background rouge apparait quand celui ci n'est pas voulu.


Voici mon code :

Code :
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
function test_keypressfcn ( obj, event)
data = guidata(gcbf);

event.Character

%valeur = get(obj, 'string') %% vide au départ


alphanum = isstrprop( data.testKey_alphanum, 'alphanum'); %1 true
numerique = isstrprop(event.Character, 'digit');

compteur=[];

 if numerique==1 && any(alphanum)==0
    set(obj,'BackgroundColor',[0.969 0.969 0.996])
    
    data.testKey_num(end+1) = event.Character;
    data.testKey_alphanum(end+1) = event.Character;
    
    data.testKey_num
    data.testKey_alphanum
    
    compteur=0;
 else
    data.testKey_alphanum(end+1) = event.Character;
   
    set(obj,'BackgroundColor',[0.996 0 0])
    data.testKey_alphanum
    compteur=0;
 end
 
if strcmp(event.Key,'backspace')
   data.testKey_num= data.testKey_num(end-1) ;
   data.testKey_alphanum=data.testKey_alphanum(end-1);
   compteur=0;
end


if strcmp(event.Key,'space')
    compteur=compteur+1;
    if compteur>1
   data.testKey_num= data.testKey_num(end-1) ;
   data.testKey_alphanum=data.testKey_alphanum(end-1);
    end
end

if isempty(data.testKey_alphanum)
     set(obj,'BackgroundColor',[0.969 0.969 0.996])
end


guidata(gcbf,data);

end
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 13h54   #4
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Plusieurs questions:
  • La variable compteur est-elle locale à la fonction test_keypressfcn? Si tel est le cas, tu ne pourras pas (à moins de la rendre persistente) compter le nombre d'espaces vu que c'est une "nouvelle" qui est utilisée à chaque appel de la fonction.
  • Pourquoi tester data.testKey_alphanum est non event.Character à la ligne (9):
    Code :
    alphanum = isstrprop( data.testKey_alphanum, 'alphanum'); %1 true
    Je ne comprends pas ce que tu fais là lors de l'appui sur Entrer:
    Code :
    1
    2
    3
    4
    5
    if strcmp(event.Key,'return')
       data.testKey_num= data.testKey_num(end-1) ;
       data.testKey_alphanum=data.testKey_alphanum(end-1);
       compteur=0;
    end
    De même pour l'espace...
  • Qu'en est-il si tu appuis sur Shift, Alt, Ctrl,...?
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 15h58   #5
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Ma variable compteur est bien locale ... Pour la rendre persistante dois je l'intégrer dans le Data?

Je test data.testKey_alphanum est non event.Character à la ligne (9) car j'ai besoin de récupérer tout ce qui a était écris dans ma zone Edit... De même pour remettre la couleur de mon background je test si la zone est vide ou non :
Code :
1
2
3
if isempty(data.testKey_alphanum)
     set(obj,'BackgroundColor',[0.969 0.969 0.996])
end
Mais ça n'a pas l'air de marcher !

J'avais réédité mon codun peu après en modfiant : strcmp(event.Key,'return') par strcmp(event.Key,'backspace')

Pour l'espace : je veux interdire ce style d'écriture
Citation:
20;30:40; 15; 7;
L'appuie sur les touche ALT CTR VERR me renvoie une erreure :

Code :
1
2
3
4
5
6
7
8
9
10
In an assignment  A(:) = B, the
number of elements in A and B
must be the same.

Error in test_keypressfcn (line
26)
     data.testKey_alphanum(end+1)
     = event.Character;
 
Error while evaluating uicontrol KeyPressFcn

Oui Oui j'ai beaucoup de problèmes à restreindre le clavier...
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 16h59   #6
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Citation:
Envoyé par TheDwarf01 Voir le message
Pour l'espace : je veux interdire ce style d'écriture
Citation:
20;30:40; 15; 7;
à différencier de quoi?

Citation:
Envoyé par TheDwarf01 Voir le message
Oui Oui j'ai beaucoup de problèmes à restreindre le clavier...
Ça je ne te le fais pas dire
Outre ces tests, il y a d'autres problèmes:
  • Que se passe t-il si l'utilisateur se déplace avec les flèches gauche/droite et efface ou modifie un caractère?
    Cela encore on peut l'intercepter.
  • Que se passe t-il s'il y revient avec la souris? Là on est mal
Le meilleur moyen reste selon moi de faire le test "final" dans le Callback et d'afficher un message d'alerte tout en réinitialisant le champ si le texte saisi n'est pas valide.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 17h42   #7
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Ha lors de l'envoie apparement ça efface les espaces :

Je veux interdire ce style d'écriture :
Citation:
[20; 30:40; ' GRAND ESPACE VIDE' 15; ' GRAND ESPACE VIDE' 7;]
Pour les flèches: ça me renvoie ' '
Pour la modification des caractères avec la souris... la je te le confirme j'ai testé est on est mal !!!

Je crois que je vais me résoudre à faire quelque chose de moins ambitieux...
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 19h45   #8
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Le problème si je simplifie ma fonction est comment récupérer la valeurs de mon edit texte au fur et a mesure que j'écris avec KeyPressFcn :

get(handles.ZoneEdit,'String') %%%% Et initialement vide !

Code :
1
2
set(handles.ZoneEdit,...
    'KeyPressFcn',{@test_keypressfcn,get(handles.ZoneEdit,'String')});
Code :
1
2
function test_keypressfcn ( obj, event,handles)
get(handles.ZoneEdit,'String')
Car matlab me renvoie ceci
Code :
1
2
Attempt to reference field of
non-structure array.
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 19h49   #9
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Si tu veux utiliser cette syntaxe, ce serait plutôt:
Code :
1
2
set(handles.ZoneEdit,...
    'KeyPressFcn',{@test_keypressfcn,handles});
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 20h11   #10
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Citation:
Envoyé par TheDwarf01 Voir le message
Mais cela ne me renvoie pas ce que j'écris ... il reste toujours définis comme vide... Et il ne faut pas revenir au même problème où la gestion des flèche souris ou autre n'est pas gérable !!!

Code :
1
2
3
data=guidata(gcbf);
get(handles.ZoneEdit,'String')
guidata(gcbf,data);
le but est de récupérer tout ce qu'a écris l'utilsateur dans l'edit .. après je me débrouille !
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 20h15   #11
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Citation:
Envoyé par TheDwarf01 Voir le message
Le problème si je simplifie ma fonction est comment récupérer la valeurs de mon edit texte au fur et a mesure que j'écris avec KeyPressFcn :
Et oui, c'est bien le problème C'est d'ailleurs quelque chose que je déplore: selon moi ce qui a été écrit avant devrait être disponible
Après une solution "simple" serait de passer par Java.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 20h20   #12
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Java est moi ça fait deux ... Aurai tu un exemple simple et efficace ?
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 20h27   #13
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Et bien déjà il te faudra récupérer la fonction findjobj sur le FEX.
Ensuite quelque chose comme:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function exemple

hText = uicontrol('style','edit');

obj = findjobj(hText);
obj.KeyTypedCallback = @KeyTypedCallback;

    function KeyTypedCallback(jObject, KeyEvent)
        if checkEdit( get(jObject, 'Text') )
            set(hText,'BackgroundColor',[0.969 0.969 0.996])            
        else
            set(hText,'BackgroundColor',[0.996 0 0])
        end
    end
    function isOk = checkEdit(str)
        % ici tu testes str
    end
end
Une autre solution en implémentant un KeyListener sur Java et en l'appliquant comme ceci:
Code :
obj.addKeyListener( myKeyListener() )
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2012, 23h46   #14
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Matlab m'informe que la fonction checkEdit n'est pas définie !
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 01h50   #15
Modérateur
 
Avatar de Winjerome
 
Homme Jérôme
Inscription : septembre 2009
Messages : 3 598
Détails du profil
Informations personnelles :
Nom : Homme Jérôme
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : septembre 2009
Messages : 3 598
Points : 6 824
Points : 6 824
Tu as changé quelque chose?
Quel est le message d'erreur exact?
Cela ne concerne pas plutôt la variable isOk? Comme commenté, il te reste à coder ce test.
__________________
Débutant en MATLAB? Vous voulez faire une Interface Graphique? Les Tutoriels et la FAQ sont là pour vous aider
Une erreur? FAQ : Messages d'erreur et avertissements
"Ça ne marche pas" n'est pas une réponse acceptable Expliquez clairement votre problème (erreurs, résultats non attendus...).
Citation:
En essayant continuellement on finit par réussir. Donc: plus ça rate, plus on a de chance que ça marche. - Jacques Rouxel
L'expérience, c'est le nom que chacun donne à ses erreurs - Oscar Wilde
Je suis régulièrement sur le chat DVP - Pas de question technique par MP, Merci
Winjerome est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/02/2012, 03h47   #16
Nouveau Membre du Club
 
Homme
Étudiant
Inscription : mars 2010
Messages : 60
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : mars 2010
Messages : 60
Points : 25
Points : 25
Ha pardon.. j'avais pas compris que je pouvais pas séparer les 2 fonctions... c'est pour cela que la fonction checkEdit n'était pas définie.

Grand Merci !!! J'ai quasiment finis mon Interface grâce à vous
TheDwarf01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h31.


 
 
 
 
Partenaires

Hébergement Web