MonthCalendar ou autre chose

Résolu/Fermé
nelsonjean Messages postés 6 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008 - 30 oct. 2008 à 14:30
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 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!
A voir également:

12 réponses

cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
7 nov. 2008 à 19:17
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
8 nov. 2008 à 14:00
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 nov. 2008 à 15:23
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
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 oct. 2008 à 20:20
bonsoir,
soit utiliser plusieurs composants soit définir une plage.

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nelsonjean Messages postés 6 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008
31 oct. 2008 à 13:23
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
31 oct. 2008 à 14:17
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
0
nelsonjean Messages postés 6 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008
6 nov. 2008 à 15:14
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 ?
0
nelsonjean Messages postés 6 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008
7 nov. 2008 à 19:49
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
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
7 nov. 2008 à 22:45
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
0
nelsonjean Messages postés 6 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008
11 nov. 2008 à 14:40
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 ?


 
0
nelsonjean Messages postés 6 Date d'inscription jeudi 30 octobre 2008 Statut Membre Dernière intervention 11 novembre 2008
11 nov. 2008 à 15:53
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!
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
11 nov. 2008 à 18:04
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
0
Rejoignez-nous