{"id":8186,"date":"2019-05-12T18:08:17","date_gmt":"2019-05-12T16:08:17","guid":{"rendered":"https:\/\/www.auditsi.eu\/?p=8186"},"modified":"2019-05-12T18:14:00","modified_gmt":"2019-05-12T16:14:00","slug":"programmer-en-langage-pascal-avec-ledi-lazarus","status":"publish","type":"post","link":"https:\/\/www.auditsi.eu\/?p=8186","title":{"rendered":"Programmer en langage Pascal avec l&#8217;EDI LAZARUS"},"content":{"rendered":"<p style=\"text-align: justify;\">Qui n&#8217;a pas d\u00e9j\u00e0 r\u00eav\u00e9 de cr\u00e9er ses propres programmes ? Quel que soit leur degr\u00e9 de complexit\u00e9, la programmation aide \u00e0 r\u00e9soudre toute sorte de probl\u00e8mes ; de simple calculs \u00e0 l&#8217;automatisation de t\u00e2ches sophistiqu\u00e9es. Diff\u00e9rentes solutions de programmation sont disponibles suivant la nature du projet envisag\u00e9. Du langage bureautique <a href=\"https:\/\/www.auditsi.eu\/?cat=1569\">VBA<\/a> aux langages plus g\u00e9n\u00e9raux comme <a href=\"https:\/\/www.auditsi.eu\/?cat=1207\">Basic<\/a>, Pascal&#8230; Concernant le langage Pascal plusieurs environnements de d\u00e9veloppement coexistent comme <a href=\"https:\/\/www.auditsi.eu\/?tag=delphi\">Delphi<\/a>, une solution payante, et <a href=\"https:\/\/www.auditsi.eu\/?tag=LAZARUS\">LAZARUS<\/a>, une solution gratuite. C&#8217;est cette derni\u00e8re qui sera abord\u00e9e dans le cadre de cet article.<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8187\" rel=\"attachment wp-att-8187\"><img loading=\"lazy\" decoding=\"async\" width=\"645\" height=\"430\" class=\"aligncenter size-full wp-image-8187\" alt=\"Accueil LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Accueil-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Accueil-LAZARUS.png 645w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Accueil-LAZARUS-300x200.png 300w\" sizes=\"auto, (max-width: 645px) 100vw, 645px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">LAZARUS, \u00e0 l&#8217;image de Delphi, est un Environnement de D\u00e9veloppement Int\u00e9gr\u00e9 (<a href=\"https:\/\/www.auditsi.eu\/?tag=edi\">EDI<\/a>) comportant un langage Pascal (bas\u00e9 sur le standard Free Pascal), un \u00e9diteur de code source et un compilateur. LAZARUS est disponible sur plusieurs plateforme (Windows 32 et 64 bits, Linux, Mac OS) et produit des logiciels sur ces <span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">syst\u00e8mes ainsi que sur Android.<\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">Par rapport \u00e0 d\u2019autres EDI, LAZARUS pr\u00e9sente de nombreux avantages :<\/span><\/p>\n<ul>\n<li>\n<div><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">Il s\u2019agit d\u2019un logiciel t\u00e9l\u00e9chargeable gratuitement, utilisable sans limite de temps ou de fonctionnalit\u00e9s,<\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">L\u2019EDI est enti\u00e8rement traduit en Fran\u00e7ais, sa prise en main est rapide m\u00eame pour un d\u00e9butant,<\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">Il est possible de programmer sans manier les biblioth\u00e8ques additionnelles,<\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">Le compilateur produit des fichiers ex\u00e9cutables (*.exe) distribuables librement,<\/span><\/div>\n<\/li>\n<li>\n<div><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">Ce langage est multiplateforme ; le programmeur pourra porter ses \u0153uvres indiff\u00e9remment vers Windows, Linux, Mac Os ou encore Android, quelle que soit la plateforme de d\u00e9veloppement d\u2019origine.<\/span><\/div>\n<\/li>\n<\/ul>\n<p><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\"><strong><em>Installation de l\u2019EDI LAZARUS :<\/em><\/strong><\/span><\/p>\n<p style=\"text-align: justify;\"><span style=\"font-family: georgia,palatino,serif; font-size: 12pt;\">Le site de l&#8217;\u00e9diteur (<a href=\"https:\/\/www.lazarus-ide.org\/index.php?page=downloads\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/www.lazarus-ide.org\/index.php?page=downloads<\/a>) fournit toutes les informations utiles pour installer l&#8217;EDI.<\/span><\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8189\" rel=\"attachment wp-att-8189\"><img loading=\"lazy\" decoding=\"async\" width=\"926\" height=\"764\" class=\"aligncenter size-full wp-image-8189\" alt=\"Page de t\u00e9l\u00e9chargement LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/T\u00e9l\u00e9chargement-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/T\u00e9l\u00e9chargement-LAZARUS.png 926w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/T\u00e9l\u00e9chargement-LAZARUS-300x248.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/T\u00e9l\u00e9chargement-LAZARUS-768x634.png 768w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/T\u00e9l\u00e9chargement-LAZARUS-730x602.png 730w\" sizes=\"auto, (max-width: 926px) 100vw, 926px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">La page de t\u00e9l\u00e9chargement est en anglais mais l&#8217;interface du logiciel est enti\u00e8rement traduite en fran\u00e7ais.<\/p>\n<p style=\"text-align: justify;\">L\u2019installation est enti\u00e8rement automatis\u00e9e, il suffit de valider les diff\u00e9rentes fen\u00eatres de l\u2019installateur.<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8190\" rel=\"attachment wp-att-8190\"><img loading=\"lazy\" decoding=\"async\" width=\"499\" height=\"387\" class=\"aligncenter size-full wp-image-8190\" alt=\"Fin de l'installation de LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fin-installation-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fin-installation-LAZARUS.png 499w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fin-installation-LAZARUS-300x233.png 300w\" sizes=\"auto, (max-width: 499px) 100vw, 499px\" \/><\/a><\/p>\n<p>Une fen\u00eatre vient ponctuer l&#8217;installation. Cliquer sur Terminer pour la fermer. Il ne reste plus qu&#8217;\u00e0 lancer l&#8217;EDI.<\/p>\n<p><strong><em>Pr\u00e9sentation de l\u2019environnement de d\u00e9veloppement :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">L&#8217;EDI de LAZARUS pr\u00e9sente un \u00e9diteur de source, un inspecteur d&#8217;objets et diff\u00e9rents menus permettant d&#8217;acc\u00e9der \u00e0 ses diff\u00e9rentes fonctionnalit\u00e9s :<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8191\" rel=\"attachment wp-att-8191\"><img loading=\"lazy\" decoding=\"async\" width=\"1037\" height=\"772\" class=\"aligncenter size-full wp-image-8191\" alt=\"EDI LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS.png 1037w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-300x223.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-768x572.png 768w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-1024x762.png 1024w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-730x543.png 730w\" sizes=\"auto, (max-width: 1037px) 100vw, 1037px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\"><em><strong>Documentation en ligne :<\/strong><\/em><\/p>\n<p style=\"text-align: justify;\">Pour commencer, un peu de lecture pour prendre en main l&#8217;EDI, se familiariser avec le langage Pascal et r\u00e9aliser ses premiers projets.<\/p>\n<ul>\n<li>LAZARUS : <a href=\"http:\/\/wiki.freepascal.org\/Lazarus_Documentation\/fr\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/wiki.freepascal.org\/Lazarus_Documentation\/fr<\/a><\/li>\n<li>Interagir avec une suite bureautique (automation) pour cr\u00e9er des feuilles de calcul, des documents texte, des pr\u00e9sentations, etc.. : <a href=\"http:\/\/wiki.freepascal.org\/Office_Automation\/fr\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/wiki.freepascal.org\/Office_Automation\/fr<\/a><\/li>\n<li>Programmation pour smartphones et tablettes tournant sous Android : <a href=\"http:\/\/wiki.freepascal.org\/Android_Programming\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/wiki.freepascal.org\/Android_Programming<\/a><\/li>\n<li>Cours en ligne : <a href=\"https:\/\/lazarus.developpez.com\/cours\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/lazarus.developpez.com\/cours\/<\/a><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><strong><em>Prise en main de LAZARUS :<\/em><\/strong><\/p>\n<p style=\"text-align: justify;\">Je me rends r\u00e9guli\u00e8rement sur le site <a href=\"https:\/\/www.developpez.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Developpez.com<\/a> pour parfaire ma pratique de la programmation ou r\u00e9soudre des probl\u00e8mes ponctuels. Afin de prendre en main LAZARUS, je propose au lecteur de suivre un des cours de ce site qui permet de r\u00e9aliser un jeu de Pong, un projet ludique, simple qui permet de poser les bases de la programmation sous l&#8217;environnement de d\u00e9veloppement LAZARUS : <a href=\"https:\/\/laurent-dubettier-grenier.developpez.com\/tutoriel\/lazarus\/creation-pong-lazarus\/\" target=\"_blank\" rel=\"noopener noreferrer\">https:\/\/laurent-dubettier-grenier.developpez.com\/tutoriel\/lazarus\/creation-pong-lazarus\/<\/a>. Pour la petite histoire, Pong, cr\u00e9\u00e9 en 1972, est un des <a href=\"https:\/\/www.auditsi.eu\/?page_id=2179\">premiers jeux vid\u00e9o<\/a> d\u2019arcade.<\/p>\n<p style=\"text-align: justify;\">Afin de limiter la taille des ex\u00e9cutables, il est n\u00e9cessaire de modifier les param\u00e8tres suivants dans le menu Projet \/ Options du projet&#8230; :<\/p>\n<p style=\"text-align: justify;\">Cocher la case&nbsp;:<\/p>\n<p style=\"text-align: center;\">Projet &#8211;&gt; Options du projet &#8211;&gt; Options du compilateur &#8211;&gt; Compilation and Linking &#8211;&gt; Style de l&#8217;unit\u00e9 &#8211;&gt; Lien intelligent (-CX)<\/p>\n<p style=\"text-align: justify;\">Cocher la case&nbsp;:<\/p>\n<p style=\"text-align: center;\">Projet &#8211;&gt; Options du projet &#8211;&gt; Options du compilateur &#8211;&gt; Compilation and Linking &#8211;&gt; \u00c9dition des liens &#8211;&gt; Lier intelligemment (-XX)<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8192\" rel=\"attachment wp-att-8192\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"481\" class=\"aligncenter size-full wp-image-8192\" alt=\"EDI LAZARUS Options - Compilation\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-Compilation.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-Compilation.png 725w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-Compilation-300x199.png 300w\" sizes=\"auto, (max-width: 725px) 100vw, 725px\" \/><\/a><\/p>\n<p>D\u00e9cocher toutes les cases&nbsp;:<\/p>\n<p style=\"text-align: center;\">Projet &#8211;&gt; Options du projet &#8211;&gt; Options du compilateur &#8211;&gt; D\u00e9bogage<\/p>\n<p style=\"text-align: justify;\">Sauf \u00c9liminer les symboles de l&#8217;ex\u00e9cutable (-Xs).<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8195\" rel=\"attachment wp-att-8195\"><img loading=\"lazy\" decoding=\"async\" width=\"751\" height=\"498\" class=\"aligncenter size-full wp-image-8195\" alt=\"EDI LAZARUS Options - D\u00e9bogage\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-D\u00e9bogage.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-D\u00e9bogage.png 751w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-D\u00e9bogage-300x199.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/EDI-LAZARUS-Options-D\u00e9bogage-730x484.png 730w\" sizes=\"auto, (max-width: 751px) 100vw, 751px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Cocher &#8220;D\u00e9finir comme options par d\u00e9faut du compilateur&#8221; avant valider (bouton Ok).<\/p>\n<p>La fen\u00eatre du projet juste apr\u00e8s sa cr\u00e9ation :<\/p>\n<div id=\"attachment_8196\" style=\"width: 332px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8196\" rel=\"attachment wp-att-8196\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8196\" width=\"322\" height=\"272\" class=\"size-full wp-image-8196\" alt=\"Fen\u00eatre du projet LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fen\u00eatre-du-projet-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fen\u00eatre-du-projet-LAZARUS.png 322w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fen\u00eatre-du-projet-LAZARUS-300x253.png 300w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/a><p id=\"caption-attachment-8196\" class=\"wp-caption-text\">Fen\u00eatre du projet LAZARUS<\/p><\/div>\n<p style=\"text-align: justify;\">Cette m\u00eame fen\u00eatre avec fond noir :<\/p>\n<div id=\"attachment_8197\" style=\"width: 646px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8197\" rel=\"attachment wp-att-8197\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-8197\" width=\"636\" height=\"619\" class=\"size-full wp-image-8197\" alt=\"Fond noir\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Pong-noir.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Pong-noir.png 636w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Pong-noir-300x292.png 300w\" sizes=\"auto, (max-width: 636px) 100vw, 636px\" \/><\/a><p id=\"caption-attachment-8197\" class=\"wp-caption-text\">Fond noir<\/p><\/div>\n<p style=\"text-align: justify;\">Le param\u00e9trage des \u00e9l\u00e9ments visuels du projet s&#8217;effectue \u00e0 partir de l&#8217;inspecteur d&#8217;objets. Par exemple, la couleur du fond de la fen\u00eatre se d\u00e9finit dans le champ Color (clBlack) et celle de son titre dans le champ Caption (Pong) :<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8198\" rel=\"attachment wp-att-8198\"><img loading=\"lazy\" decoding=\"async\" width=\"230\" height=\"896\" class=\"aligncenter size-full wp-image-8198\" alt=\"Inspecteur d'objets LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Inspecteur-dobjets-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Inspecteur-dobjets-LAZARUS.png 230w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Inspecteur-dobjets-LAZARUS-77x300.png 77w\" sizes=\"auto, (max-width: 230px) 100vw, 230px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Le projet Pong avec fond noir :<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8199\" rel=\"attachment wp-att-8199\"><img loading=\"lazy\" decoding=\"async\" width=\"322\" height=\"272\" class=\"aligncenter size-full wp-image-8199\" alt=\"Fond noir (fen\u00eatre projet)\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fond-noir-fen\u00eatre-projet.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fond-noir-fen\u00eatre-projet.png 322w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Fond-noir-fen\u00eatre-projet-300x253.png 300w\" sizes=\"auto, (max-width: 322px) 100vw, 322px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">L&#8217;\u00e9diteur de source affiche le code source du projet :<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8201\" rel=\"attachment wp-att-8201\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"493\" class=\"aligncenter size-full wp-image-8201\" alt=\"Editeur de source LAZARUS\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Editeur-de-source-LAZARUS.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Editeur-de-source-LAZARUS.png 776w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Editeur-de-source-LAZARUS-300x191.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Editeur-de-source-LAZARUS-768x488.png 768w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Editeur-de-source-LAZARUS-730x464.png 730w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">L&#8217;ex\u00e9cution du projet Pong finalis\u00e9 :<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?attachment_id=8202\" rel=\"attachment wp-att-8202\"><img loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"550\" class=\"aligncenter size-full wp-image-8202\" alt=\"Jeu Pong termin\u00e9\" src=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Jeu-Pong-termin\u00e9.png\" srcset=\"https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Jeu-Pong-termin\u00e9.png 733w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Jeu-Pong-termin\u00e9-300x225.png 300w, https:\/\/www.auditsi.eu\/wp-content\/uploads\/2019\/05\/Jeu-Pong-termin\u00e9-730x548.png 730w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Le code source du projet Pong :<\/p>\n<pre class=\"lang:delphi decode:true\">unit unit_pong;\r\n\r\n{$mode objfpc}{$H+}\r\n\r\ninterface\r\n\r\nuses\r\n  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls;\r\n\r\ntype\r\n\r\n  { TForm1 }\r\n\r\n  TForm1 = class(TForm)\r\n    tmrMvtBalle: TTimer;\r\n    procedure FormCreate(Sender: TObject);\r\n    procedure FormDestroy(Sender: TObject);\r\n    procedure FormKeyPress(Sender: TObject; var Key: char);\r\n    procedure FormPaint(Sender: TObject);\r\n    procedure tmrMvtBalleTimer(Sender: TObject);\r\n\r\n  private\r\n    MiHauteur: integer;\r\n    MiLargeur: integer;\r\n    PosBalleX: Integer;\r\n    PosBalleY: Integer;\r\n    Direction: Integer;\r\n    Vitesse: Integer;\r\n    PosRaqDrY: Integer;\r\n    PosRaqGaY: Integer;\r\n    ScoreGauche: integer;\r\n    ScoreDroit: integer;\r\n\r\n    SauveEcran: TBitMap;\r\n\r\n    procedure DessineBalle (const XNew, YNew: Integer);\r\n    procedure DessineRaquetteDroite (const YNew: Integer);\r\n    procedure DessineRaquetteGauche (const YNew: Integer);\r\n    procedure NouveauService;\r\n    procedure AfficheScore;\r\n    procedure AnnoncerGagnant;\r\n    procedure DessineFilet;\r\n    procedure RestaurerEcran (const VarX,VarY: integer);\r\n    procedure EnregistrerEcran (const VarX,VarY: integer);\r\n    procedure AfficherInstructions;\r\n\r\n  public\r\n\r\n\r\n  end;\r\n\r\nvar\r\n  Form1: TForm1;\r\n\r\nimplementation\r\n\r\nuses\r\n  LCLType;\r\n\r\n{$R *.lfm}\r\n\r\n{ TForm1 }\r\n\r\nconst\r\n  HauteurJeu = 600;\r\n  LargeurJeu = 800;\r\n  TailleBalle = 15;\r\n  RaqHauteur = 80;\r\n  DecalageRaquette = 30;\r\n\r\nprocedure TForm1.FormCreate(Sender: TObject);\r\nbegin\r\n  Color:= clBlack;\r\n  Height:= HauteurJeu;\r\n  Width:= LargeurJeu;\r\n  Position:= poScreenCenter;\r\n  BorderStyle:= bsNone;\r\n  PosBalleX:= 0;\r\n  PosBalleY:= 0;\r\n  Direction:= 25;\r\n  Vitesse:= 20;\r\n  PosRaqDrY:=0;\r\n  PosRaqGaY:=0;\r\n  ScoreGauche:= 0;\r\n  ScoreDroit:= 0;\r\n  SauveEcran:= TBitMap.Create;\r\n  SauveEcran.SetSize(TailleBalle, TailleBalle);\r\nend;\r\n\r\nprocedure TForm1.FormDestroy(Sender: TObject);\r\nbegin\r\n  SauveEcran.Free;\r\n\r\nend;\r\n\r\nprocedure TForm1.FormKeyPress(Sender: TObject; var Key: char);\r\nbegin\r\n  MiHauteur:= HauteurJeu div 2;\r\n  MiLargeur:= LargeurJeu div 2;\r\n  if ord(Key) = VK_ESCAPE then\r\n    Close;\r\n  If Ord(Key) = VK_SPACE then\r\n  Begin\r\n    DessineFilet;\r\n    AfficheScore;\r\n    DessineBalle(MiLargeur, MiHauteur);\r\n    tmrMvtBalle.Enabled:=True;\r\n    DessineRaquetteDroite (MiHauteur);\r\n    DessineRaquetteGauche (MiHauteur);\r\n  End;\r\n  if Key in ['m', 'M'] then\r\n    DessineRaquetteDroite(PosRaqDrY + 20);\r\n  if Key in ['k', 'K'] then\r\n    DessineRaquetteDroite(PosRaqDrY - 20);\r\n  if Key in ['f', 'F'] then\r\n    DessineRaquetteGauche(PosRaqGaY + 20);\r\n  if Key in ['s', 'S'] then\r\n    DessineRaquetteGauche(PosRaqGaY - 20);\r\nend;\r\n\r\nprocedure TForm1.FormPaint(Sender: TObject);\r\nbegin\r\n  DessineFilet;\r\n  AfficherInstructions;\r\n  DessineRaquetteDroite(MiHauteur);\r\n  DessineRaquetteGauche(MiHauteur);\r\n  OnPaint:= nil;\r\nend;\r\n\r\nprocedure TForm1.tmrMvtBalleTimer(Sender: TObject);\r\nVar\r\n  XChange: Integer;\r\n  YChange: Integer;\r\nbegin\r\n  Xchange:= trunc(cos(Pi \/ 180 * Direction) * Vitesse);\r\n  Ychange:= trunc(sin(Pi \/ 180 * Direction) * Vitesse);\r\n  DessineBalle (PosBalleX + XChange,PosBalleY + Ychange);\r\n  If (PosBalleX&lt;=0) or (PosBalleX &gt;= (LargeurJeu - TailleBalle)) then\r\n    Direction:= Direction + (90 - Direction) * 2\r\n  else if (PosBalleY&lt;=0) or(PosBalleY &gt;= (HauteurJeu - TailleBalle)) then\r\n    Direction:= Direction + (180 - Direction) *2\r\n  else if (PosBalleX + TailleBalle &gt;= LargeurJeu - DecalageRaquette - TailleBalle) and (PosBalleY &gt;= PosRaqDrY) and (PosBalleY + TailleBalle &lt;= PosRaqDrY + RaqHauteur) then\r\n    Direction:= Direction + (90 - Direction) * 2\r\n  else if (PosBalleX &lt;= DecalageRaquette + TailleBalle) and (PosBalleY &gt;= PosRaqGaY) and (PosBalleY + TailleBalle &lt;= PosRaqGaY + RaqHauteur) then\r\n    Direction:= Direction + (90 - Direction) * 2;\r\n  If (PosBalleX&lt;=0) then\r\n  begin\r\n    Inc (ScoreDroit);\r\n    NouveauService;\r\n  end\r\n  else if (PosBalleX &gt;= (LargeurJeu - TailleBalle)) then\r\n  begin\r\n    Inc (ScoreGauche);\r\n    NouveauService;\r\n  end\r\nend;\r\n\r\nprocedure TForm1.DessineBalle(const XNew, YNew: Integer);\r\nbegin\r\n  RestaurerEcran(PosBalleX, PosBalleY);\r\n  EnregistrerEcran(XNew, Ynew);\r\n  Canvas.Brush.Color:=clWhite;\r\n  Canvas.Rectangle(XNew,YNew,Xnew + TailleBalle,YNew + TailleBalle);\r\n  PosBalleX:= XNew;\r\n  PosBalleY:= YNew;\r\nend;\r\n\r\nprocedure TForm1.DessineRaquetteDroite(const YNew: Integer);\r\nconst\r\n   RaqDrXPos = LargeurJeu - DecalageRaquette - TailleBalle;\r\nbegin\r\n  if (YNew &lt;= 0) or (YNew + RaqHauteur &gt;= HauteurJeu) then\r\n    Exit;\r\n  Canvas.Brush.Color:=clBlack;\r\n  Canvas.Rectangle(RaqDrXPos, PosRaqDrY, RaqDrXPos + TailleBalle, PosRaqDrY + RaqHauteur);\r\n  Canvas.Brush.Color:=clWhite;\r\n  Canvas.Rectangle(RaqDrXPos , YNew, RaqDrXPos + TailleBalle, YNew + RaqHauteur);\r\n  PosRaqDrY:= YNew;\r\nend;\r\n\r\nprocedure TForm1.DessineRaquetteGauche(const YNew: Integer);\r\nconst\r\n  RaqGaXPos = DecalageRaquette;\r\nbegin\r\n  if (YNew &lt;= 0) or (YNew + RaqHauteur &gt;= HauteurJeu) then\r\n    Exit;\r\n   Canvas.Brush.Color:=clBlack;\r\n   Canvas.Rectangle(RaqGaXPos, PosRaqGaY, RaqGaXPos + TailleBalle, PosRaqGaY + RaqHauteur);\r\n   Canvas.Brush.Color:=clWhite;\r\n   Canvas.Rectangle( RaqGaXPos , YNew, RaqGaXPos + TailleBalle, YNew + RaqHauteur);\r\n   PosRaqGaY:= YNew;\r\nend;\r\n\r\nprocedure TForm1.NouveauService;\r\nbegin\r\n  tmrMvtBalle.Enabled:= False;\r\n  DessineFilet;\r\n  AfficheScore;\r\n  If (ScoreDroit &gt;= 10) OR (ScoreGauche &gt;= 10) then\r\n    AnnoncerGagnant\r\n  else\r\n  begin\r\n    DessineBalle (MiLargeur,MiHauteur);\r\n    DessineRaquetteDroite (MiHauteur);\r\n    DessineRaquetteGauche(MiHauteur);\r\n    sleep(500);\r\n    tmrMvtBalle.Enabled:= True;\r\n  end;\r\nend;\r\n\r\nprocedure TForm1.AfficheScore;\r\nbegin\r\n  Canvas.Font.Name:= 'Courier New';\r\n  Canvas.Font.Size:= 24;\r\n  Canvas.Font.Style:=[fsBold];\r\n  Canvas.Font.Color:= clWhite;\r\n  Canvas.Brush.Color:= clBlack;\r\n  Canvas.TextOut (MiLargeur - 50, 30, IntToStr(ScoreGauche));\r\n  Canvas.TextOut (MiLargeur + 50, 30, IntToStr(ScoreDroit));\r\nend;\r\n\r\nprocedure TForm1.AnnoncerGagnant;\r\nbegin\r\n  tmrMvtBalle.Enabled:= False;\r\n  Canvas.Font.Name:= 'Courier New';\r\n  Canvas.Font.Size:= 48;\r\n  Canvas.Font.Style:=[fsBold];\r\n  Canvas.Font.Color:= clWhite;\r\n  Canvas.Brush.Color:= clBlack;\r\n  if ScoreGauche &gt;= 10 then\r\n    Canvas.TextOut (MiLargeur - 50 - Canvas.TextWidth('Gagnant'), 100, 'Gagnant')\r\n  else\r\n    Canvas.TextOut (MiLargeur + 50, 100, 'Gagnant');\r\n  AfficherInstructions;\r\nend;\r\n\r\nprocedure TForm1.DessineFilet;\r\nvar\r\n  VarY: integer;\r\nbegin\r\n   Canvas.Brush.Color:= ClBlack;\r\n   Canvas.Rectangle (0,0,LargeurJeu,HauteurJeu);\r\n   Canvas.Pen.Color:= clWhite;\r\n   VarY:= 0;\r\n   While VarY &lt;= HauteurJeu do\r\n   begin\r\n     Canvas.Line(MiLargeur, VarY, MiLargeur, VarY + 20);\r\n     Inc (VarY, 40);\r\n   end;\r\n   Canvas.Pen.Color:= clBlack;\r\nend;\r\n\r\nprocedure TForm1.RestaurerEcran(const VarX, VarY: integer);\r\nbegin\r\n  Canvas.Draw (VarX, VarY, SauveEcran);\r\nend;\r\n\r\nprocedure TForm1.EnregistrerEcran(const VarX, VarY: integer);\r\nbegin\r\n  SauveEcran.Canvas.CopyRect(\r\n  Rect(0, 0, TailleBalle, TailleBalle),\r\n  Canvas,\r\n  Rect(VarX, VarY, VarX+TailleBalle, VarY+TailleBalle));\r\nend;\r\n\r\nprocedure TForm1.AfficherInstructions;\r\nbegin\r\n   Canvas.Font.Name:= 'Courier New';\r\n   Canvas.Font.Size:= 24;\r\n   Canvas.Font.Style:=[fsBold];\r\n   Canvas.Font.Color:= clWhite;\r\n   Canvas.Brush.Color:= clBlack;\r\n   Canvas.Rectangle (140, 240, 700, 450);\r\n   Canvas.Pen.Color:= clBlack ;\r\n   Canvas.TextOut (150, 250, '&lt;Espace&gt; pour d\u00e9marrer');\r\n   Canvas.TextOut (150, 300, '&lt;Echap&gt; pour quitter');\r\n   Canvas.TextOut (150, 350, '&lt;F&gt; et &lt;S&gt; raquette gauche');\r\n   Canvas.TextOut (150, 400, '&lt;M&gt; et &lt;K&gt; raquette droite');\r\nend;\r\n\r\nend.\r\n<\/pre>\n<p>Le lecteur est maintenant \u00e0 m\u00eame de programmer ses propres projets !<\/p>\n<p style=\"text-align: justify;\">___<\/p>\n<p style=\"text-align: justify;\">Pour d\u00e9couvrir ou approfondir la programmation en langages Basic ou VBA (ces langages diff\u00e8rent du langage Pascal, toutefois les principes de programmation sont semblables) :&nbsp;<\/p>\n<p style=\"text-align: justify;\">Approfondir le sujet&nbsp;: <a href=\"https:\/\/www.auditsi.eu\/?cat=1207\">Initiation au langage Basic (s\u00e9rie d\u2019articles)<\/a> \/ <a href=\"https:\/\/www.auditsi.eu\/?cat=1569\">Ma\u00eetriser le langage VBA<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img decoding=\"async\" src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"Programmer%20en%20langage%20Pascal%20avec%20l%27EDI%20LAZARUS\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"excerpt":{"rendered":"<p>Qui n&#8217;a pas d\u00e9j\u00e0 r\u00eav\u00e9 de cr\u00e9er ses propres programmes ? Quel que soit leur degr\u00e9 de complexit\u00e9, la programmation aide \u00e0 r\u00e9soudre toute sorte de probl\u00e8mes ; de simple calculs \u00e0 l&#8217;automatisation de t\u00e2ches sophistiqu\u00e9es. Diff\u00e9rentes solutions de programmation sont disponibles suivant la nature du projet envisag\u00e9. Du langage bureautique VBA aux langages plus &#8230;<\/p>\n<p><a href=\"https:\/\/www.auditsi.eu\/?p=8186\" class=\"more-link\">Continue reading &lsquo;Programmer en langage Pascal avec l&#8217;EDI LAZARUS&rsquo; &raquo;<\/a><\/p>\n<div style=\"padding-bottom:20px; padding-top:10px;\" class=\"hupso-share-buttons\"><!-- Hupso Share Buttons - https:\/\/www.hupso.com\/share\/ --><a class=\"hupso_counters\" href=\"https:\/\/www.hupso.com\/share\/\"><img src=\"https:\/\/static.hupso.com\/share\/buttons\/lang\/fr\/share-small.png\" style=\"border:0px; padding-top:2px; float:left;\" alt=\"Share Button\"\/><\/a><script type=\"text\/javascript\">var hupso_services_c=new Array(\"twitter\",\"facebook_like\",\"facebook_send\",\"email\",\"print\",\"linkedin\");var hupso_counters_lang = \"fr_FR\";var hupso_image_folder_url = \"\";var hupso_twitter_via=\"BenoitRiviere14\";var hupso_url_c=\"\";var hupso_title_c=\"Programmer%20en%20langage%20Pascal%20avec%20l%27EDI%20LAZARUS\";<\/script><script type=\"text\/javascript\" src=\"https:\/\/static.hupso.com\/share\/js\/counters.js\"><\/script><!-- Hupso Share Buttons --><\/div>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"ngg_post_thumbnail":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[218],"tags":[628,2037,2042,828,254,2039,2041,275,219,2036,867,2038,274,2040],"class_list":["post-8186","post","type-post","status-publish","format-standard","hentry","category-delphi","tag-android","tag-automation","tag-caption","tag-compilateur","tag-edi","tag-free-pascal","tag-inspecteur-dobjets","tag-langage-compile","tag-langage-de-programmation","tag-lazarus","tag-pascal","tag-pong","tag-programmation","tag-www-developpez-com"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":false,"_links":{"self":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/8186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8186"}],"version-history":[{"count":9,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/8186\/revisions"}],"predecessor-version":[{"id":8213,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=\/wp\/v2\/posts\/8186\/revisions\/8213"}],"wp:attachment":[{"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auditsi.eu\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}