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

  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 304
    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 304
    Points : 52 882
    Points
    52 882
    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))

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

  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 304
    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 304
    Points : 52 882
    Points
    52 882
    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))))

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

  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)"

  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 304
    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 304
    Points : 52 882
    Points
    52 882
    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))))

  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

  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 304
    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 304
    Points : 52 882
    Points
    52 882
    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))))

  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 304
    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 304
    Points : 52 882
    Points
    52 882
    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)])

  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

+ 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