Calendrier

Résolu
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 21 janv. 2007 à 13:44
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 - 24 janv. 2007 à 20:17
Bonjour,

Projet Calendrier.

En supposant avec un "Tcaption", la routine "formatdatetime('dd/mm/yyyy',Now)" et un fichier ressource qui contiendrait des images pour les noms des jours (lundi...dimanche), le jour (1...31) et le mois (1...12).

EX: 21/01/2007

"formatdatetime('dddd',Now)" Dimanche = dimanche.jpg
"formatdatetime('dd',Now)"     21 = 21.jpg
"formatdatetime('mmmm',Now)"   janvier = janvier.jpg
"formatdatetime('yyyy',Now)"

Serait t'il possible afin d'alléger le code d'utiliser une routine qui détecterait le nom du jour et afficherait une image spécifique de la ressource de même pour le jour et pour le mois.

Merci d'avance,

@+,
 
Cincap

[url]mailto:/url

20 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
22 janv. 2007 à 13:10
Salut,

il y a vraiment un problème de taille sur le site

ça fait la troisième fois que je réécris mon post et chaque fois il manque soit des lignes soit la totalité

Je disais donc :
ResName := 'Tada';

est à supprimer dans la Procedure PlayWave

 
@+
Cirec

<hr size ="2" />
3
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 janv. 2007 à 20:17
Bonsoir,

@ Cirec, C'était bien cela de plus, je dois créer tous les fichiers minute, j'aurais mieux aimé lire l'heure que toute les demi heure

Comme cela je n'avais qu'un fichier 30minutes.wav à utiliser.


Enfin, le résultat n'est pas mal.

Encore merci pour ta patience.

@+,

Cincap

[url]mailto:/url
3
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 janv. 2007 à 16:09
Salut,

{
  Ex:
  Dans le fichier de ressources :
WeekDay0           RCJPEG       "dimanche.jpg"
Day1                   RCJPEG       "1.jpg"
Month1               RCJPEG       "Janvier.jpg"
  Les Images des jours de la semaine : de WeekDay0.jpg à WekkDay6.jpg (Dimanche 0 .. Samedi 6)
  Les Images des jours du mois          : de Day1.jpg à Day31.jpg
  les l'images du mois                         : de Month1.jpg à Month12.jpg
}
procedure TForm1.Button1Click(Sender: TObject);
Const WDayBase  = 'WeekDay';
      DayBase   = 'Day';
      MonthBase = 'Month';
      aMsg = 'Pour aujourd''hui il faut charger les fichiers suivants:'#13#10+
             'Jour Semaine : %s'#13#10+
             'Jour : %s'#13#10+
             'Mois : %s';
Var SysTime : TSystemTime;
    JourSemaine, Jour, Mois : String;
begin
  ZeroMemory(@SysTime, SizeOf(SysTime));
  GetsystemTime(SysTime);
  JourSemaine : = WDayBase + IntToStr(SysTime.wDayOfWeek);
  Jour        := DayBase + IntToStr(SysTime.wDay);
  Mois        := MonthBase + IntToStr(SysTime.wMonth);
  ShowMessagefmt(aMsg, [JourSemaine, Jour, Mois]);
end ;

je pense que tu sais faire le reste

 
@+
Cirec

<hr size ="2" />
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
21 janv. 2007 à 16:59
Salut Cirec,

Sympa, ce bout de code.
Je me suis amusé à le tester un peu plus qu'avec Now et un TButton.
Pour ceux que ça intéresse, il suffit de rajouter un TMonthCalendar et un TLabel, de le placer dans MonthCalendar1Click()  et de modifier deux lignes :

//GetsystemTime(SysTime);
DateTimeToSystemTime(MonthCalendar1.Date, SysTime);

//ShowMessagefmt(aMsg, [JourSemaine, Jour, Mois]);
Label1.Caption :=
Format('Pour aujourd''hui il faut charger les fichiers suivants:'#13#10+
       'Jour Semaine : %s'#13#10+
       'Jour : %s'#13#10+
       'Mois : %s', [JourSemaine, Jour, Mois]);

Bonne prog'

japee
0

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

Posez votre question
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
21 janv. 2007 à 17:00
Heu... et remplacer "Pour aujourd'hui" par "Pour cette date", lol...
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
21 janv. 2007 à 17:51
Bonsoir,

Merci les amis, ce fut très rapide lol....

Je vais tester cela à la semaine.

@+,

Cincap

[url]mailto:/url
0
japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
21 janv. 2007 à 18:13
Salut cincap,

Qu'il n'y ait pas de malentendu, je n'ai fait que tester le code de Cirec.
Je ne voudrais pas qu'on m'attribue le mérite qui lui revient entièrement, lol.

Bonne fin de dimanche (bouh...)

japee
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
21 janv. 2007 à 19:50
Bonsoir,

@ Japee, bien compris, chaque membre et chaque participant à déjà le mérite soit d'avouer qu'il est bloqué dans un code soit qu'il propose à sa manière une aide et son astuce.

Je pense que le forum n'est pas un concours à qui on remet une médaille de la plus pertinente des astuces.


Pour revenir sur cette idée, je vais remplacer les images par une voix féminine en *.wav qui sera dans le fichier ressource identifié pareillement.




WeekDay0 à 6           WAVE       "dimanche.Wav"
Day1 à 31                  WAVE       "1.Wav"
Month1 à 12               WAVE       "Janvier.Wav"




Le hic, il faut extraire les bons fichiers qui correspondent à
WDayBase  = 'WeekDay';
DayBase   = 'Day';
MonthBase = 'Month';

et les jouer, la j'avoue je cale mais je persiste, peut être l'âge !

@+,

Cincap

[url]mailto:/url
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 janv. 2007 à 20:33
Ton fichier ressources doit ressembler à peu près à ceci :

WeekDay0           WAVE       "Dimanche.Wav"
WeekDay1           WAVE       "Lundi.Wav"
WeekDay2           WAVE       "Mardi.Wav"
WeekDay3           WAVE       "Mercredi.Wav"
WeekDay4           WAVE       "Jeudi.Wav"
WeekDay5           WAVE       "Vendredi.Wav"
WeekDay6           WAVE       "Samedi.Wav"

Day1                    WAVE       "1.Wav"
.........
Day31                  WAVE        "31.Wav"

Month1                WAVE        "Janvier.Wav"
.........
Month12              WAVE        "Decembre.Wav"

Uses MMSystem;
<gras>procedure PlayWave</gras>(
ResName : String
);
<gras>Var </gras>p       : Pointer;
    h       : THandle;
<gras>begin</gras>
  ResName := 'Tada';
  Try
    H : = LoadResource(hInstance, FindResource(hInstance, PChar(ResName), 'WAVE'));
    P := LockResource(H);
    playSound(p, 0, SND_ASYNC Or SND_MEMORY);
  <gras>Finally</gras>
    UnLockResource(H);
  <gras>End</gras>;
end;

et avec le code précedant (voir mon premier message) tu récupère les noms des ressources
que tu dois charger et il ne reste qu'a faire:

PlayWave(JourSemaine);

PlayWave(Jour);

PlayWave(Mois);

 
@+
Cirec

<hr size ="2" />
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
21 janv. 2007 à 20:35
ResName := 'Tada';
est a supprimer dans la Procedure PlayWave














 






@+
Cirec





<hr size="2" />
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
22 janv. 2007 à 09:45
Bonjour,

Grande difficulté pour accéder au site et des anomalies sur le format de page !

@ Cirec, merci pour l'aide, mais que veut dire ton dernier message.

Mon fichier *.res étant créé et conforme, je n'ai pas de résultat
concluant sauf si j'utilise en direct avec la formule traditionnelle ;

Ex : PlaySound(PChar('Day22'), HInstance, SND_ASYNC or SND_RESOURCE);

Pas moyen de l'inclure dans le code.

@+,

Cincap

P.S. La Vcl Skins te plait toujours autant ! 

[url]mailto:/url
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
22 janv. 2007 à 13:04
j'ai même pas fait attention qu'il avait supprimé ma ligne

ResName := 'Tada';


















est a supprimer dans la Procedure PlayWave





















 






@+
Cirec





<hr size ="2" />
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
22 janv. 2007 à 18:08
Bonsoir,

Apparement, le site à un sérieux problème de mise en page, je n'avais pas vu tes réponses alors que le nombre était passé à 11.

@ Cirec, astucieux la procédure playwave, très fort !

J'ai compris le pourquoi du problème, en fait pour dire lundi 22 janvier, il faut 3 messages vocaux prononcés à la suite du 1er.

Donc forcément, j'ai utilisé 2 timers (pas très conventionnel j'en convient mais cela fonctionne) en attendant comment jouer 3 wav à la suite.

[url]mailto:/url
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
22 janv. 2007 à 18:24
Voici la solution:

procedure PlayWave(ResName : String);
Var p       : Pointer;
    h       : THandle;
