Problème avec un TDateTimePicker

Résolu
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 - 15 sept. 2006 à 12:54
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 - 18 sept. 2006 à 09:25
Bonjour,
Sur une fiche j'ai mis un TDateTimePicker mais a l'essai de ce composant je m'aperçois que lorsque je change la date il passe deux fois sur l'évènement On Change et je ne comprends pas pourquoi.

Sur OnChange, j'ai mis:

procedure TfrmPlanning.DateTimePicker1Change(Sender: TObject);
begin
If DateTimePicker1.Date < Date Then
        begin
        Application.MessageBox('vous ne pouvez pas saisir une date inférieure à la date du jour...!', 'Erreur',mb_Ok);
        DateTimePicker1.dateTime := Date;
        End;
end;

Je ne comprends pas pourquoi l'évènement On Change se produit deus fois.

De plus sur :
DateTimePicker1.dateTime := Date;
le DateTimePicker1 ne se met pas à jour sur la date.

Quelqu'un peut m'expliquer pourquoi?

D'abance merci

Cordialement

Codial

14 réponses

DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
17 sept. 2006 à 11:21
pour le moment je n'ai pas trouvé...à part mettre un panel de la taille de l'edit du TDateTimePicker ("cache-cache")

tu affiches le panel ou tu le caches (show ou hide)

tu peux aussi faire "panel1.caption:=datetostr(DateTimePicker1.DateTime);" quand tu veux qu'il affiche la date...

pouah... rien de terrible pour le moment.... que du bricolage

DrJerome
3
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
15 sept. 2006 à 15:20
salut,

je viens de faire le test en format TIME.

quand tu change l'heure par clavier/souris, l'event est trigé UNE fois. Mais i tu change l'heure ET les minutes, l'event est trigé deux fois.

et le "DateTimePicker1.dateTime := Date;" ne trig pas l'event.

et j'ai aussi modifié le .Datetime dans l'event, et il n'est pas retrigé.

en bref, chez moi ça marche.

es-tu sur que tu n'as changé, disons, que le jour? ou le jour ET le mois?
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
15 sept. 2006 à 18:30
Saludo amigos ;)

c'est normal :

quand tu essaies de changer manuellement la date sur ton DateTimePicker ça fait un événement "Onchange"

Dans l'événement OnChange tu as écris: "DateTimePicker1.dateTime := Date;"
c'est en soit même une modification qui décleche un 2° événement "OnChange"

DrJerome
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
15 sept. 2006 à 18:33
ceci bien sûr par le changement par le listbox du DateTimePicker (et non pas par l'edit du DateTimePicker qui est un événement correct)

DrJerome
0

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

Posez votre question
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
15 sept. 2006 à 19:13
2 solutions :




1° solution :
<hr />procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
If DateTimePicker1.Date < Date Then
        begin
        Application.MessageBox('vous ne pouvez pas saisir une date inférieure à la date du jour...!', 'Erreur',mb_Ok);
        DateTimePicker1.dateTime := Date;
        end;
end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
If (DateTimePicker1.Date < Date) and not (DateTimePicker1.DroppedDown) Then
        begin
        Application.MessageBox('vous ne pouvez pas saisir une date inférieure à la date du jour...!', 'Erreur',mb_Ok);
        DateTimePicker1.dateTime := Date;
        end;
end;

<hr />
2° solution (solution sans message) :
<hr />procedure TForm1.FormCreate(Sender: TObject);
begin
     DateTimePicker1.MinDate:=Date;
end;
<hr />

DrJerome
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
15 sept. 2006 à 19:21
variante de la 1° solution :





<hr />

procedure Monmessage;
begin
        Application.MessageBox('vous ne pouvez pas saisir une date inférieure à la date du jour...!', 'Erreur',mb_Ok);
        TfrmPlanning.DateTimePicker1.dateTime := Date;
end;



procedure TForm1.DateTimePicker1CloseUp(Sender: TObject);
begin
     If DateTimePicker1.Date < Date Then
     Monmessage;
end;



procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
     If (DateTimePicker1.Date < Date) and not (DateTimePicker1.DroppedDown) Then
     Monmessage;
end;



<hr />




DrJerome
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
15 sept. 2006 à 19:24
variante de la 1° solution :





<hr />

procedure Monmessage;
begin
    

Application.MessageBox('vous ne pouvez pas saisir une date inférieure à la date du jour...!', 'Erreur',mb_Ok);
     TfrmPlanning.DateTimePicker1.dateTime := Date;
end;




procedure TfrmPlanning.DateTimePicker1CloseUp(Sender: TObject);
begin


     If DateTimePicker1.Date < Date Then
     Monmessage;
end;






procedure TfrmPlanning.DateTimePicker1Change(Sender: TObject);
begin
    

If (DateTimePicker1.Date < Date) and not (DateTimePicker1.DroppedDown) Then
     Monmessage;

end;

<hr />





DrJerome
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
15 sept. 2006 à 19:34
il y avait une petite coquille : il fallait lire "

frmPlanning.DateTimePicker1.dateTime := Date;" (à la place de "
frmPlanning.DateTimePicker1.dateTime := Date;"



en fait on peut simplifier encore ainsi :





<hr />

procedure Monmessage;
begin


     If frmPlanning.DateTimePicker1.Date < Date then
     begin
     Application.MessageBox('vous ne pouvez pas saisir une date inférieure à la date du jour...!', 'Erreur',mb_Ok);
     frmPlanning.DateTimePicker1.dateTime := Date;
     end;

end;




procedure TfrmPlanning.DateTimePicker1CloseUp(Sender: TObject);
begin
    

Monmessage;
end;






procedure TfrmPlanning.DateTimePicker1Change(Sender: TObject);
begin
    

If not DateTimePicker1.DroppedDown Then
     Monmessage;
end;




<hr />
désolé pour ma présence itérative...je disparais ;)

