begin process at 2010 02 10 13:58:24
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Composants

 > MATH FOR DELPHI ET MATH IN DELPHI: UNE BIBLIOTHÈQUE, UN ÉDITEUR ET UN ANALYSEUR SYNTAXIQUE D'EXPRESSIONS MATHÉMATIQUES INTÉGRÉ À DELPHI

MATH FOR DELPHI ET MATH IN DELPHI: UNE BIBLIOTHÈQUE, UN ÉDITEUR ET UN ANALYSEUR SYNTAXIQUE D'EXPRESSIONS MATHÉMATIQUES INTÉGRÉ À DELPHI


 Information sur la source

Note :
10 / 10 - par 3 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Composants Classé sous :math, compilation, grammaire, ide, calculatrice Niveau :Initié Date de création :24/05/2006 Date de mise à jour :02/08/2006 16:41:50 Vu / téléchargé :5 518 / 1 917

Auteur : Forman

Ecrire un message privé
Commentaire sur cette source (21)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Le zip que j'ai posté est en fait un .rar renommé, car la compression zip n'était pas suffisante pour que le site accepte mon code (qui est très gros avec la définition de la grammaire formelle générée automatiquement, et les fichiers d'aide).

Avant toute chose, merci de jeter un coup d'oeil à la documentation des packages (/Help/HelpIndex.html dans le zip)

Ce code contient 4 packages:

-SyntaxHighlight_D7 (/SyntaxHighlight/Lib/): un ensemble de composants pour faire des éditeurs de code avec reconnaissance et mise en valeur de la syntaxe automatique. Il contient un éditeur de texte avancé qui ressemble beaucoup à l'éditeur de Delphi, TSyntaxHighlightMemo, entièrement écrit à la main (c'est à dire qui descend directement de TWinControl), ainsi qu'une classe de mise en valeur de la syntaxe, TSyntaxHighlighter qui permet de définir la syntaxe de nouveaux langages.
Ce package devrait être compatible avec les versions antérieures de Delphi (merci de me dire si ce n'est pas le cas)

-Math_D7 (/Math/Lib/): un ensemble de composants pour manipuler, éditer et afficher des expressions mathématiques. Je pense que la capture est assez parlante.

-MathIDEIntegration_D7 (/Math/Lib/): Personnalisez Delphi! Ce package permet d'ajoutter une calculatrice scientifique dans Delphi, qui se comporte comme les autres fenêtres de Delphi pour le drag & drop (par exemple l'inspecteur d'objet). De plus, de nouveaux éditeurs de propriété sont ajouttés, qui permettent d'entrer directement une expression mathématique plutôt qu'une valeur!

Par exemple, si vous voulez mettre la largeur d'une fiche à 1256/3 pas besoin de lancer la calculatrice de Windows pour calculer le résultat, il suffit de cliquer sur le nouveau boutton dans la propriété "width" de l'inspecteur d'objet, et un éditeur de formule apparait dans une fenêtre pop-up     ;-O

Notez que ce package ne devrait pas fonctionner pour les versions de Delphi autres que la 7. Il nécessite d'installer le package OTAExpress_D7 avant.

-OTAExpress_D7 (/OTAExpress/Lib/): Un package pour personnaliser Delphi à travers l'utilisation de ToolsAPI. Je le posterai de nouveau avec d'autres exemples si j'ai le temps un jour, ainsi qu'un fichier d'aide. Il est utilisé par MathIDEIntegration_D7, et doit être installé avant.



Le zip contient aussi 2 programmes d'exemple (/Math/Example1/Project1.dpr) et (/Math/Example2/Project2.dpr) qui nécessitent tous 2 d'avoir installés les 2 premiers packages de la liste.

Source

  • Pour une fois, j'ai mis une documentation COMPLETE de mes librairies, elle se trouve dans le fichier /Help/HelpIndex.html. Jetez-y un coup d'oeil!
  • Elle contient aussi un moteur de recherche en JavaScript pour rechercher des noms de procedures, variables, classes etc...
  • Si ça intéresse quelqu'un, je pourrai faire un tutorial sur comment générer des fichiers d'aide de cette façon-là.
Pour une fois, j'ai mis une documentation COMPLETE de mes librairies, elle se trouve dans le fichier /Help/HelpIndex.html. Jetez-y un coup d'oeil!

Elle contient aussi un moteur de recherche en JavaScript pour rechercher des noms de procedures, variables, classes etc...

Si ça intéresse quelqu'un, je pourrai faire un tutorial sur comment générer des fichiers d'aide de cette façon-là.

 Conclusion

Les packages sont dans la catégorie Expert, les programmes de démonstration dans la catégorie Débutant, donc ce code dans "Initié".

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

24 mai 2006 15:50:45 :
Capture trop grosse...
24 mai 2006 15:55:12 :
Correction
25 mai 2006 01:36:01 :
Petit bug de l'aide corrigé
25 mai 2006 01:36:17 :
Petit bug de l'aide corrigé
25 mai 2006 01:36:35 :
Petit bug de l'aide corrigé
02 août 2006 16:41:50 :
Réduction de la taille des images de l'aide

 Sources du même auteur

Source avec Zip TRADUCTION DE DOKAN EN DELPHI: UN DRIVER "USER-MODE" POUR DI...
Source avec Zip Source avec une capture TASK MANAGER EN MODE TEXTE (ÉMULATION MODE 03H)
Source avec Zip Source avec une capture CHRONOMÈTRE POUR LE THÉ
Source avec Zip UTILITAIRE POUR LANCER UN PROGRAMME DEPUIS UN AUTRE COMPTE (...
Source avec Zip Source avec une capture DÉMONSTRATION DE LA GESTION DES OBJETS EN MÉMOIRE PAR DELPHI...

 Sources de la même categorie

Source avec Zip Source avec une capture TQGRID UN STRINGGRID AMÉLIORER. par yanb
Source avec Zip DYNAMIC LIBRARY LOADER CLASS: GAGNEZ DU TEMPS POUR CHARGER L... par f0xi
Source avec Zip Source avec une capture COMPOSANTS NDSOFT par diglas
Source avec Zip Source avec une capture GESTION DES "CRASHS D'APPLICATION" par Bacterius
Source avec Zip COMPOSANT TTHRESCOLLECTION par ThWilliam

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture DJIKSTRA EN MODE GRAPHIQUE par offlake
Source avec Zip RECEVOIR ET EMETTRE DES MESSAGE AVEC D'AUTRES APPLICATIONS par kevin2002
Source avec Zip Source avec une capture MA PETITE COMBINE par cantador
Source avec Zip Source avec une capture CALCULATRICE DE CHAINES MATHÉMATIQUES par Oniria
Source avec Zip RÉSOUDRE L'ÉQUATION DIF (X')^2 = 4.X^3 - G2.X - G3 par yvessimon

Commentaires et avis

Commentaire de JnBiz le 24/05/2006 17:05:23

Ca m'a l'air cool tout ca.
C'est dommage, je viens d'effacer D7 pour passer à BDS 2006, mais bon, j'imagine qu'on doit quand même pouvoir l'installer sur les versions >D7.

Quand tu parles de génération automatique de code, de quoi s'agit il ?

Commentaire de Forman le 24/05/2006 17:56:36

Je ne sais pas du tout si c'est compatible pour les versions>7.

Pour la génération de code, jette un coup d'oeil aux fichiers:
>Math.Lexer
>Math.Parser
>MathParser.ppas

et finallement
>MathParser.pas

Les 3 premiers servent à générer le 4ème, en utilisant un autre outil que j'ai programmé et qui s'intègre à Delphi: COW. L'idée est de définir une grammaire formelle (c'est à dire un ensemble de lois), et de faire générer par COW le code Delphi qui implémente une classe pour parser des chaînes de caractères selon cette grammaire, et contstruire l'arbre syntaxique associé.