begin
  Try
    H := LoadResource(hInstance, FindResource(hInstance, PChar(ResName), 'WAVE'));
    P := LockResource(H);
    playSound(p, 0, SND_SYNC Or SND_MEMORY);
  Finally
    UnLockResource(H);
  End;
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
  PlayWave('jour1');
  PlayWave('Jour2');
  PlayWave('Jour3');
end;

Cette fois les trois Waves sont joués l'un après l'autre
 
@+
Cirec

<hr size ="2" />
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
22 janv. 2007 à 19:36
Bonsoir,

Très fort je n'y avait même pas pensé.

Toutefois l'énoncé est plus rapide qu'avec les 2 timers, il faut que je teste tous les mois et jours.

Encore merci pour tes conseils judicieux.

@+,

Cincap

Ps, j'ai IE7 et maintenant pour rentrer mon login sur ce site , je dois utiliser le scrolbarre !

[url]mailto:/url
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
23 janv. 2007 à 11:27
Bonjour,

La mise en page n'est pas correcte que sur ce post !!!!!!!!!!!!!

Cirec, la même méthode (TSystemTime) peut elle s'appliquer pour l'heure ?

et de ce fait enoncer 2 messages (h et m).

Au fait, TSystemTime m'était inconnu.

Merci.

@+,

Cincap

[url]mailto:/url
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
23 janv. 2007 à 18:19
oui c'est pas un problème

TSystemTime est prévu pour la Date et l'Heure

en complément à la première procedure :

Var SysTime : TSystemTime;
    Heure, Minute : String;
...
  Heure := IntToStr(SysTime.wHour) ;
  Minute := IntToStr(SysTime.wMinute);

ps : si tu cliques sur TSystemTime et tu presses F1 tu obtiens toutes les variables contenues dans TSystemTime
où dans l'EDI tu écris : SysTime, tu y ajoutes un point (SysTime.) et tu attends (de 0,5 à 1,5 secondes) et un popup s'ouvre avec toutes les possibilitées
le délai se règle dans les Options d'environnement --> onglet --> Fonctionnalités automatiques
 
@+
Cirec

<hr size ="2" />
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
23 janv. 2007 à 19:06
Bonsoir,

@ Cirec, grand merci pour ces infos, je vais certainement alléger mon code avec ces nouvelles astuces.

Merci aussi d'être à l'écoute des autres.

@+,

Cincap

[url]mailto:/url
0
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
24 janv. 2007 à 12:33
Bonjour,

@ Cirec, désolé de revenir la dessus, mais j'ai fait comme la procédure pour le calendar mais, cela ne fonctionne pas.

Voici mon code, à l'occasion si tu pouvais voir une anomalie.

Mon fichier ressource =

wh0 WAVE 0H.WAV
wh1 WAVE 1H.WAV
wh2 WAVE 2H.WAV

wm30 WAVE 30MINUTES.WAV // toutes les demi-heure.

var
  Form1: TForm1;



  var 
  heure, minute :String;



  SysTime : TSystemTime;



implementation



uses
mmSystem;



{$R *.dfm}
{$R SONSCLOCK_2.res}



Const



      wheureBase  = 'wh';
      wminuteBase   = 'wm';



procedure PlayWave(ResName : String);
Var
p       : Pointer;
h       : THandle;

begin

Try    H := LoadResource(hInstance, FindResource(hInstance, PChar(ResName), 'WAVE'));
P := LockResource(H);
playSound(p, 0, SND_SYNC Or SND_MEMORY);
Finally
UnLockResource(H);
End;
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
  ZeroMemory(@SysTime, SizeOf(SysTime));
  GetsystemTime(SysTime);  
 
  if lt.caption = (FormatDateTime('hh:nn:ss',now)) then begin



  Heure := wheureBase + IntToStr(SysTime.wHour) ;
  Minute := wminuteBase + IntToStr(SysTime.wMinute);

  PlayWave(heure);
  PlayWave(minute);
end;
end;



procedure TForm1.Timer1Timer(Sender: TObject); //Interval 1000
begin
lt.caption := (FormatDateTime('hh:nn:ss',now)); //Le label soit visible ou invisible
end;

@+,

Cincap

[url]mailto:/url
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
24 janv. 2007 à 15:10
je crois savoir pourquoi !
a la place de :
  GetsystemTime(SysTime);
tu mets :   (Comme le proposait Japee )
  DateTimeToSystemTime(Now, SysTime);

il y a un décalage d'une heure entre les deux résultats ...
la deuxième solution donne l'heure exacte
 
@+
Cirec

<hr size="2" />
0
Rejoignez-nous