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

Langage Delphi Discussion :

Générer le listing des jours entre deux dates


Sujet :

Langage Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    Points : 35
    Points
    35
    Par défaut Générer le listing des jours entre deux dates
    j'ai besoin de mettre en place ceci:

    je selectionne via un DateTimePicker1 une date de depart, via un DateTimePicker2 une date de fin
    il dois me generer dans une liste le listing des journées comprises entre ces deux dates (moi j'ai pris un CheckListBox)
    car ensuite, je dois pouvoir cocher des dates directement dans cette liste car je dois pouvoir comptabiliser vie des coches le nombre de jour selectionné.
    egalement, est il possible de mettre en rouge automatiquement le dimanche et par exemple en bleu automatiquement le samedi ?

    Merci par avance

  2. #2
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Excuse moi, j'ai du m'absenter un moment, ça arrive
    Bidouilleuse Delphi

  3. #3
    Membre expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 53
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Points : 3 565
    Points
    3 565
    Par défaut
    Voici quelque fonctions et procédures :
    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    uses DateUtils;
    procedure RemplieCheckListBox(DateDebut,DateFin:TDateTime;CheckListBox:TCheckListBox);
    var i:integer;
        UneDate:TDate;
        Debut,Fin:integer;
    begin
      Debut:=Trunc(DateDebut);
      Fin:=Trunc(DateFin);
      if Fin>=Debut
      then begin
             //Remplie la CheckBox
             CheckListBox.Clear;
             CheckListBox.Style:=lbOwnerDrawFixed;
             for i:=Debut to Fin do
                 CheckListBox.AddItem(IntToStr(i),nil);
           end;
    end;
     
    procedure DessineItem(CheckListBox: TCheckListBox;
      Index: Integer; Rect: TRect);
    var UneDateString,Affichage:string;
        UneDate:TDate;
        OffSet:Integer;
    begin
      {Le dessin se fait sur le canevas du contrôle,
      pas dans la fiche }
      with CheckListBox.Canvas do
        begin
        //Récupère les données
        UneDateString:=CheckListBox.Items[Index];
        UneDate:=StrToInt(UneDateString);
        Affichage:=DateToStr(UneDate);
        {efface le rectangle }
        FillRect(Rect);
        {fournit le décalage par défaut }
        Offset :=2;
        {Attention, on utilise DayOfTheWeek et non pas DayOfWeek}
        case DayOfTheWeek(UneDate) of
          6:Brush.Color:=clBlue; //Utliser Font au lieu de Brush, si on c'est le texte que l'on veux colorier
          7:Brush.Color:=clred;
        end;
        {efface le rectangle }
        FillRect(Rect);
        {affiche le texte }
        TextOut(Rect.Left,Rect.Top,Affichage);
      end;
    end;
     
    function CalculeNbredeDatesCochees(CheckListBox: TCheckListBox):integer;
    var i:integer;
    begin
      Result:=0;
      for i:=0 to CheckListBox.Count-1 do
        if CheckListBox.Checked[i] then inc(result);
    end;
     
    function CheckBoxItemToDate(CheckListBox: TCheckListBox; Index:Integer):TDateTime;
    begin
      Result:=StrToInt(CheckListBox.Items[Index]);
    end;
    Voici comment tu peux les utiliser :

    Etape 1 : tu remplis ta CheckboxList à partir de tes DateTimePicker :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      RemplieCheckListBox(DateTimePicker1.Date,DateTimePicker2.Date,CheckListBox1);
    end;
    Etape 2 : Pour dessiner tes dates, tu codes l'évènement OnDrawItem de ta CheckListBox comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.CheckListBox1DrawItem(Control: TWinControl;
      Index: Integer; Rect: TRect; State: TOwnerDrawState);
    begin
      if (Control is TCheckListBox) then
      DessineItem((Control as TCheckListBox),Index,Rect);
    end;
    Etape 3 :
    a) Pour récupérer le nombre d'éléments cochés :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.Button2Click(Sender: TObject);
    var NbredeDatesCochees:integer;
    begin
      NbredeDatesCochees:=CalculeNbredeDatesCochees(CheckListBox1);
      Label2.Caption:=IntToStr(NbredeDatesCochees);
    end;
    b) Pour récupérer le nombre d'éléments cochés au fur et à mesure que l'utilisateur les coches ou les décoches, tu codes l'évènement OnClickCheck comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.CheckListBox1ClickCheck(Sender: TObject);
    var NbredeDatesCochees:integer;
    begin
      NbredeDatesCochees:=CalculeNbredeDatesCochees(CheckListBox1);
      Label1.Caption:=IntToStr(NbredeDatesCochees);
    end;
    Etape 4 : pour récupérer la date que représente un item de ta CheckListBox :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var UneDate:TDate;
    begin
      UnIndex:=1;
      UneDate:=CheckBoxItemToDate(CheckListBox1,UnIndex);
    end;
    Bidouilleuse Delphi

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    Points : 35
    Points
    35
    Par défaut Un premier Merci
    j'ai deja les grandes lignes de ce que je veux faire.

    est il possible de transformer les dates (04/03/06) dans la cheklistbox en date type (Mercredi 04 Avril 2006) ?

  5. #5
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Je te suggère de regarder la fonction DecodeDateFully dans laquelle la dernière variable permet de déterminer le jour:
    • 1-> dimanche
    • 2-> lundi
    • etc...
    Ainsi :
    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
    var y,m,d,w:Word;
        journee:string;
    begin
           <début boucle>
     
           DecodeDateFully(Now,y,m,d,w);
           Case w of
            1:journee:='Dimanche';
            2:journee:='Lundi';
            3: etc
           end;
           journee:=journee+' '+IntToStr(d)+' ';
           Case m of:
             1:journee:=journee+'Janvier ';
             2:journee:=journee+'Février ';
             3: etc...
            end;
           journee:=journee+IntToStr(y);
           MaCheckBox.Items.Add(journee);
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    Points : 35
    Points
    35
    Par défaut mais comment l'integer ?
    je voudrais l'integer dans les fonction si dessus, c'est a dire quand je selectionne les date et que c'est validé, pour que les jours et mois soit indiqué dans la checklistbox

  7. #7
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    pense a utilisé la fonction FormatDateTime utilisable comme ceci.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     FormatDateTime('dddd dd mmmm yyyy',MyDate);
    pour plus de détails sur la fonction.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    Points : 35
    Points
    35
    Par défaut
    mais comment l'implanter dans ma checklist box ?

  9. #9
    Membre expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Points : 3 329
    Points
    3 329
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      MaCheckBox.Items.Add(FormatDateTime('dddd dd mmmm yyyy',MyDate););
    vous n'avez pas a écrire une procédure qui transforme la date au format

    mercredi 12 janvier... car elle existe.

Discussions similaires

  1. Liste des jours entre deux dates
    Par rvzip64 dans le forum Requêtes
    Réponses: 12
    Dernier message: 01/09/2015, 16h00
  2. [2008R2] (Débutant) Liste des mois entre deux dates
    Par PentatonicJPZ dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 23/06/2014, 08h35
  3. fonction table pour récupérer la liste des jours entre deux dates
    Par elmoul7ak dans le forum Développement
    Réponses: 2
    Dernier message: 01/05/2010, 13h22
  4. Liste des mois entre deux dates
    Par ginkas31 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 10/03/2008, 16h33
  5. Réponses: 2
    Dernier message: 06/11/2006, 14h35

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