Il existe d'autres outils du même type pour d'autres langages, par exemple Yacc ou Bison.

Du coup, le code obtenu est très optimisé et très rapide (même s'il est parfois très long, par exemple, le code-source généré pour ma grammaire mathématique fait plus de 5000 lignes!). C'est d'ailleurs un exemple de code-source qui une fois compilé occupe beaucoup moins de place qu'avant...

COW génère à partir de la grammaire (Math.lexer et Math.parser) la table des transitions d'un automate à pile déterministe, et l'écrit comme spécifié par les directives de pré-compilation (MathParser.ppas) dans un "vrai" fichier Pascal (MathParser.pas).

Je posterai COW ainsi que ses sources prochainement sur le site...

Commentaire de f0xi le 28/05/2006 20:27:19 administrateur CS

mmm enorme boulot ....
j'en ai pas l'utilitée mais ça me semble vraiment pas mal et surtout complet.

je jette un oeuil au code ... ç'est trés interressant.

Commentaire de Forman le 28/05/2006 21:28:56

Cool des commentaires!
Je me demandais si personne n'allait le voir!

J'attends de tes nouvelles fOxi     ;-)

Commentaire de JnBiz le 29/05/2006 20:55:23

Je confirme c'est assez énorme comme boulot, tu as du y passer du temps.

Si tu as si peu de commentaires c'est peut-être parce que beaucoup n'ont pas réussi à l'installer (Moi j'y arrive toujours pas).