DrJerome
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
16 sept. 2006 à 09:58
Bonjour,
Tout d'abord merci pour vos explications et réponses.
Pour Loda: J'ai fais des test et même avec une procédure comme:procedure TfrmPlanning.DateTimePicker1Change(Sender: TObject);
begin
   ShowMessage('OnChange');
end;
L'évènement OnChange s'effectue deux fois!

Pour DRJEROME:
j'ai testé celà:
procedure TfrmPlanning.DateTimePicker1CloseUp(Sender: TObject);
begin
Monmessage;
end;


procedure TfrmPlanning.DateTimePicker1Change(Sender: TObject);
begin
   ShowMessage('OnChange');
end;


et il semble que l'évènement OnChange s'effectue avant l'évènement CloseUP.

C'est à dire que pour mon cas il effectue quand même un filtre sur un DBGrid avant de me lancer le message!

Par ailleurs:

If (DateTimePicker1.Date < Date) and not (DateTimePicker1.DroppedDown) Then
     Monmessage;
ne fonctionne pas, Monmessage ne s'affiche pas.

Je continue de tester.

Cordialement

Codial


 


 
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
16 sept. 2006 à 10:12
Salut,

<hr />
"et il semble que l'évènement OnChange s'effectue avant l'évènement CloseUP"
<hr />

oui, c'est pourquoi j'avais proposé 1 code pour "OnChange" asocié à 1 code pour "CloseUP"

dommage, chez moi ça marchait bien ... c'est peut-être un problème de version Delphi....

DrJerome
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
17 sept. 2006 à 09:30
Bonjour,

je travaille avec D7 pro. Ceci dit j'ai résolu mon problème en effectuant mes tests que dans l'évènement On CloseUp et ça a l'air de fonctionner.

Encore merci pour ton aide.


Ceci dit j'ai encore une question: Peut on vider la partie texte du TDateTimePicker et si coui comment?

Cordialement

Codial
0
codial Messages postés 265 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 5 mai 2015 1
17 sept. 2006 à 16:34
Bonsoir,

oui c'est ce que j'ai fait avec des Edit!!!!

Encore merci

Codial
0
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
17 sept. 2006 à 22:09
Bonsoir,

tu as fais un truc du style "Edit1.Parent=DateTimePicker1;"
Bonne idée

tu n'étais pas obligé de mettre  "Réponse acceptée" mais c'est gentil en tout cas

A+

DrJerome ;)
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
18 sept. 2006 à 09:25
je suis étonné, chez moi il ne s'est trigé qu'une fois. Note que j'ai fait le test en mode "heure". Si je refait un test je te dirais.

bon code,

ps: je me repete peut-être, mais si tu change deux paramèetres(meure et minute par ex.), il est trigé deux fois.
0