codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 2015
-
15 sept. 2006 à 12:54
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 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.
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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;
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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;
DRJEROME
Messages postés436Date d'inscriptionjeudi 9 janvier 2003StatutMembreDerniè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 ;)
codial
Messages postés265Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention 5 mai 20151 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.