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

Composants VCL Delphi Discussion :

Filtrer les dates d'un datetimepicker


Sujet :

Composants VCL Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut Filtrer les dates d'un datetimepicker
    Bonjour

    J'aimerai que l'utilisateur puisse choisir une date et dès qu'il a validé son choix, le résultat affiché, si'il n'est pas dans les conditions requises comme indiqués ci-bas, on envoie un showmessage + une remise à jour de la date

    en bref, j'ai le code de vérification mais je sais pas dans quel événement du datetimepicker, je dois l'insérer !

    Je cherche où positionner ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if datetimepicker1.Date < 01/10/2005 then
    begin
    showmessage('Pas possible ! ');
    datetimepicker1.date := now;
    end;
    merci[/code]

  2. #2
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Bonjour,
    l'évenement que tu cherches est le OnChange

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.DateTimePicker1Change(Sender: TObject);
    begin
      showmessage('.');
    end

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    Merci

    mais le problème est que lorsque je met mon code dedans,
    il m'avertit grâce à mon showmessage mais ce dernier boucle sans fin ! Donc j'ai pas le temps de réinitialiser la date à Now !

    Comment optimiser ce code ?

    merci

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Reinitialise ta date a now d'abord puis affiche le message apres ^^

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure Tseptembre.DateTimePicker1Change(Sender: TObject);
    begin
    if datetimepicker1.Date < 01/10/2005 then
    begin
    caisse.FieldByName('MVTDATEDOC').AsDateTime := DateTimePicker1.DateTime;
    end
    else
    datetimepicker1.date := now;
    showmessage('Pas possible ! ');
    end;
    j'ai fait cela justement et cela boucle à donf !

  6. #6
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    il faut que tu desactive l'evenement onchange de ton DTP au debut du traitement et que tu le remtte a la fin

    Sinon effectivement, dans le Onchange tu CHANGE la date donc boucle ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure Tseptembre.DateTimePicker1Change(Sender: TObject); 
    begin 
    datetimepicker1.OnChange := nil;
     
    if datetimepicker1.Date < 01/10/2005 then 
    begin 
    caisse.FieldByName('MVTDATEDOC').AsDateTime := DateTimePicker1.DateTime; 
    end 
    else 
    datetimepicker1.date := now; 
    showmessage('Pas possible ! '); 
     
    datetimepicker1.OnChange := DateTimePicker1Change;
    end;

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if datetimepicker1.Date < 01/10/2005 then
    Déjà ca, c'est impossible que ca fonctionne, tu fais 1 divisé par 10 divisé par 2005.

    Ecrit plutot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if datetimepicker1.Date < StrToDate('01/10/2005') then
    Vu que now devait être une date < a 01/10/2005, quand tu changes la date a now bin il al rechange, la rechange etc ...

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par SubZero2
    il faut que tu desactive l'evenement onchange de ton DTP au debut du traitement et que tu le remtte a la fin

    Sinon effectivement, dans le Onchange tu CHANGE la date donc boucle ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    begin
       DTP.OnChange := nil;
    // Traitement
       DTP.Onchange := DateTimePickerOnChange;
    end;
    Si son if etait correct, ca bouclerai que 2 fois dans le onchange. Mais c'est vrai que c'est plus propre quand on coupe l'événement ^^

  9. #9
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    c'est vrai mais il n'as pas a y passer 2 fois, avec une ca suffit, non ?

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par SubZero2
    c'est vrai mais il n'as pas a y passer 2 fois, avec une ca suffit, non ?
    Oui, oui je dis pas le contraire ^^ (j'ai edit mon post j'ai envoyé trop vite ^^)

    Mais bon, du à l'erreur au niveau de son if, c'est clair que ca bouclait indéfiniment.

  11. #11
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Post croisés !

  12. #12
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    J'aurais bien vu un test sur le OnChange moi plutôt que de supprimer la référence à l'évenement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If DTP.Date <> Now then
      DTP.Date := Now;

    Si je ne m'abuse ça suffit à ne pas faire boucler le OnChange.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    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
     
    procedure Tseptembre.DateTimePicker1Change(Sender: TObject);
    begin
     
    datetimepicker1.OnChange := nil;
     
    if datetimepicker1.Date < strtodate ('01/10/2005') then
    begin
    caisse.FieldByName('MVTDATEDOC').AsDateTime := DateTimePicker1.DateTime;
    end
    else
    showmessage('Pas possible ! ');
    datetimepicker1.OnChange := datetimepicker1change;
     
    end;

    Réaction de code très très bizarre car il m'indique le dépassement grâce au showmessage puis au lieu de se mettre à la date du jour, il me fait défiler l'écran des mois jusqu'à 2006 ! puis au bout de x défilements, il arrête son traitement pour me mettre une date en 2006.

  14. #14
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    il y passe toujours 2 fois

  15. #15
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par -Sylvain Leray-
    J'aurais bien vu un test sur le OnChange moi plutôt que de supprimer la référence à l'évenement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If DTP.Date <> Now then
      DTP.Date := Now;

    Si je ne m'abuse ça suffit à ne pas faire boucler le OnChange.
    Bin si, Exemple :

    1 - Passe la date a jour + 10
    2 - Le onchange s'active
    3 - Test de la date , elle est differente de now
    4 - Modification de la date et reappel de l'evenement onchange car on modifie la date du dtp
    5 - Test de la date, elle est = a now
    6 - fin

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    là je comprends ce que vous voulez dire mais je ne vois pas là où je dois modifier dans mon code pour éviter la boucle.

  17. #17
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    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
    procedure Tseptembre.DateTimePicker1Change(Sender: TObject); 
    begin 
    datetimepicker1.OnChange := nil;   <==== LA
     
    if datetimepicker1.Date < 01/10/2005 then 
    begin 
    caisse.FieldByName('MVTDATEDOC').AsDateTime := DateTimePicker1.DateTime; 
    end 
    else 
    datetimepicker1.date := now; 
    showmessage('Pas possible ! '); 
     
    datetimepicker1.OnChange := DateTimePicker1Change;   <==== LA
    end;
    Pour moi c'est le plus simple et propre ... mais ce n'est qu'un avis personel

  18. #18
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    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
     
    procedure Tseptembre.DateTimePicker1Change(Sender: TObject);
    begin
    datetimepicker1.OnChange := nil;  
     
    if datetimepicker1.Date < StrToDate('01/10/2005') then <<<--- Sans l'erreur ^^
    begin
    caisse.FieldByName('MVTDATEDOC').AsDateTime := DateTimePicker1.DateTime;
    end
    else
    datetimepicker1.date := now;
    showmessage('Pas possible ! ');
     
    datetimepicker1.OnChange := DateTimePicker1Change;  
    end;
    La meme que subzero2 mais sans l'erreur au niveau de la date du if ^^

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 160
    Points : 61
    Points
    61
    Par défaut
    ton code ne marche pas, cela boucle encore !

  20. #20
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Puis vu qu'il a la jvcl, ca serait pas mieux d'utiliser un jvdbdatetimepicker et de gérér ca au niveau de l'enregstrement dans la base de données ?

Discussions similaires

  1. Filtrer les Dates = à hier
    Par Aziraphal dans le forum Débuter
    Réponses: 2
    Dernier message: 14/02/2014, 08h02
  2. filtrer les dates?
    Par 3alit dans le forum WinDev
    Réponses: 3
    Dernier message: 15/05/2012, 18h32
  3. Filtrer les dates
    Par chougadosu dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 01/12/2011, 12h43
  4. [8i] filtrer les dates 01/01/9999
    Par samsan dans le forum SQL
    Réponses: 14
    Dernier message: 04/07/2007, 09h43
  5. [C#] Calcul sur les dates avec des DateTimePicker
    Par alizee971 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 02/04/2005, 17h14

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