Datetimepicker : ajout de fonctions

Soyez le premier à donner votre avis sur cette source.

Vue 5 437 fois - Téléchargée 785 fois


Description

A partir d'un code de DelphiProg qui nous proposait de dériver les composants existants ponctuellement et sans installation de quoi que ce soit, j'ai fait cette petite unité pour me faciliter la vie...

L'unité UMDF_DateTimePicker permet donc de rajouter les petites fonctions (de fainéant) suivantes :
- StrDate : Renvoie la date en string
- QRYDate : Renvoie la date en format 'mm/dd/yy' utilisable directement dans une requête SQL
- WeekNo : Renvoie le n° de la semaine (nécessite la jcl, à désactiver si vous ne l'avez pas)

Une deuxième fonction peut s'avérer utile pour les sélections de période :
Mode d'emploi :
Sur la form, on pose deux DateTimePicker (DTP1 et DTP2)
on ajoute UMDF_DateTimePicker dans la liste des uses et on déclare le type :
TDateTimePicker = Class(UMDF_DateTimePicker.TDateTimePicker);
(NB : Pour une utilisation récurrente, on peut créer un dossier "Composants Modifiés" et l'ajouter dans la liste des chemins de Delphi)
Sur le FormCreate de la form, on met DTP1.LinkedDTP := DTP2;
On gére l'événement OnCloseUp du DTP1 et on rattache celui du DTP2 à ce même événement.
Et maintenant, quand on choisit une date dans le DTP1, un popup apparait pour proposer une période (1 jour, 1 mois ...). Et quand on clique sur un item du popup, ça déclenche l'événement OnCloseUp.

La propriété Reversed permet de choisir une période inversée (i.e. D'aujourd'hui à il y a un an)

Voilà, ce code ne constitue pas une révolution de la programmation, mais personnellement, ça me fait gagner pas mal de temps.

Vos commentaires, idées et corrections sont les bienvenus...

(Ou si vous avez des modifications de la sorte sur d'autres composants...)

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
vire l'unité JVCL! utilise l'unité DateUtils (natif)!

tu peux ajouter en plus :

type
TDateTimePicker = class(ComCtrls.TDateTimePicker)
private
public
function DateLong : string;
function DateShort : string;
function DayLongNameStr : string;
function DayShortNameStr : string;
function MonthLongNameStr : string;
function MonthShortNameStr : string;
function DayOfWeek : integer;
function DayOfYear : integer;
function DayInMonth : integer;
function DayInYear : integer;
function WeekOfMonth : integer;
function WeekOfYear : integer;
function WeekInYear : integer;
function IsLeapYear : boolean;
end;

{ TDateTimePicker }

function TDateTimePicker.DateLong: string;
begin
DateTimeToString(result, 'dddddd', Self.DateTime);
end;

function TDateTimePicker.DateShort: string;
begin
DateTimeToString(result, 'ddddd', Self.DateTime);
end;

function TDateTimePicker.DayInMonth: integer;
begin
result := DaysInMonth(Self.DateTime);
end;

function TDateTimePicker.DayInYear: integer;
begin
result := DaysInYear(Self.DateTime);
end;

function TDateTimePicker.DayLongNameStr: string;
begin
DateTimeToString(result, 'dddd', Self.DateTime);
end;

function TDateTimePicker.DayOfYear: integer;
begin
result := DayOfTheYear(Self.DateTime);
end;

function TDateTimePicker.DayOfWeek: integer;
begin
result := DayOfTheWeek(Self.DateTime);
end;

function TDateTimePicker.DayShortNameStr: string;
begin
DateTimeToString(result, 'ddd', Self.DateTime);
end;

function TDateTimePicker.IsLeapYear: boolean;
begin
result := IsInLeapYear(Self.DateTime);
end;

function TDateTimePicker.MonthLongNameStr: string;
begin
DateTimeToString(result, 'mmmm', Self.DateTime);
end;

function TDateTimePicker.MonthShortNameStr: string;
begin
DateTimeToString(result, 'mmm', Self.DateTime);
end;

function TDateTimePicker.WeekInYear: integer;
begin
result := WeeksInYear(Self.DateTime);
end;

function TDateTimePicker.WeekOfMonth: integer;
begin
result := WeekOfTheMonth(Self.DateTime);
end;

function TDateTimePicker.WeekOfYear: integer;
begin
result := WeekOfTheYear(Self.DateTime);
end;
sp40
Messages postés
1293
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
9 -
Bonjour aussi fOxi ;)

Merci pour les suggestions, je les intégre la semaine prochaine (je suis sur fedora le week end...)
Concernant le DateUtils, je me rappelle plus trop mais il me semble que le problème c'est que le weeknumber considère que le premier jour de la semaine est le dimanche, alors que le IsoWeekNumber de la jcl est bien le lundi. Je vérifierai ça et verrai si je peux le corriger (au pire, je récupèrerai la fonction).

bon week end
Simon
f0xi
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
26 -
Remarque: WeekOfTheYear définit la semaine d'après la norme ISO 8601. La semaine commence le lundi et s'achève le dimanche.
Bacterius
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
5 -
Je crois qu'il est possible de choisir le jour de début de la semaine quelque part dans DateUtils (on peut le faire à l'initialisation du projet, par exemple, on choisit la norme qu'on veut adopter).

Cordialement, Bacterius !
cavalier2400
Messages postés
120
Date d'inscription
mardi 8 juillet 2008
Statut
Membre
Dernière intervention
1 décembre 2010
1 -
il y'a de fct dans DateUtils pour le choix du 1er Jours de la semaine, j'utilise ces deux fonctions pour mon agenda de bureau, et je réussi le décalage, puisque le week end ici est un vendredi.
jw// est le jour de la semaine
y //est la date courante du date time picker // le décalage des semaines se fait toujours à partir du lundi jour numéro un...

placer les divers labels pour tester,

procedure testj( d:string);
var js1:integer;
begin
rdv1.Monthcalendar1.date:= strtodate(d);
if dayoftheweek(rdv1.Monthcalendar1.date - 5) >0 then js1:= dayoftheweek(rdv1.Monthcalendar1.date - 5)
else js1:= js1+2;
jw:=js1;
end;
procedure cadrelejour();
begin
testj(datetostr(rdv1.monthcalendar1.Date));
if weekof(rdv1.monthcalendar1.Date+2)= weekof(date()+2) then

begin
testj(datetostr(date()));
if jw=1 then begin
rdv1.label12.Font.Color := clwhite; rdv1.label12.Transparent := false; rdv1.label12.Color := clblack;
end ;

if jw=2 then begin
rdv1.label13.Font.Color := clwhite;rdv1.label13.Transparent := false; rdv1.label13.Color := clblack;
end ;

if jw=3 then begin
rdv1.label14.Font.Color := clwhite; rdv1.label14.Transparent := false; rdv1.label14.Color := clblack;
end ;

if jW=4 then begin
rdv1.label15.Font.Color := clwhite; rdv1.label15.Transparent := false;rdv1.label15.Color := clblack;
end;

if jw=5 then begin
rdv1.label16.Font.Color := clwhite; rdv1.label16.Transparent := false; rdv1.label16.Color := clblack;
end;

if jw=6 then begin
rdv1.label17.Font.Color := clwhite; rdv1.label17.Transparent := false; rdv1.label17.Color := clblack;
end ;

if jw=7 then begin
rdv1.label18.Font.Color := clwhite;rdv1.label18.Transparent := false; rdv1.label18.Color := clblack;
end; end; end;



procedure affectiondesjours(d:string) ;

begin
begin
testj(d);
y:= (datetostr(rdv1.MonthCalendar1.Date)) ;
//------------1-------SAMEDI
if jw=1 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack;label14.Transparent := true; label12.Caption := inttostr(dayof(strtodate(y)+0));
label13.Caption := inttostr(dayof(strtodate(y)+1));label14.Caption := inttostr(dayof(strtodate(y)+2));
label15.Caption := inttostr(dayof(strtodate(y)+3)); label16.Caption := inttostr(dayof(strtodate(y)+4));
label17.Caption := inttostr(dayof(strtodate(y)+5)); label18.Caption := inttostr(dayof(strtodate(y)+6));
dbgrid1.SetFocus ;
end;
end;

//------------2-------DIMANCHE
if jw=2 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack; label14.Transparent := true; label12.Caption := inttostr(dayof(strtodate(y)-1));
label13.Caption := inttostr(dayof(strtodate(y)+0)); label14.Caption := inttostr(dayof(strtodate(y)+1));
label15.Caption := inttostr(dayof(strtodate(y)+2)); label16.Caption := inttostr(dayof(strtodate(y)+3));
label17.Caption := inttostr(dayof(strtodate(y)+4)); label18.Caption := inttostr(dayof(strtodate(y)+5));
dbgrid2.SetFocus ;
end; end;

//------------3-------Lundi
if jw=3 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack;label14.Transparent := true;label12.Caption := inttostr(dayof(strtodate(y)-2));
label13.Caption := inttostr(dayof(strtodate(y)-1)); label14.Caption := inttostr(dayof(strtodate(y)+0));
label15.Caption := inttostr(dayof(strtodate(y)+1)); label16.Caption := inttostr(dayof(strtodate(y)+2));
label17.Caption := inttostr(dayof(strtodate(y)+3)); label18.Caption := inttostr(dayof(strtodate(y)+4));
dbgrid3.SetFocus ;
end;
end;

//------------4-------Mardi
if jw=4 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack;label14.Transparent := true; label12.Caption := inttostr(dayof(strtodate(y)-3));
label13.Caption := inttostr(dayof(strtodate(y)-2)); label14.Caption := inttostr(dayof(strtodate(y)-1));
label15.Caption := inttostr(dayof(strtodate(y)+0)); label16.Caption := inttostr(dayof(strtodate(y)+1));
label17.Caption := inttostr(dayof(strtodate(y)+2)); label18.Caption := inttostr(dayof(strtodate(y)+3));
dbgrid4.SetFocus ;
end;
end;
//------------5-------Mercredi
if jw=5 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack;label14.Transparent := true;label12.Caption := inttostr(dayof(strtodate(y)-4));
label13.Caption := inttostr(dayof(strtodate(y)-3));label14.Caption := inttostr(dayof(strtodate(y)-2));
label15.Caption := inttostr(dayof(strtodate(y)-1));label16.Caption := inttostr(dayof(strtodate(y)+0));
label17.Caption := inttostr(dayof(strtodate(y)+1)); label18.Caption := inttostr(dayof(strtodate(y)+2));
dbgrid5.SetFocus ;
end;
end;
//------------6-------jeudi
if jw=6 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack; label14.Transparent := true;label12.Caption := inttostr(dayof(strtodate(y)-5));
label13.Caption := inttostr(dayof(strtodate(y)-4)); label14.Caption := inttostr(dayof(strtodate(y)-3));
label15.Caption := inttostr(dayof(strtodate(y)-2)); label16.Caption := inttostr(dayof(strtodate(y)-1));
label17.Caption := inttostr(dayof(strtodate(y)+0)); label18.Caption := inttostr(dayof(strtodate(y)+1));
dbgrid6.SetFocus ;
end;
end;
//------------7-------Vendredi
if jw=7 then
begin
with rdv1 Do
begin
label14.Font.Color := clblack; label14.Transparent := true; label12.Caption := inttostr(dayof(strtodate(y)-6));
label13.Caption := inttostr(dayof(strtodate(y)-5));label14.Caption := inttostr(dayof(strtodate(y)-4));
label15.Caption := inttostr(dayof(strtodate(y)-3)); label16.Caption := inttostr(dayof(strtodate(y)-2));
label17.Caption := inttostr(dayof(strtodate(y)-1)); label18.Caption := inttostr(dayof(strtodate(y)+0));
dbgrid7.SetFocus ;
end; end; end; end;

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.