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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    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 : 55
    Localisation : France, Hauts de Seine (Île de France)

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

  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 : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    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;

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    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 confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 932
    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);

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

    Informations forums :
    Inscription : Avril 2006
    Messages : 61
    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

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