{"id":3171,"date":"2012-02-26T00:00:39","date_gmt":"2012-02-25T23:00:39","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=3171"},"modified":"2023-03-12T14:59:36","modified_gmt":"2023-03-12T13:59:36","slug":"firemonkey-screensaver","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2012\/02\/26\/firemonkey-screensaver\/","title":{"rendered":"Ecran de veille avec FireMonkey"},"content":{"rendered":"<p><a href=\"https:\/\/docwiki.embarcadero.com\/RADStudio\/fr\/Plate-forme_d%27applications_FireMonkey\" title=\"Documentation FireMonkey\" target=\"_blank\" rel=\"noopener\">FireMonkey<\/a> offre de nombreux effets, des animations, des transitions, &#8230;<br \/>\nCette fois-ci, pour jouer avec, j&rsquo;ai cr\u00e9\u00e9 un <a href=\"http:\/\/fr.wikipedia.org\/wiki\/\u00c9cran_de_veille\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: \u00e9cran de veille\" style=\"\" >\u00e9cran de veille<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> pour Windows&nbsp;; par cons\u00e9quent, je ne me limite pas aux fonctions multi-plateformes et me permet d&rsquo;utiliser des <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Interface_de_programmation\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: APIs\" style=\"\" >APIs<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> Windows.<\/p>\n<p><center>\n<div class=\"youtube-embed\" itemprop=\"video\" itemscope itemtype=\"https:\/\/schema.org\/VideoObject\">\n\t<meta itemprop=\"url\" content=\"https:\/\/www.youtube.com\/v\/nSj3BTsiBW8\" \/>\n\t<meta itemprop=\"name\" content=\"Ecran de veille avec FireMonkey\" \/>\n\t<meta itemprop=\"description\" content=\"Ecran de veille avec FireMonkey\" \/>\n\t<meta itemprop=\"uploadDate\" content=\"2012-02-26T00:00:39+01:00\" \/>\n\t<meta itemprop=\"thumbnailUrl\" content=\"https:\/\/i.ytimg.com\/vi\/nSj3BTsiBW8\/default.jpg\" \/>\n\t<meta itemprop=\"embedUrl\" content=\"https:\/\/www.youtube.com\/embed\/nSj3BTsiBW8\" \/>\n\t<meta itemprop=\"height\" content=\"340\" \/>\n\t<meta itemprop=\"width\" content=\"560\" \/>\n\t<iframe loading=\"lazy\" style=\"border: 0;\" class=\"youtube-player\" width=\"560\" height=\"340\" src=\"https:\/\/www.youtube.com\/embed\/nSj3BTsiBW8\" allowfullscreen><\/iframe>\n<\/div>\n<\/center><\/p>\n<p>Si vous souhaitez t\u00e9l\u00e9charger cet \u00e9cran de veille, vous pouvez le faire depuis <a href=\"https:\/\/www.whiler.com\/freewares\/download?wsnowflakes.scr\" title=\"T\u00e9l\u00e9charger l'\u00e9cran de veille wSnowflakes\">ce lien<\/a>. <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/yes.gif\" alt=\"(y)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Cependant, si vous pr\u00e9f\u00e9rez voir comment j&rsquo;ai cod\u00e9 cette application, vous pouvez suivre les informations suivantes&#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<!--more--><br \/>\nJ&rsquo;ai commenc\u00e9 par cr\u00e9er une application FireMonkey HD avec mon Delphi XE2.<br \/>\n<div id=\"attachment_3174\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/firemonkey-hd.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3174\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/firemonkey-hd-300x237.png\" alt=\"Application FireMonkey HD\" title=\"Application FireMonkey HD\" width=\"300\" height=\"237\" class=\"size-medium wp-image-3174\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/firemonkey-hd-300x237.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/firemonkey-hd.png 603w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3174\" class=\"wp-caption-text\">Application FireMonkey HD<\/p><\/div><\/p>\n<p>J&rsquo;ai \u00e9galement <a href=\"https:\/\/dragonartz.wordpress.com\/2008\/10\/28\/snow-flakes-vector-set\/\" title=\"Snow Flakes Vector Set\" target=\"_blank\" rel=\"noopener\">t\u00e9l\u00e9charger des images<\/a> pour avoir de la mati\u00e8re \u00e0 manipuler.<br \/>\nJ&rsquo;ai ajout\u00e9 les images en tant que ressources de mon projet&nbsp;: <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<div id=\"attachment_3175\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/resources.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3175\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/resources-300x138.png\" alt=\"Ressources du projet\" title=\"Ressources du projet\" width=\"300\" height=\"138\" class=\"size-medium wp-image-3175\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/resources-300x138.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/resources.png 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3175\" class=\"wp-caption-text\">Ressources du projet<\/p><\/div><\/p>\n<p>Un \u00e9cran de veille peut r\u00e9pondre \u00e0 diff\u00e9rents param\u00e8tres lorsqu&rsquo;il est appel\u00e9&nbsp;:<\/p>\n<ul>\n<li>Afficher un \u00e9cran de configuration<\/li>\n<li>Afficher l&rsquo;\u00e9cran de veille<\/li>\n<li>Afficher une pr\u00e9visualisation de celui-ci<\/li>\n<\/ul>\n<p>La gestion de son affichage et d&rsquo;un \u00e9cran de configuration va \u00eatre g\u00e9r\u00e9e dans cet article. Concernant la pr\u00e9visualisation, je g\u00e8re les param\u00e8tres mais je n&rsquo;affiche rien.<\/p>\n<p>J&rsquo;ajoute une seconde fiche FireMonkey HD au projet, ce qui m&rsquo;en fait 2 au total&nbsp;:<\/p>\n<ul>\n<li>une pour l&rsquo;\u00e9cran de veille&nbsp;: <em>frmMain<\/em><\/li>\n<li>une pour l&rsquo;\u00e9cran de configuration&nbsp;: <em>frmConfig<\/em><\/li>\n<\/ul>\n<div id=\"attachment_3176\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/new-firemonkey-hd-form.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3176\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/new-firemonkey-hd-form-300x291.png\" alt=\"Ajouter une nouvelle fiche FireMonkey HD\" title=\"Ajouter une nouvelle fiche FireMonkey HD\" width=\"300\" height=\"291\" class=\"size-medium wp-image-3176\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/new-firemonkey-hd-form-300x291.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/new-firemonkey-hd-form.png 415w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3176\" class=\"wp-caption-text\">Ajouter une nouvelle fiche FireMonkey HD<\/p><\/div>\n<p>J&rsquo;ajoute \u00e9galement deux nouvelles unit\u00e9s \u00e0 mon projet&nbsp;:<\/p>\n<ul>\n<li>une pour g\u00e9rer mes param\u00e8tres de configuration et qui sera utilis\u00e9e par les deux fiches&nbsp;: <em>uShared<\/em><\/li>\n<li>une pour cr\u00e9er une classe qui h\u00e9rite d&rsquo;une image et qui utilisera des animations, effets, &#8230;&nbsp;: <em>uSnowflake<\/em><\/li>\n<\/ul>\n<p>Retrouvez sur <a href=\"\/whiler\/2012\/02\/26\/firemonkey-screensaver\/2\/\" title=\"Visualiser la page suivante\">la page suivante<\/a>, la fa\u00e7on dont j&rsquo;ai modifi\u00e9 le code du projet pour g\u00e9rer les param\u00e8tres de l&rsquo;application et l&rsquo;ouverture de la fiche ad\u00e9quate&#8230;<br \/>\n<!--nextpage--><br \/>\nPlusieurs param\u00e8tres peuvent \u00eatre pass\u00e9s \u00e0 l&rsquo;application lorsque celle-ci est appel\u00e9e&nbsp;:<\/p>\n<ul>\n<li><strong>\/s<\/strong>&nbsp;: affiche l&rsquo;\u00e9cran de veille<\/li>\n<li><strong>\/c<\/strong>&nbsp;: affiche l&rsquo;\u00e9cran de configuration de l&rsquo;\u00e9cran de veille&nbsp;; C&rsquo;est \u00e9galement cet \u00e9cran qui s&rsquo;affiche si aucun param\u00e8tre n&rsquo;est pass\u00e9.<\/li>\n<li><strong>\/p<\/strong>&nbsp;: affiche la pr\u00e9visualisation de l&rsquo;\u00e9cran de veille<br \/>\nPour la pr\u00e9visualisation, le Handle de la fen\u00eatre o\u00f9 il faut l&rsquo;afficher est n\u00e9cessaire. Celui-ci est pass\u00e9 soit par un second param\u00e8tre (<em>\/p 123456<\/em>), soit \u00e0 la suite du <em>\/p<\/em> s\u00e9par\u00e9 par&nbsp;<strong>:<\/strong> (<em>\/p:123456<\/em>)<\/li>\n<\/ul>\n<p>Pour g\u00e9rer ces param\u00e8tres et les actions qui en d\u00e9coulent, je modifie le fichier source du projet&nbsp;:<br \/>\n<div id=\"attachment_3177\" style=\"width: 167px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/project-view-source.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3177\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/project-view-source-157x300.png\" alt=\"Voir la source du projet\" title=\"Voir la source du projet\" width=\"157\" height=\"300\" class=\"size-medium wp-image-3177\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/project-view-source-157x300.png 157w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/project-view-source.png 261w\" sizes=\"auto, (max-width: 157px) 100vw, 157px\" \/><\/a><p id=\"caption-attachment-3177\" class=\"wp-caption-text\">Voir la source du projet<\/p><\/div><\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">program<\/span> wSnowflakes<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$R *.dres}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span><br \/>\n&nbsp; FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Forms<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">SysUtils<\/span><span class=\"sy1\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/ Trim, LowerCase<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">StrUtils<\/span><span class=\"sy1\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/ LeftStr, RightStr<\/span><br \/>\n&nbsp; Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">Windows<\/span><span class=\"sy1\">,<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ MessageBox, MB_OK, MB_ICONWARNING, MB_TOPMOST<\/span><br \/>\n&nbsp; main <span class=\"kw1\">in<\/span> <span class=\"st0\">'main.pas'<\/span> <span class=\"coMULTI\">{frmMain}<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; fConfig <span class=\"kw1\">in<\/span> <span class=\"st0\">'fConfig.pas'<\/span> <span class=\"coMULTI\">{frmConfig}<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; uShared <span class=\"kw1\">in<\/span> <span class=\"st0\">'uShared.pas'<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; uSnowflake <span class=\"kw1\">in<\/span> <span class=\"st0\">'uSnowflake.pas'<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$R *.res}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; sArg1<span class=\"sy1\">,<\/span> sArg2<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Application<span class=\"sy1\">.<\/span><span class=\"me1\">Initialize<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ Param\u00e8tres pass\u00e9s \u00e0 l'application<\/span><br \/>\n&nbsp; sArg1 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sArg2 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>ParamCount &gt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> <span class=\"co1\">\/\/ S'il y a des param\u00e8tres<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; sArg1 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Trim<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">LowerCase<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">ParamStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Si les param\u00e8tres sont s\u00e9par\u00e9s par un :<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw3\">Length<\/span><span class=\"br0\">&#40;<\/span>sArg1<span class=\"br0\">&#41;<\/span> &gt; <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; sArg2 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> RightStr<span class=\"br0\">&#40;<\/span>sArg1<span class=\"sy1\">,<\/span> <span class=\"kw3\">Length<\/span><span class=\"br0\">&#40;<\/span>sArg1<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">-<\/span> <span class=\"nu0\">3<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; sArg1 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LeftStr<span class=\"br0\">&#40;<\/span>sArg1<span class=\"sy1\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>ParamCount &gt; <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; sArg2 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">ParamStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; sArg1 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'\/c'<\/span><span class=\"sy1\">;<\/span> <span class=\"co1\">\/\/ Ecran de configuration par d\u00e9faut<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>sArg1 <span class=\"sy3\">=<\/span> <span class=\"st0\">'\/s'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> &nbsp; &nbsp; &nbsp;<span class=\"co1\">\/\/ Affichage normal de l'\u00e9cran de veille<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Application<span class=\"sy1\">.<\/span><span class=\"me1\">CreateForm<\/span><span class=\"br0\">&#40;<\/span>TfrmMain<span class=\"sy1\">,<\/span> frmMain<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>sArg1 <span class=\"sy3\">=<\/span> <span class=\"st0\">'\/c'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> <span class=\"co1\">\/\/ Ecran de configuration<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Application<span class=\"sy1\">.<\/span><span class=\"me1\">CreateForm<\/span><span class=\"br0\">&#40;<\/span>TfrmConfig<span class=\"sy1\">,<\/span> frmConfig<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>sArg1 <span class=\"sy3\">=<\/span> <span class=\"st0\">'\/p'<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> <span class=\"co1\">\/\/ Affichage de l'\u00e9cran de veillle dans la fen\u00eatre de pr\u00e9visualisation<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Non g\u00e9r\u00e9<\/span><br \/>\n&nbsp; &nbsp; Application<span class=\"sy1\">.<\/span><span class=\"me1\">Terminate<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; MessageBox<span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"kw4\">PWideChar<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'Le param\u00e8tre &quot;'<\/span> <span class=\"sy3\">+<\/span> sArg1 <span class=\"sy3\">+<\/span> <span class=\"st0\">'&quot; n'<\/span><span class=\"st0\">'est pas valide !'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'Android-Software'<\/span><span class=\"sy1\">,<\/span> MB_OK <span class=\"sy3\">+<\/span> MB_ICONWARNING <span class=\"sy3\">+<\/span> MB_TOPMOST<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Application<span class=\"sy1\">.<\/span><span class=\"me1\">Run<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Sur <a href=\"\/whiler\/2012\/02\/26\/firemonkey-screensaver\/3\/\" title=\"Visualiser la page suivante\">la page suivante<\/a>, retrouvez l&rsquo;unit\u00e9 me permet de stocker les param\u00e8tres de configuration de l&rsquo;\u00e9cran de veille ainsi que la fiche permettant de mettre \u00e0 jour cette configuration&#8230;<br \/>\n<!--nextpage--><br \/>\nJe vais sauvegarder mes param\u00e8tres dans la base de registre de Windows. Cela permet ainsi de voir comment y acc\u00e9der depuis une application FireMonkey. Comme tout le restant du code de ce projet, des optimisations\/am\u00e9liorations peuvent \u00eatre faites&#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\nPour cela, j&rsquo;ai cod\u00e9 l&rsquo;unit\u00e9 <em>uShared<\/em> ainsi&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> uShared<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Win<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Registry<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">Windows<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">const<\/span><br \/>\n&nbsp; REGISTRY_PATH <span class=\"sy3\">=<\/span> <span class=\"st0\">'\\Software\\Whiler\\wSnowflakes'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; REG_SIZE &nbsp; &nbsp; &nbsp;<span class=\"sy3\">=<\/span> <span class=\"st0\">'Size'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; REG_FREQUENCY <span class=\"sy3\">=<\/span> <span class=\"st0\">'Frequency'<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TConfig <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><br \/>\n&nbsp; <span class=\"kw1\">private<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> SetSize<span class=\"br0\">&#40;<\/span>dSize<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span> static<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">function<\/span> &nbsp;GetSize<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span> static<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> SetFrequency<span class=\"br0\">&#40;<\/span>iFrequency<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span> static<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">function<\/span> &nbsp;GetFrequency<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span> static<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">property<\/span> Size &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span> &nbsp;<span class=\"kw1\">read<\/span> GetSize &nbsp; &nbsp; &nbsp;<span class=\"kw1\">write<\/span> SetSize<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">property<\/span> Frequency<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span> <span class=\"kw1\">read<\/span> GetFrequency <span class=\"kw1\">write<\/span> SetFrequency<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">{ TConfig }<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> <span class=\"kw1\">function<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">GetFrequency<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; reg<span class=\"sy1\">:<\/span> TRegistry<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">25<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; reg &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegistry<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">RootKey<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> HKEY_CURRENT_USER<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">OpenKeyReadOnly<\/span><span class=\"br0\">&#40;<\/span>REGISTRY_PATH<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> reg<span class=\"sy1\">.<\/span><span class=\"me1\">ValueExists<\/span><span class=\"br0\">&#40;<\/span>REG_FREQUENCY<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> reg<span class=\"sy1\">.<\/span><span class=\"me1\">ReadInteger<\/span><span class=\"br0\">&#40;<\/span>REG_FREQUENCY<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">CloseKey<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">finally<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> <span class=\"kw1\">function<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">GetSize<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; reg<span class=\"sy1\">:<\/span> TRegistry<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0.25<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; reg &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegistry<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">RootKey<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> HKEY_CURRENT_USER<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">OpenKeyReadOnly<\/span><span class=\"br0\">&#40;<\/span>REGISTRY_PATH<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> reg<span class=\"sy1\">.<\/span><span class=\"me1\">ValueExists<\/span><span class=\"br0\">&#40;<\/span>REG_SIZE<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> reg<span class=\"sy1\">.<\/span><span class=\"me1\">ReadFloat<\/span><span class=\"br0\">&#40;<\/span>REG_SIZE<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">CloseKey<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">finally<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">SetFrequency<\/span><span class=\"br0\">&#40;<\/span>iFrequency<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; reg<span class=\"sy1\">:<\/span> TRegistry<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; reg <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegistry<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">RootKey<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> HKEY_CURRENT_USER<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">OpenKey<\/span><span class=\"br0\">&#40;<\/span>REGISTRY_PATH<span class=\"sy1\">,<\/span> <span class=\"kw2\">True<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">WriteInteger<\/span><span class=\"br0\">&#40;<\/span>REG_FREQUENCY<span class=\"sy1\">,<\/span> iFrequency<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">CloseKey<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">finally<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">SetSize<\/span><span class=\"br0\">&#40;<\/span>dSize<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; reg &nbsp;<span class=\"sy1\">:<\/span> TRegistry<span class=\"sy1\">;<\/span><br \/>\n&nbsp; value<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; reg <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegistry<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">RootKey<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> HKEY_CURRENT_USER<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">OpenKey<\/span><span class=\"br0\">&#40;<\/span>REGISTRY_PATH<span class=\"sy1\">,<\/span> <span class=\"kw2\">True<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">WriteFloat<\/span><span class=\"br0\">&#40;<\/span>REG_SIZE<span class=\"sy1\">,<\/span> dSize<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">CloseKey<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">finally<\/span><br \/>\n&nbsp; &nbsp; reg<span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Je con\u00e7ois l&rsquo;interface graphique de la fiche pour la configuration, <em>frmConfig<\/em>, ainsi&nbsp;:<br \/>\n<div id=\"attachment_3183\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-configuration-design.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3183\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-configuration-design-300x172.png\" alt=\"Conception de la fiche pour la configuration\" title=\"Conception de la fiche pour la configuration\" width=\"300\" height=\"172\" class=\"size-medium wp-image-3183\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-configuration-design-300x172.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-configuration-design.png 531w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3183\" class=\"wp-caption-text\">Conception de la fiche pour la configuration<\/p><\/div><br \/>\nSon code associ\u00e9 est le suivant&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> fConfig<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">SysUtils<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">UITypes<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Classes<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Variants<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Controls<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Forms<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Dialogs<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Objects<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">ShellAPI<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">Windows<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Layouts<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TfrmConfig <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><span class=\"br0\">&#40;<\/span>TForm<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; tbSize<span class=\"sy1\">:<\/span> TTrackBar<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; lblSize<span class=\"sy1\">:<\/span> TLabel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; lblFrequency<span class=\"sy1\">:<\/span> TLabel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; tbFrequency<span class=\"sy1\">:<\/span> TTrackBar<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; btnCancel<span class=\"sy1\">:<\/span> TButton<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; imgCancel<span class=\"sy1\">:<\/span> TImage<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; btnOk<span class=\"sy1\">:<\/span> TButton<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; imgOk<span class=\"sy1\">:<\/span> TImage<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; cpnlfrequency<span class=\"sy1\">:<\/span> TCalloutPanel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; cpnlSize<span class=\"sy1\">:<\/span> TCalloutPanel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; lblSizevalue<span class=\"sy1\">:<\/span> TLabel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; lblFrequencyValue<span class=\"sy1\">:<\/span> TLabel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; Image1<span class=\"sy1\">:<\/span> TImage<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; GroupBox1<span class=\"sy1\">:<\/span> TGroupBox<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; ScaledLayout1<span class=\"sy1\">:<\/span> TScaledLayout<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> btnCancelClick<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> btnOkClick<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> FormCreate<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> tbSizeChange<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> tbFrequencyChange<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> Image1Click<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">private<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{ Private declarations }<\/span><br \/>\n&nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{ Public declarations }<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; frmConfig<span class=\"sy1\">:<\/span> TfrmConfig<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$R *.fmx}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span> uShared<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmConfig<span class=\"sy1\">.<\/span><span class=\"me1\">btnCancelClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Close<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmConfig<span class=\"sy1\">.<\/span><span class=\"me1\">btnOkClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; value<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Sauvegarder<\/span><br \/>\n&nbsp; value <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy3\">-<\/span> tbSize<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>value <span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; value <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">2<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; value <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">1<\/span> <span class=\"sy3\">\/<\/span> value<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Size<\/span> &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> value<span class=\"sy1\">;<\/span><br \/>\n&nbsp; TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Frequency<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>tbFrequency<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Close<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmConfig<span class=\"sy1\">.<\/span><span class=\"me1\">FormCreate<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; value<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Initialiser<\/span><br \/>\n&nbsp; value <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Size<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>value &gt; <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; value <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">8<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; value <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">8<\/span> <span class=\"sy3\">-<\/span> <span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span> <span class=\"sy3\">\/<\/span> value<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tbSize<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span> &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> value<span class=\"sy1\">;<\/span><br \/>\n&nbsp; tbFrequency<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Frequency<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; tbSizeChange<span class=\"br0\">&#40;<\/span>tbSize<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tbFrequencyChange<span class=\"br0\">&#40;<\/span>tbFrequency<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Image1Click<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; ShellExecute<span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'OPEN'<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'https:\/\/dragonartz.wordpress.com\/2008\/10\/28\/snow-flakes-vector-set\/'<\/span><span class=\"sy1\">,<\/span> <span class=\"kw1\">nil<\/span><span class=\"sy1\">,<\/span> <span class=\"kw1\">nil<\/span><span class=\"sy1\">,<\/span> SW_SHOWNORMAL<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmConfig<span class=\"sy1\">.<\/span><span class=\"me1\">tbFrequencyChange<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; lblFrequencyValue<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">IntToStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>tbFrequency<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">' ms'<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmConfig<span class=\"sy1\">.<\/span><span class=\"me1\">tbSizeChange<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; lblSizevalue<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">IntToStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Succ<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>tbSize<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; lblSizevalue<span class=\"sy1\">.<\/span><span class=\"me1\">Scale<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0.5<\/span> <span class=\"sy3\">+<\/span> <span class=\"br0\">&#40;<\/span>tbSize<span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">\/<\/span> <span class=\"nu0\">10<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; lblSizevalue<span class=\"sy1\">.<\/span><span class=\"me1\">Scale<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> lblSizevalue<span class=\"sy1\">.<\/span><span class=\"me1\">Scale<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Sur <a href=\"\/whiler\/2012\/02\/26\/firemonkey-screensaver\/4\/\" title=\"Visualiser la page suivante\">la page suivante<\/a>, le code pour la gestion d&rsquo;un flocon ainsi que la fiche pour l&rsquo;\u00e9cran de veille, <em>frmMain<\/em>&#8230;<br \/>\n<!--nextpage--><br \/>\nChaque flocon s&rsquo;anime de fa\u00e7on autonome&#8230; Du fait d&rsquo;utiliser les animations, je n&rsquo;ai pas eu besoin d&rsquo;allouer et d&rsquo;initialiser moi-m\u00eame des threads pour les g\u00e9rer.<br \/>\nUn flocon est cod\u00e9 ainsi&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> uSnowflake<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Objects<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Classes<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">Windows<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Math<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Ani<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Filter<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Effects<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TSnowflake <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><span class=\"br0\">&#40;<\/span>TImage<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">private<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">:<\/span> TFloatAnimation<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical &nbsp;<span class=\"sy1\">:<\/span> TFloatAnimation<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; hue &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> THueAdjustEffect<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> TFloatAnimation<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> FloatAnimationVerticalFinish<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">constructor<\/span> GenerateSnowflake<span class=\"br0\">&#40;<\/span>AOwner<span class=\"sy1\">:<\/span> TComponent<span class=\"sy1\">;<\/span> parent<span class=\"sy1\">:<\/span> TFMXObject<span class=\"sy1\">;<\/span> sSprite<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">{ TSnowflake }<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span> uShared<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TSnowflake<span class=\"sy1\">.<\/span><span class=\"me1\">FloatAnimationVerticalFinish<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">constructor<\/span> TSnowflake<span class=\"sy1\">.<\/span><span class=\"me1\">GenerateSnowflake<\/span><span class=\"br0\">&#40;<\/span>AOwner<span class=\"sy1\">:<\/span> TComponent<span class=\"sy1\">;<\/span> parent<span class=\"sy1\">:<\/span> TFMXObject<span class=\"sy1\">;<\/span> sSprite<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; rsSnowflake <span class=\"sy1\">:<\/span> TResourceStream<span class=\"sy1\">;<\/span><br \/>\n&nbsp; cParent &nbsp; &nbsp; <span class=\"sy1\">:<\/span> TControl<span class=\"sy1\">;<\/span><br \/>\n&nbsp; dSize &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">inherited<\/span> Create<span class=\"br0\">&#40;<\/span>AOwner<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Parent<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> parent<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">HitTest<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; cParent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span>parent <span class=\"kw1\">as<\/span> TControl<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; rsSnowflake <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TResourceStream<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span>HInstance<span class=\"sy1\">,<\/span> sSprite<span class=\"sy1\">,<\/span> RT_RCDATA<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; &nbsp; rsSnowflake<span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Bitmap<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">LoadFromStream<\/span><span class=\"br0\">&#40;<\/span>rsSnowflake<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; dSize <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Size<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Bitmap<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">*<\/span> dSize<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Bitmap<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">*<\/span> dSize<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">RandomRange<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>cParent<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"sy3\">-<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TFloatAnimation<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">Parent<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">StartValue<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">StopValue<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">RandomRange<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">5<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">100<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">PropertyName<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Position.X'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">AnimationType<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TAnimationType<span class=\"sy1\">.<\/span><span class=\"me1\">atInOut<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">Interpolation<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TInterpolationType<span class=\"sy1\">.<\/span><span class=\"me1\">itElastic<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">Loop<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">AutoReverse<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">Duration<\/span> &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">RandomRange<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">10<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TFloatAnimation<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">Parent<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">OnFinish<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> FloatAnimationVerticalFinish<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">StartValue<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Position<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">StopValue<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> cParent<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">PropertyName<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Position.Y'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">Duration<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">RandomRange<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">10<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">15<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; hue &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> THueAdjustEffect<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; hue<span class=\"sy1\">.<\/span><span class=\"me1\">Parent<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">Self<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; hue<span class=\"sy1\">.<\/span><span class=\"me1\">Hue<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0.3<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; hue<span class=\"sy1\">.<\/span><span class=\"me1\">Enabled<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TFloatAnimation<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">Parent<\/span> &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Hue<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">StartValue<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"sy3\">-<\/span><span class=\"nu0\">0.2<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">StopValue<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> &nbsp;<span class=\"nu0\">0.3<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">PropertyName<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Hue'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">Duration<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">RandomRange<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">5<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">20<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">AutoReverse<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">Loop<\/span> &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHorizontal<span class=\"sy1\">.<\/span><span class=\"me1\">Start<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationVertical<span class=\"sy1\">.<\/span><span class=\"me1\">Start<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FloatAnimationHue<span class=\"sy1\">.<\/span><span class=\"me1\">Start<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">except<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">finally<\/span><br \/>\n&nbsp; &nbsp; rsSnowflake<span class=\"sy1\">.<\/span><span class=\"me1\">Free<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co1\">\/\/ &nbsp;Self.Free;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>La fiche principale qui va afficher l&rsquo;\u00e9cran de veille, <em>frmMain<\/em>, est tr\u00e8s simple. C&rsquo;est une fiche avec un <strong>BorderStyle<\/strong> d\u00e9fini \u00e0 <em>bsNone<\/em>, qui a un fond noir et qui est toujours au dessus des autres (<code class=\"codecolorer delphi dawn\"><span class=\"delphi\">TopMost <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><\/span><\/code>). Je lui ai ajout\u00e9 un <strong>TRectangle<\/strong> pour g\u00e9rer les \u00e9v\u00e9nements de la souris et un <strong>TTimer<\/strong> pour l&rsquo;ajout \u00e0 intervalle r\u00e9gulier de nouveaux flocons&nbsp;:<br \/>\n<div id=\"attachment_3184\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-main-design.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3184\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-main-design-300x164.png\" alt=\"Conception de la fen\u00eatre principale\" title=\"Conception de la fen\u00eatre principale\" width=\"300\" height=\"164\" class=\"size-medium wp-image-3184\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-main-design-300x164.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-main-design.png 558w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3184\" class=\"wp-caption-text\">Conception de la fen\u00eatre principale<\/p><\/div><\/p>\n<p>Puisque l&rsquo;on peut avoir plusieurs \u00e9crans sur un m\u00eame ordinateur, et que l&rsquo;\u00e9cran de veille doit tous les recouvrir, j&rsquo;ai repris quatre fonctions existant dans la <a href=\"http:\/\/fr.wikipedia.org\/wiki\/VCL\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: VCL\" style=\"\" >VCL<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup>&nbsp;: <em>DesktopHeight<\/em>, <em>DesktopLeft<\/em>, <em>DesktopTop<\/em> &#038; <em>DesktopWidth<\/em>.<br \/>\nJe surcharge \u00e9galement la proc\u00e9dure <em>KeyDown<\/em> pour d\u00e9tecter les frappes sur le clavier afin de pouvoir fermer l&rsquo;\u00e9cran de veille.<br \/>\nL&rsquo;ensemble du code se pr\u00e9sente ainsi&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/>114<br \/>115<br \/>116<br \/>117<br \/>118<br \/>119<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> main<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">SysUtils<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">UITypes<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Classes<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Variants<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Math<\/span><span class=\"sy1\">,<\/span><br \/>\n&nbsp; FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Types<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Controls<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Forms<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Dialogs<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">Windows<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">MultiMon<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Objects<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Ani<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Filter<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Effects<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TfrmMain <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><span class=\"br0\">&#40;<\/span>TForm<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; recBG<span class=\"sy1\">:<\/span> TRectangle<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; tmrSnowFlake<span class=\"sy1\">:<\/span> TTimer<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> recBGMouseMove<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> recBGClick<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> FormCreate<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> tmrSnowFlakeTimer<span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">private<\/span><br \/>\n&nbsp; &nbsp; pMouse &nbsp;<span class=\"sy1\">:<\/span> TPointF<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">function<\/span> DesktopHeight<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">function<\/span> DesktopLeft<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">function<\/span> DesktopTop<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">function<\/span> DesktopWidth<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{ Private declarations }<\/span><br \/>\n&nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{ Public declarations }<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> KeyDown<span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span> Key<span class=\"sy1\">:<\/span> <span class=\"kw4\">Word<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> KeyChar<span class=\"sy1\">:<\/span> <span class=\"kw4\">Char<\/span><span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">override<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">const<\/span><br \/>\n&nbsp; DELTA_MOUSE <span class=\"sy3\">=<\/span> <span class=\"nu0\">5<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; frmMain<span class=\"sy1\">:<\/span> TfrmMain<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$R *.fmx}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span> uShared<span class=\"sy1\">,<\/span> uSnowflake<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">{ TfrmMain }<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$region 'Taille du bureau virtuel'}<\/span><br \/>\n<span class=\"kw1\">function<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">DesktopLeft<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetSystemMetrics<span class=\"br0\">&#40;<\/span>SM_XVIRTUALSCREEN<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">DesktopWidth<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetSystemMetrics<span class=\"br0\">&#40;<\/span>SM_CXVIRTUALSCREEN<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">DesktopTop<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetSystemMetrics<span class=\"br0\">&#40;<\/span>SM_YVIRTUALSCREEN<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">function<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">DesktopHeight<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetSystemMetrics<span class=\"br0\">&#40;<\/span>SM_CYVIRTUALSCREEN<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$endregion}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">KeyDown<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span> Key<span class=\"sy1\">:<\/span> <span class=\"kw4\">Word<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> KeyChar<span class=\"sy1\">:<\/span> <span class=\"kw4\">Char<\/span><span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">inherited<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ On ferme la fen\u00eatre pour quitter l'application<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Close<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">FormCreate<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Randomize<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Left<\/span> &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DesktopLeft<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DesktopWidth<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Top<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DesktopTop<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> DesktopHeight<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Left<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Top<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; ShowCursor<span class=\"br0\">&#40;<\/span><span class=\"kw2\">False<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; tmrSnowFlake<span class=\"sy1\">.<\/span><span class=\"me1\">Interval<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TConfig<span class=\"sy1\">.<\/span><span class=\"me1\">Frequency<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tmrSnowFlake<span class=\"sy1\">.<\/span><span class=\"me1\">Enabled<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">recBGClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ On ferme la fen\u00eatre pour quitter l'application<\/span><br \/>\n&nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Close<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">recBGMouseMove<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"sy1\">;<\/span> Shift<span class=\"sy1\">:<\/span> TShiftState<span class=\"sy1\">;<\/span> X<span class=\"sy1\">,<\/span> Y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Single<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> &lt;&gt; <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Left<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">or<\/span> <span class=\"br0\">&#40;<\/span>pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> &lt;&gt; <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Top<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> <span class=\"co1\">\/\/ Valeur initiale<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Abs<\/span><span class=\"br0\">&#40;<\/span>pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy3\">-<\/span> X<span class=\"br0\">&#41;<\/span> &gt; DELTA_MOUSE<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">or<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw3\">Abs<\/span><span class=\"br0\">&#40;<\/span>pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy3\">-<\/span> Y<span class=\"br0\">&#41;<\/span> &gt; DELTA_MOUSE<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> <span class=\"co1\">\/\/ Tol\u00e9rance \u00e0 un l\u00e9ger d\u00e9calage...<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ La souris a boug\u00e9... on ferme la fen\u00eatre pour quitter l'application<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Close<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"co1\">\/\/ On met \u00e0 jour les coordonn\u00e9es<\/span><br \/>\n&nbsp; pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">X<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> X<span class=\"sy1\">;<\/span><br \/>\n&nbsp; pMouse<span class=\"sy1\">.<\/span><span class=\"me1\">Y<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Y<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">tmrSnowFlakeTimer<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Affichage d'un flocon<\/span><br \/>\n&nbsp; TSnowflake<span class=\"sy1\">.<\/span><span class=\"me1\">GenerateSnowflake<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">,<\/span> recBG<span class=\"sy1\">,<\/span> <span class=\"st0\">'sf'<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">IntToStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">RandomRange<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">25<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span> <span class=\"co1\">\/\/ Affichage al\u00e9atoire d'un des 24 flocons<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">.<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Voila <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/cool.gif\" alt=\"8-)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/>  Avec ces quelques lignes de code, je me suis cr\u00e9\u00e9 mon propre \u00e9cran de veille&#8230;<br \/>\nIl ne me reste plus qu&rsquo;\u00e0 modifier l&rsquo;extension de mon application en <em>scr<\/em> au lieu de <em>exe<\/em>, et je pourrais ensuite l&rsquo;installer&nbsp;! <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/yes.gif\" alt=\"(y)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<div id=\"attachment_3185\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-target-file-extension.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-3185\" src=\"\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-target-file-extension-300x208.png\" alt=\"Extension du fichier g\u00e9n\u00e9r\u00e9\" title=\"Extension du fichier g\u00e9n\u00e9r\u00e9\" width=\"300\" height=\"208\" class=\"size-medium wp-image-3185\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-target-file-extension-300x208.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/02\/wsnowflakes-target-file-extension.png 623w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-3185\" class=\"wp-caption-text\">Extension du fichier g\u00e9n\u00e9r\u00e9<\/p><\/div><\/p>\n<p>Concr\u00e8tement, si vous souhaitez tester le r\u00e9sultat, vous pouvez \u00e9galement le t\u00e9l\u00e9charger depuis <a href=\"https:\/\/www.whiler.com\/freewares\/download?wsnowflakes.scr\" title=\"T\u00e9l\u00e9charger l'\u00e9cran de veille wSnowflakes\">ce lien<\/a> <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> Vous pouvez \u00e9galement <a href=\"https:\/\/www.whiler.com\/freewares\/download?asss.scr\" title=\"T\u00e9l\u00e9charger l'\u00e9cran de veille Android-Software\">t\u00e9l\u00e9charger un autre \u00e9cran de veille<\/a> bas\u00e9 sur le m\u00eame code qui utilise encore plus d&rsquo;effet&nbsp;!<\/p>\n<p>&nbsp;<\/p>\n<blockquote><p>\u00c9crans de veille d\u00e9velopp\u00e9s avec <a target=\"_blank\" href=\"https:\/\/www.embarcadero.com\/fr\/products\/delphi\" rel=\"noopener\">Embarcadero Delphi XE2<\/a>.<\/p><\/blockquote>\n<p><center><a href=\"\/whiler\/category\/computer\/delphi\/\" title=\"Articles concernant Delphi\"><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2009\/10\/built_with_delphi.png\" alt=\"D\u00e9velopp\u00e9 en Delphi\" title=\"D\u00e9velopp\u00e9 en Delphi\" width=\"125\" height=\"51\" class=\"size-full wp-image-2721\" \/><\/a><\/center><\/p>\n","protected":false},"excerpt":{"rendered":"<p>FireMonkey offre de nombreux effets, des animations, des transitions, \u2026<br \/>\nCette fois-ci, pour jouer avec, j\u2019ai cr\u00e9\u00e9 un \u00e9cran de veille pour Windows&#038;nbsp:par cons\u00e9quent, je ne me limite pas aux fonctions multi-plateformes et me permet d\u2019utiliser des APIs Windows&#8230;.<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[7,6],"tags":[27,154,146,93,108],"class_list":["post-3171","post","type-post","status-publish","format-standard","hentry","category-delphi","category-dev","tag-coloration-syntaxique","tag-delphi","tag-firemonkey","tag-freeware","tag-script"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/3171","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/comments?post=3171"}],"version-history":[{"count":1,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/3171\/revisions"}],"predecessor-version":[{"id":6367,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/3171\/revisions\/6367"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=3171"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=3171"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=3171"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}