En tout cas ca m'interesse cette source.
Serait-il possible que tu la rende compatible avec d'autres versions ?
a+

Commentaire de Forman le 29/05/2006 22:23:46

JnBiz: Effectivement, j'y ai passé du temps (ça fait 6 mois que j'ai commencé, mais je n'y ai pas touché pendant un long moment entre temps). Ce qui m'a pris le plus de temps c'est COW (le plugin Delphi pour faire des grammaires formelles) et l'éditeur de code.

Tu pourrais me décrire les messages d'erreur que tu as eu? A priori les 2 premiers packages doivent être compatibles avec les autres versions de Delphi. Seule la calculatrice et OTAExpress ne le sont pas pour l'instant (du moins en théorie, je n'ai pas d'autre version de Delph installée)...

Commentaire de JnBiz le 30/05/2006 20:13:26

J'ai réussi à installer les 2 premiers packages, mais lors de l'installation de OTAexpress, j'obtiens ceci:
[Pascal Hint] OTAKeyBoard.pas(45): H2365 Override method TOTACustomKeyBoard.DoUnRegister should match case of ancestor TNotifierComponent.DoUnregister
[Pascal Error] OTABufferOptions.pas(79): E2003 Undeclared identifier: 'GetHighlightCurrentLine'
[Pascal Error] OTABufferOptions.pas(79): E2003 Undeclared identifier: 'GetShowLineBreaks'
[Pascal Error] OTABufferOptions.pas(79): E2003 Undeclared identifier: 'SetHighlightCurrentLine'
[Pascal Error] OTABufferOptions.pas(79): E2003 Undeclared identifier: 'SetShowLineBreaks'
[Pascal Fatal Error] OTAExpress_D7.dpk(48): F2063 Could not compile used unit 'OTABufferOptions.pas'

Commentaire de Forman le 30/05/2006 20:52:06

>JnBiz: je vais faire une version "light" de OTAExpress, je la poste bientôt et elle devrait s'installer pour Delphi 5,6 et 7 (mais avant je ne sais pas).

Après, le seul composant qui pourrait encore poser problème est TIDEDockingForm (c'est un composant interne de Delphi qui a pu changer au cours de l'évolution de Delphi, dont la fenêtre de la calculatrice hérite).

Ceci dit, si tu as réussi à installer les 2 premiers packages, tu peux utiliser les composants pour faire des maths, et compiler les 2 programmes d'exemple. Les packages OTAExpress et MathIDEIntegration contiennent seulement des plugins/améliorations pour Delphi.

Commentaire de yvessimon le 02/08/2006 13:44:03

Bonjour,

Après plusieurs essais d'extraction je n'arrive a avoir le programme même en modifiant zip par rar.

Quelle méthode utiliser ou sur quel système ?

Salutations

Commentaire de Forman le 02/08/2006 16:43:55

J'ai uploadé un nouveau fichier zip, cette fois-ci c'est un vrai .zip (j'ai dû modifier la qualité des images pour que ça ne dépasse pas la limite des 1MO pour le site). Tu devrais pouvoir ouvrir celui-ci sans problème, mais la qualité des captures est assez mauvaise...  :-(

Commentaire de yvessimon le 03/08/2006 08:47:12

Merci

L'extraction se fait normalement

Salutations

Commentaire de tybman le 31/10/2006 11:55:27

Bonjour,
Je trouve ce code incroyable, le top, rien à dire.
Juste une question sur le parser est il possible de gérer une fonction de plusieurs variables ?(l'évaluer)

Commentaire de Forman le 31/10/2006 14:51:59

Bien sûr c'est possible. Le composant TMathNameSpace sert à cela: il suffit de rajoutter une TMathFunc dans sa propriété Funcs (qui est un descendant de TCollection).

Un TMathFunc a une propriété Name: le nom de la fonction et 5 événements:
-procedure OnCalcValue(Sender: TObject; const Params: array of TVariantProcObject; var Value: Variant);
cet événement est utilisé pour calculer la valeur retournée par la fonction. Par exemple si on veut faire une fonction Sum(x,y) qui renvoie le résultat de la somme de x et y il suffit de faire:
  Value:=Params[0].Execute+Params[1].Execute;

-procedure OnCheckParams(Sender: TObject; Params: array of TVariantProcObject; AdditionalVars: TStrings);
cet événement est utilisé pendant la compilation d'une expression pour vérifier que le nombre et la nature des paramètres passés à la fonction sont valides. Il suffit de déclencher une exception  (si possible avec un message explicite) dans le cas contraire, et le message sera affiché dans le TCompileErrorManager comme une erreur de compilation. Par défaut la propriété ParamCount sert à définir un nombre de paramètres fixes pour les fonctions qui ont toujours le même nombre de paramètres, et dans ce cas-là il n'est pas nécessaire de vérifier le nombre des paramètres, le système s'en charge tout seul.
Par exemple la fonction Cos:
ParamCount=1, pas besoin de définir OnCheckParams
Autre exemple la fonction Max(x1,x2,...,xn) avec un nombre de paramètres variable:
ParamCount=0, il suffit juste de vérifier dans OnCheckParams que High(Params)>-1 (c'est à dire que la fonction est appelée avec au moins un paramètre)

Le paramètre AdditionalVars est utilisé pour les variables formelles. Par exemple:
Sum(i,1,10,i^2) qui calcule la somme pour i variant de 1 à 10 de i²: on vérifie d'abord que le premier paramètre de la fonction Sum est une variable, et on l'ajoutte à AdditionalVars en tant que variable à portée locale à l'intérieur de l'appel de la fonction.


-procedure OnCustomCreateBox(Sender: TObject; Display: TMathDisplay; Params: array of TVariantProcObject; var Box: TBox);
Utilisé pour définir un affichage personalisé de la fonction dans les formules mathématiques. Si cet événement n'est pas défini, la fonction est simplement notée f(...)
Par exemple la fonction Sum a un affichage personalisé (avec le symbole sigma).

-procedure OnForceSupPriority(Sender: TObject; SupObject: TVariantProcObject; Params: array of TVariantProcObject; var Force: Boolean);
Utilisé pour définir des priorités opératoires pour l'attribution de parenthèses. Par défaut, aucune parenthèse n'est ajouttée autour de l'appel de fonction, mais certaines fonctions personalisées (comme Sum) en ont besoin.

-procedure OnJump(Sender: TObject);
Cet événement est appelé lorsque l'utilisateur a cliqué sur le nom de la fonction dans l'éditeur. Cela sert à afficher un fichier d'aide par exemple.

Commentaire de tybman le 31/10/2006 16:57:35

J'ai plus ou moins compris supposons que je veuille calculer dans un MathCalculatorHistory à partir d'un syntaxHighlightMemo
Exp(x)*y+1

Je fais comment???

Commentaire de tybman le 31/10/2006 18:09:38

Peux tu réaliser un exemple de "parsage" pour fonction de deux variable si c'est pas trop te demander
Merci de ta réponse

Commentaire de Forman le 01/11/2006 16:58:07

D'accord je vois ce que tu veux dire, je croyais que tu me demandais comment définir de nouvelles fonctions à plusieurs variables.

Pour ajoutter des variables supplémentaires, c'est pareil (tu peux regarder l'exemple du zip qui trace une courbe, j'utilise ce principe-là). Il faut utiliser la propriété Vars d'un TMathNameSpace (qui est aussi un descendant de TCollection) et ajoutter des TMathVar dedans (là encore, tu peux faire ça pendant le design dans l'inspecteur d'objet, ou pendant l'exécution). Par exemple tu peux ajoutter 2 TMathVar dans la liste qui s'appelent x et y. Ensuite, lorsque tu compiles une expression mathématique, avant d'exécuter le résultat, tu peux changer la valeur de x et y comme ceci:

MathNameSpace.Vars[0].Value:=2; { là x vaut 2 }
MathNameSpace.Vars[1].Value:=-1.5; { là y vaut -1.5 }

c'est le même principe que j'utilise pour tracer la courbe (sauf que je ne modifie qu'une seule variable). Lorsque tu as une formule compilée (de type TVariantProcObject) obtenue avec un TMathCompiler par exemple, cet objet a une méthode Execute qui retourne un Variant (la valeur de l'expression) et si tu modifies x et y avant de l'appeler, tu peux ainsi avoir une fonction qui dépend de ces 2 variables.

Commentaire de pascal555 le 18/12/2007 23:43:54

Formidable travail sincérement !
Mais je n'arrive pas à trouver la fonction simple qui permet d'envoyer les opérations en récupérant le résultat.
exemple : result=CALCUL(5+1);
Si tu peux m'aider, tu serais génial.
Mais tu l'ai déjà.

Commentaire de zm le 23/12/2007 17:46:34

merçi Forman
J'ai réussi à installer les packages delphi 7 et BDS 2006
et j'ai tester les exemples avec D7 et BDS 2006 ,las compitiont et l'execution c'est dérouler sant problémes

Commentaire de Forman le 26/12/2007 23:24:44

@Pascal555: désolé j'ai manqué ta question. Je n'ai pas écrit les composants pour faire directement ce que tu dis: en effet, pourquoi passer par l'évaluation d'une chaine de caractères alors qu'il suffit de taper directement la formule dans le code? L'idée était de laisser l'utilisateur entrer lui-même la formule (en particulier pour avoir accès aux erreurs de syntaxe dans le source). Ainsi il suffit d'avoir disposé (sur une fiche par exemple) un TMathFormula (muni éventuellement d'un TMathNameSpace) et lorsque l'utilisateur clique dessus la formule est changée (avec ce qu'il a tapé, et la garantie que la formule est syntaxiquement valide). Ensuite, il suffit d'appeler la méthode Execute du TMathFormula pour avoir le résultat (sous forme d'un variant).

Il est quand même possible de parser et exécuter une chaine de caractères contenant une formule ainsi:

function EvalString(s:string):Variant; {À la place de Variant on peut mettre Integer ou Double par exemple}
var
  m:TMathExecuter;
  f:TVariantProcObject;
begin
  GCurrentNameSpace:=MathNameSpace1; {Pas obligatoire, un TMathNameSpace est utilisé ici pour pouvoir utiliser éventuellement les fonctions usuelles et des variables/fonctions supplémentaires. Sinon, faire GCurrentNameSpace:=nil;}
  try
    try
      m:=TMathExecuter.Create(s); {Ici la chaine de caractères de l'expression mathématique est utilisée}
      f:=m.Execute(nil);
      try
        Result:=f.Execute;
      finally
        f.Destroy;
      end;
    finally
      m.Destroy;
    end;
  finally
    GCurrentNameSpace:=nil;
  end;
end;

L'objet f qui est utilisé dans cette fonction est une formule compilée. Puisqu'on ne l'utilise qu'une fois, on le détruit aussitôt après, mais il est possible de le garder en mémoire et de l'utiliser plusieurs fois: ainsi on pourrait mettre comme chaine de caractère une fonction qui dépend d'une variable (exemple: 'cos(x)+x^3+2*x^2+5') à condition d'avoir défini la variable x dans le TMathNameSpace utilisé, dans ce cas il suffira d'attribuer une valeur à x (dans le TMathNameSpace) et losqu'on fera f.Execute, la valeur de x sera automatiquement substituée.

Commentaire de Forman le 26/12/2007 23:40:34

Un exemple de fonction qui crée une fonction mathématique à partir d'un chaine (peut-être qu'il y a des erreurs de syntaxe, j'écris de mémoire et je n'ai pas testé).

function CreateFunction(s:string;NameSpace:TMathNameSpace=nil):TVariantProcObject;
var
  m:TMathExecuter;
begin
  GCurrentNameSpace:=NameSpace;
  try
    try
      m:=TMathExecuter.Create(s); {Ici la chaine de caractères de l'expression mathématique est utilisée}
      Result:=m.Execute(nil);
    finally
      m.Destroy;
    end;
  finally
    GCurrentNameSpace:=nil;
  end;
end;

Exemple d'utilisation:

var
  f:TVariantProcObject;
  NS:TMathNameSpace;
  VarX,VarY,VarZ:TMathVar;
begin
  NS:=TMathNameSpace.Create(nil); {On crée un TMathNameSpace}
  VarX:=NS.Vars.Add; {On définit 3 variables supplémentaires dans le TMathNameSpace}
  VarY:=NS.Vars.Add;
  VarZ:=NS.Vars.Add;
  VarX.Name:='x'; {On définit le nom des 3 variables}
  VarY.Name:='y';
  VarZ.Name:='z';
  f:=CreateFunction('x*y+z^2',NS); {On compile une expression mathématique qui utilise les variables du namespace}
  VarX.Value:=1; {On attribue des valeurs aux 3 variables}
  VarY.Value:=2;
  VarZ.Value:=3;
  ShowMessage(IntToStr(f.Execute)); {Affiche la valeur de 1*2+3^2 c'est à dire 11}
  VarX.Value:=0; {On attribue 3 autres valeurs aux variables}
  VarY.Value:=10;
  VarZ.Value:=100;
  ShowMessage(f.Execute); {Affiche la valeur de 0*10+10^2 c'est à dire 100}
  f.Destroy; {On détruit la formule compilée}
  NS.Destroy; {On détruit le TMathNameSpace}
end;

Commentaire de pascal555 le 27/12/2007 10:36:38

Grand merci à toi FORMAN
J'inclue les fonctions ci-dessus en supplément des composants de base.
Merci encore de ton aide.
Bon développement pour l'année qui vient.
Pascal

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

gros problème de compilation [ par Latchee ] Voila C tout simple, delphi ne veut plus compiler nimporte quelle source ke je lui fait ouvrir, le bouton "run" est grisé.Et malgré moultes bidouillag Simulation, graph, math... [ par ryadus ] Salut, je voudrais savoir si quelqu'un connais quelques chose sur la simulation, comment dessiner la courbe d'une fonction, sur l'optimisation, les fi Compilation pour installer un composant [ par LaMouche39 ] Bonjour à vous,Voilà mon pb:J'ai récupéré quelques composants.Pour les installer je passe par installer composants, je choisis le .pas à installer.Ave Comment changer les messages de l'IDE de l'allemand en français ? [ par jackg ] Bonjour,J'ai installé récemment la version Personnel Delphi 6 téléchargé sur le site de Borland.Lorsqu'il y a une erreur de programmation la fenêtre d compilation et Rave Report [ par airhik7 ] Bonjour ami Delphiste, je viens de commencer a me servir de Rave Report. Et j'ai un petit probleme.Comment executer un Report depuis mon programme Del Erreur de compilation d'un package... [ par drindor ] J'ai l'erreur suivante à la compilation d'un de mes packages :[Erreur] Le paquet jamais compilé 'MyMeeting' nécessite le paquet toujours compilé 'RxCt Exe sans compilation? [ par somewhere ] le but serait de creer un manuel sous une forme de format de fichier quelconque ( html par exemple ) puis de le transformer en executable par l'utilis message d'erreur [ par developpeur_mehdi ] voila j'utilise dans mon application plusieurs form avec de multiple manipulation de bases de donnée dans chacun de ces formseulement au fil du devell Calculatrice de base en Console ( dos ) [ par Delphiboy ] bonjour!Je suis nouveau en delphi et jaimerais savoir comment crée une calculatrice en mode application console (dos) avec la structure CASE OFJ ai es


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,045 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales