IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MATLAB Discussion :

Récupérer une date en cliquant sur le calendrier


Sujet :

MATLAB

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut Récupérer une date en cliquant sur le calendrier
    Dans une fenêtre, j'ai le calendrier du mois.

    L'utilisateur doit choisir un jour de ce calendrier. Quelle solution auriez vous ?

    Je pensais à plusieurs choses :

    - soit l'utilisateur clique sur une date du calendrier...

    - soit j'ai un carré qui entoure une date et avec les flèches du clavier, l'utilisateur se déplace dans le calendrier puis tape enter pour valider...

    - soit j'affiche le calendrier et j'utilise trois cases où l'utilisateur entre le jour, le mois et l'année qu'il a choisit...

    Merci de votre aide
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    On peut améliorer encore la solution donnée ici, en demandant à MATLAB d'exécuter une action si on clique sur la date mise en évidence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function mycalendar2
    
    x=calendar;
    
    disp(['                   ' datestr(now,'mmm yyyy')])
    disp(        '     S     M    Tu     W    Th     F     S')
    surligne(x,'%2d',x==str2double(datestr(now,7)))
    % disp(x)
    
    function surligne(M,fmt,idx)
    
    del='    ';
    pad='    ';
    flag=all(size(M)==size(idx));
    
    if flag    
        idx=idx.';    
    else     
        temp=zeros(size(M));
        temp(idx)=1;
        idx=temp.';    
    end
    
    M=M.';
    str=[pad];
    sM=size(M);
    for n=1:numel(M)   
        if idx(n)       
            str=[str '<a href="matlab:clickdate">' sprintf(fmt,M(n)) '</a>' del];        
        else        
            str=[str sprintf(fmt,M(n)) del];        
        end
        if ~mod(n/sM(1),1)
            str=[str(1:end) '\n' pad];
        end        
    end
    
    disp(sprintf(str))
    Dans clickdate.m :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function clickdate 
     
    sprintf('Aujourd''hui, nous sommes le %s',datestr(now,1))
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Ok, pour ton amélioration... Elle me servira.

    Mais peut-on effectuer une action lorsque l'on clique sur n'importe quel jour ?

    Je rappelle que mon souhait est de présenter le calendrier en mettant en évidence la date du jour de l'exécution du programme dans un premier temps.
    Ce qui est maintenant réalisable grâce à Dut.

    Mais maintenant l'étape que j'aimerais franchir est que l'utilisateur puisse sélectionner une date du calendrier avec la souris ou en déplaçant un petit carré avec les flèches du clavier et un enter...

    Est ce possible...
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Voici l'idée générale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function test
     
    fig=figure;
     
    X=rand(3)
     
    [r,c]=meshgrid(1:3);
     
    X=flipud(X);
     
    text(r(:)+.5,c(:)+.5,num2str(X(:)), ...
        'horizontalalignment','center',...
        'hittest','off') 
     
    axis equal
     
    set(gca,'xlim',[1 4], ...
        'ylim',[1 4],...
        'xtick',[1:4], ...
        'ytick',[1:4],...
        'xticklabel','',...
        'yticklabel','',...
        'xgrid','on',...
        'ygrid','on',...
        'buttondownfcn',@click,...
        'tag','myAxes');
     
    handles=guihandles(fig);
    handles.X=X;
    guidata(fig,handles);
     
    function click(obj,event)
     
    handles=guidata(gcf);
    cp=get(gca,'currentpoint');
     
    cp=floor(cp(1,1:2));
     
    title(sprintf('Valeur cliquée : %f',handles.X(cp(2),cp(1))))
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Merci beaucoup...

    Ca devrait le faire maintenant...
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Je suis obligé d'avoir un tableau (X) avec autant de lignes que de colonnes ?

    dans le sens "size(X,1)=size(X,2)"
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  7. #7
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Citation Envoyé par christophe_halgand Voir le message
    Je suis obligé d'avoir un tableau (X) avec autant de lignes que de colonnes ?
    Non :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function test
     
    fig=figure;
     
    X=rand(3,4)
     
    [r,c]=meshgrid(1:size(X,2),1:size(X,1));
     
    X=flipud(X);
     
    text(r(:)+.5,c(:)+.5,num2str(X(:)), ...
        'horizontalalignment','center',...
        'hittest','off') 
     
    axis equal
     
    set(gca,'xlim',[1 size(X,2)+1], ...
        'ylim',[1 size(X,1)+1],...
        'xtick',[1:(size(X,2)+1)], ...
        'ytick',[1:(size(X,1)+1)],...
        'xticklabel','',...
        'yticklabel','',...
        'xgrid','on',...
        'ygrid','on',...
        'buttondownfcn',@click,...
        'tag','myAxes');
     
    handles=guihandles(fig);
    handles.X=X;
    guidata(fig,handles);
     
    function click(obj,event)
     
    handles=guidata(gcf);
    cp=get(gca,'currentpoint');
     
    cp=floor(cp(1,1:2));
     
    title(sprintf('Valeur cliquée : %f',handles.X(cp(2),cp(1))))
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function test
     
    fig=figure;
     
    X=calendar;
     
    if size(X,1)~=size(X,2)
        X(size(X,2),:)=zeros(1,size(X,2));
    end
     
    [r,c]=meshgrid(1:max(size(X));
     
    text(r(:)+.5,c(:)+.5,num2str(X(:)), ...
        'horizontalalignment','center',...
        'hittest','off') 
     
    axis equal
     
    set(gca,'xlim',[1 4], ...
        'ylim',[1 4],...
        'xtick',[1:4], ...
        'ytick',[1:4],...
        'xticklabel','',...
        'yticklabel','',...
        'xgrid','on',...
        'ygrid','on',...
        'buttondownfcn',@click,...
        'tag','myAxes');
    J'ai réussit ceci mais le calendrier est à l'envers...

    Auriez vou une idée pour tout renverser ?

    Merci d'avance
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

  9. #9
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Il faut bien prendre le temps d'analyser et de comprendre les solutions proposées... et poser des questions si il y a le moindre problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function test
    
    fig=figure;
    
    X=calendar;
    X=flipud(X);
    
    [r,c]=meshgrid(1:size(X,2),1:size(X,1));
    
    text(r(:)+.5,c(:)+.5,num2str(X(:)), ...
        'horizontalalignment','center',...
        'hittest','off') 
    
    axis equal
    
    set(gca,'xlim',[1 size(X,2)+1], ...
        'ylim',[1 size(X,1)+1],...
        'xtick',[1:(size(X,2)+1)], ...
        'ytick',[1:(size(X,1)+1)],...
        'xticklabel','',...
        'yticklabel','',...
        'xgrid','on',...
        'ygrid','on',...
        'buttondownfcn',@click,...
        'tag','myAxes');
    
    handles=guihandles(fig);
    handles.X=X;
    guidata(fig,handles);
    
    function click(obj,event)
    
    handles=guidata(gcf);
    cp=get(gca,'currentpoint');
    
    cp=floor(cp(1,1:2));
    
    title(sprintf('Valeur cliquée : %d',handles.X(cp(2),cp(1))))
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  10. #10
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 302
    Points : 52 884
    Points
    52 884
    Par défaut
    Quelque chose d'un peu plus graphique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    function test
    
    fig=figure;
    
    X=calendar;
    X=flipud(X);
    
    [r,c]=meshgrid(1:size(X,2),1:size(X,1));
    
    text(r(:)+.5,c(:)+.5,num2str(X(:)), ...
        'horizontalalignment','center',...
        'hittest','off') 
    
    axis equal
    
    set(gca,'xlim',[1 size(X,2)+1], ...
        'ylim',[1 size(X,1)+1],...
        'xtick',[1:(size(X,2)+1)], ...
        'ytick',[1:(size(X,1)+1)],...
        'xticklabel','',...
        'yticklabel','',...
        'xgrid','on',...
        'ygrid','on',...
        'buttondownfcn',@click,...
        'tag','myAxes',...
        'box','on');
    
    d=str2double(datestr(now,7));
    [r,c]=find(X==d);
    patch('vertices',[r c ; r c+1 ; r+1 c+1 ; r+1 c],'faces',[1 2 3 4],...
        'facecolor',[.8 .7 1],'edgecolor',[.8 0 .8],'facealpha',.8,...
        'tag','marker')
    
    handles=guihandles(fig);
    handles.X=X;
    guidata(fig,handles);
    
    function click(obj,event)
    
    handles=guidata(gcf);
    cp=get(gca,'currentpoint');
    
    cp=floor(cp(1,1:2));
    
    title(sprintf('Valeur cliquée : %d',handles.X(cp(2),cp(1))))
    
    set(handles.marker,'vertices',[cp(1) cp(2) ; cp(1) cp(2)+1 ; cp(1)+1 cp(2)+1 ; cp(1)+1 cp(2)])
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Points : 726
    Points
    726
    Par défaut
    C'est tout simplement magnifique...

    Merci Dut
    INCIA : MATLAB R2014a sous MAC OS 10.9.3

    Nous piétinerons éternellement aux frontières de l'Inconnu, cherchant à comprendre ce qui restera toujours incompréhensible. Et c'est précisément cela qui fait des nous des hommes. Isaac Asimov

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/04/2007, 11h38
  2. Réponses: 4
    Dernier message: 14/11/2005, 15h58
  3. Réponses: 1
    Dernier message: 07/06/2005, 14h00
  4. Réponses: 6
    Dernier message: 27/05/2005, 15h43
  5. Comment trier une DBGRID en cliquant sur une colonne
    Par sessime dans le forum Bases de données
    Réponses: 8
    Dernier message: 09/10/2004, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo