MonthCalendar ou autre chose [Résolu/Fermé]

Messages postés
6
Date d'inscription
jeudi 30 octobre 2008
Dernière intervention
11 novembre 2008
- - Dernière réponse : cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
- 11 nov. 2008 à 18:04
Bonjour à tous!

J'aimerais savoir si il est possible de faire des sélections multiples avec le composant TMonthCalendar. J'ai cherché beaucoup et je n'ai rien trouvé. Le problème est que nous utilisions le compostant RBCalendar mais il n'est plus disponible pour la version Delphi 2009. Le but est que nous avons besoin d'un calendrier avec la possibilité de faire des sélections multiples pour faire le traitement par après. Des idées ?

Merci!
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
3
Merci
Est-ce possible de caller la procedure GetMonthInfo dans un double click.
non, ce n'est pas fait pour ça..en revanche tu peux lancer une procédure directement dans l'évènement OnGetMonthInfo.

 J'ai fait tout la gestion des dates dans un tableau en deux dimenstions

Ce tableau c'est un Dbgrid ou un StringGrid ?

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
3
Merci
déjà il y a une erreur sur :

viMois := StrtoInt(copy(lsDate, 6, 2));

ex : 03/11/2008

l'extraction en integer plante car elle donne '/2'

utilise plutôt  MonthOf(date) avec uses DateUtils..

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
3
Merci
autre chose dans :

pourquoi autant de tests dans cette procédure ?

procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;var MonthBoldInfo: Cardinal);
begin
MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
end;

puisque Month est en paramètre..

mais revenons au début :

je veux que l'usager puisse sélectionner le premier mercredi de la 1er semaine, le 2e jeudi du mois et les trois dernière journée du mois, etc. Donc, ce n'est pas des plages à la suite de l'autre qu'on désire avoir, c'est plus méli-mélo. Avez-vous des compostantes qui est capable de faire cela ?

Ton problème est bien de pouvoir conserver toutes les sélections de l'utilisateur :

Pourquoi ne pas les stocker au fur et à mesure dans un autre composant
(en gérant les ajout et le suppressions) ?

et une fois terminé, faire cliquer sur un bouton "envoyer"

cantador

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 104 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_cantador
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
bonsoir,
soit utiliser plusieurs composants soit définir une plage.

cantador
Commenter la réponse de cs_cantador
Messages postés
6
Date d'inscription
jeudi 30 octobre 2008
Dernière intervention
11 novembre 2008
0
Merci
L'utilisation de plusieurs compostants TMontCalendar ne serait pas la solution plosible je crois. Par exemple, je veux que l'usager puisse sélectionner le premier mercredi de la 1er semaine, le 2e jeudi du mois et les trois dernière journée du mois, etc. Donc, ce n'est pas des plages à la suite de l'autre qu'on désire avoir, c'est plus méli-mélo. Avez-vous des compostantes qui est capable de faire cela ?

Merci
Commenter la réponse de nelsonjean
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Tout dépend de ce que tu souhaites faire :
tu peux ausso gérer la sélection à travers le TMonthCalendar  et la stocker quelque part (listBox, Memo, ListView etc..)

Jette un oeil sur le TChart qui lui aussi intègre un calendrier.

cantador
Commenter la réponse de cs_cantador
Messages postés
6
Date d'inscription
jeudi 30 octobre 2008
Dernière intervention
11 novembre 2008
0
Merci
Est-ce possible de caller la procedure GetMonthInfo dans un double click. j'ai cherché sur internet et cette procédure est simplement appelé lorsqu'il y a un changement de mois dans le calendrier. J'ai fait tout la gestion des dates dans un tableau en deux dimenstions et tout fonctionne correctement. la seul chose à faire est de raffraîchir le calendrier sur chaque click. j'ai essayé le repaint, le refresh mais en vaint...Des idées ?
Commenter la réponse de nelsonjean
Messages postés
6
Date d'inscription
jeudi 30 octobre 2008
Dernière intervention
11 novembre 2008
0
Merci
Déclaration dans mon unité :

  public
    Days: array [1..12,1..31] of LongWord;

procedure TForm1.MonthCalendar1DblClick(Sender: TObject);
var
  lsDate      : String;
  lsJour      : String;
  viMois      : Integer;
  viJour      : Integer;
  lbPresent   : Boolean;
  lbAjouter   : Boolean;
  lbSupprimer : Boolean;
  liPosition  : Integer;
  I           : Integer;


  Month         : Cardinal;
  MonthBoldInfo : Cardinal;


begin
lbPresent  := False;
lbAjouter  := False;
liPosition := 0;
lsDate     := DateToStr(MonthCalendar1.Date);
lsJour     := copy(lsDate, 9, 2);
viMois     := StrtoInt(copy(lsDate, 6, 2));
For viJour := 1 to 31 do
  begin
  if lsJour = IntToStr(Days[viMois, viJour]) then
    begin
    lbPresent := True;
    liPosition := viJour
    end;
  end;
if lbPresent then
  begin
  I := 0;
  lbSupprimer := False;
  while lbSupprimer = False do
    begin
    if lsDate = lsbDate.Items[I] then
      begin
      lsbDate.Items.Delete(I);
      lbSupprimer  := True;
      end
    else
      begin
      if I = lsbDate.Count - 1 then
        begin
        lbSupprimer := True;
        end
      else
        begin
        I := I + 1;
        end;
      end;
    end;


  Days[viMois, liPosition] := 0;
  end
else
  begin
  lsbDate.Items.Add(DateToStr(MonthCalendar1.Date));
  viJour := 1;
  while lbAjouter = False do
    begin
    if Days[viMois, viJour] = 0 then
      begin
      Days[viMois, viJour] := StrToInt(lsJour);
      lbAjouter := True;
      end
    else
      begin
      viJour := viJour + 1;
      end;
    end;
  end;


//Month := viMois;
//MonthBoldInfo := 0;
//MonthCalendar1GetMonthInfo(Sender, Month, MonthBoldInfo);


//MonthCalendar1.BoldDays(Days[viMois],MonthBoldInfo);

end;

procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
  var MonthBoldInfo: Cardinal);


begin


if Month = 1 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 2 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 3 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 4 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 5 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 6 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 7 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 8 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 9 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 10 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 11 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
if Month = 12 then
  begin
  MonthCalendar1.BoldDays(Days[Month],MonthBoldInfo);
  end;
end;

Voici mon listing...Comme tu peux voir, je fais du code dans le doubleclick et dans l'évènement OnGetMonthInfo. Ce qu'il me reste à faire est d'appelé la procédure OnGetMonthInfo dans mon DoubleClick et tout fonctionnera. Si je sélectionn les dates et que je change et je reviens de mois, les date sont correctements indiquées.

Merci
Commenter la réponse de nelsonjean
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
Hum hum ...

Tu peux en revanche peut-être forcer le déclenchement de l'évènement dans le OnDoubleClick :
en stockant l'évènement dans une variable :
MisaJour : TOnGetMonthInfoEvent;
En mettant au départ l'event à Nil..
MisaJour := Nil;
et sur le double-click, l'affecter à l'evenement
mais je le sens pas trop..


j'ai pas encore testé (pas trop le temps en ce moment..)
nb : l'évènement
procedure TForm1.MonthCalendar1GetMonthInfo(Sender: TObject; Month: Cardinal;
  var MonthBoldInfo: Cardinal);
ne s'execute que sur le changement de mois et non de date

a suivre->>>>

cantador
Commenter la réponse de cs_cantador
Messages postés
6
Date d'inscription
jeudi 30 octobre 2008
Dernière intervention
11 novembre 2008
0
Merci
Nous travaillons avec les dates dans ce format ici : YYYY/MM/DD


Je vois que vous utilisez un autre format. Mais je garde ton MonthOf(Date), instruction plus sur pour le travail à faire.


Est-ce possible de générer un changement de mois et de revenir à celui du départ ?


 
Commenter la réponse de nelsonjean
Messages postés
6
Date d'inscription
jeudi 30 octobre 2008
Dernière intervention
11 novembre 2008
0
Merci
Ok pour la procédure MonthCalendar1GetMonthInfo, j'ai rectifié comme tu m'as dit!

Pour le stockage des informations, je suis d'accord avec toi et c'est ce que je vais faire mais ce que j'aimerais, c'est de pouvoir montrer à l'usager les sélections fait par ce dernier au fur et à mesure. Par exemple, dans Outlook, lorsqu'on sélectionne plusieurs date avec le CTRL, la sélection est en gras.

Merci beaucoup pour ton aide!
Commenter la réponse de nelsonjean
Messages postés
4996
Date d'inscription
dimanche 26 février 2006
Dernière intervention
27 mars 2018
0
Merci
oui je vois..
le plus génant c'est la sélection multiple..

regarde du côté de TeeChart (ou pose la question sur leur forum-> très actif)
tu peux aussi confectionner ton propre calendrier à l'aide d'un StringGrid.

cantador
Commenter la réponse de cs_cantador

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.