{"id":5324,"date":"2014-03-23T20:00:05","date_gmt":"2014-03-23T19:00:05","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=5324"},"modified":"2023-03-12T14:42:59","modified_gmt":"2023-03-12T13:42:59","slug":"wbootanimationframesgenerator","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2014\/03\/23\/wbootanimationframesgenerator\/","title":{"rendered":"wBootAnimationFramesGenerator"},"content":{"rendered":"<p>Les ann\u00e9es passent, mais certaines habitudes restent&#8230; depuis que j&rsquo;ai des t\u00e9l\u00e9phones Android, je remplace syst\u00e9matiquement <a href=\"\/whiler\/2010\/06\/15\/bootanimation\/\" title=\"Animation au d\u00e9marrage de mon t\u00e9l\u00e9phone Android\">l&rsquo;animation<\/a> pr\u00e9sente au d\u00e9marrage (et maintenant, celle de l&rsquo;extinction \u00e9galement).<\/p>\n<p>Habituellement, je cr\u00e9e les nombreuses et diff\u00e9rentes images (<em>frames<\/em>) qui vont composer l&rsquo;animation manuellement, avec un \u00e9diteur d&rsquo;images. Cette fois, je me suis d\u00e9cid\u00e9 \u00e0 coder une application me permettant de g\u00e9n\u00e9rer automatiquement les images que je souhaite en d\u00e9finissant une image source et une image destination, tout en pouvant sp\u00e9cifier la transformation souhait\u00e9e ainsi que de nombreux autres param\u00e8tres.<\/p>\n<p><a href=\"\/whiler\/tag\/delphi\/\" title=\"Articles parlant de Delphi\">Delphi<\/a> proposant maintenant plein d&rsquo;effets de transition, il me suffisait d&rsquo;impl\u00e9menter une interface les utilisant et permettant de configurer ce dont j&rsquo;avais besoin&#8230;<br \/>\n<div id=\"attachment_5325\" style=\"width: 179px\" class=\"wp-caption aligncenter\"><a title=\"Animation en boucle\" href=\"\/whiler\/wp-content\/uploads\/2014\/03\/bootsamsungloop.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5325\" src=\"\/whiler\/wp-content\/uploads\/2014\/03\/bootsamsungloop.gif\" alt=\"Animation en boucle\" width=\"169\" height=\"300\" class=\"size-full wp-image-5325\" \/><\/a><p id=\"caption-attachment-5325\" class=\"wp-caption-text\">Animation en boucle<\/p><\/div><!--more--><\/p>\n<p>C&rsquo;est ainsi que j&rsquo;ai cr\u00e9\u00e9 <a href=\"https:\/\/www.whiler.com\/freewares\/download?wBootAnimationFramesGenerator.exe\" title=\"T\u00e9l\u00e9charger wBootAnimationFramesGenerator.exe\">wBootAnimationFramesGenerator<\/a>&nbsp;!<\/p>\n<p>L&rsquo;interface se d\u00e9compose en 3 parties principales&nbsp;:<\/p>\n<ul>\n<li>au centre, l&rsquo;image g\u00e9n\u00e9r\u00e9e souhait\u00e9e<\/li>\n<li>\u00e0 gauche, la s\u00e9lection des images et de la zone voulue<\/li>\n<li>\u00e0 droite, le nombre d&rsquo;images, les effets, la sauvegarde<\/li>\n<\/ul>\n<div id=\"attachment_5328\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a title=\"wBootAnimationFramesGenerator\" href=\"\/whiler\/wp-content\/uploads\/2014\/03\/wbootanimationframesgenerator.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5328\" src=\"\/whiler\/wp-content\/uploads\/2014\/03\/wbootanimationframesgenerator-300x224.png\" alt=\"wBootAnimationFramesGenerator\" width=\"300\" height=\"224\" class=\"size-medium wp-image-5328\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2014\/03\/wbootanimationframesgenerator-300x224.png 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2014\/03\/wbootanimationframesgenerator.png 898w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-5328\" class=\"wp-caption-text\">wBootAnimationFramesGenerator<\/p><\/div>\n<p>Si vous souhaitez tester cette application, celle-ci est disponible depuis ce lien&nbsp;: <a href=\"https:\/\/www.whiler.com\/freewares\/download?wBootAnimationFramesGenerator.exe\" title=\"T\u00e9l\u00e9charger wBootAnimationFramesGenerator.exe\">wBootAnimationFramesGenerator<\/a><br \/>\nVous la trouvez d\u00e9j\u00e0 sympa et des fonctionnalit\u00e9s particuli\u00e8res vous manquent&#8230; n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire&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;\" \/> <\/p>\n<p>De mon c\u00f4t\u00e9, j&rsquo;ai d\u00e9j\u00e0 remplac\u00e9 les fichiers <a class=\"fancybox iframe\" href=\"https:\/\/www.youtube.com\/embed\/j3L3wSkTHi8?autoplay=1&#038;loop=1\" title=\"bootsamsung.qmg\" rel=\"fancybox\"><em>bootsamsung.qmg<\/em><\/a>, <a class=\"fancybox iframe\" href=\"https:\/\/www.youtube.com\/embed\/X-ji1h5F9Go?autoplay=1&#038;loop=1\" title=\"bootsamsungloop.qmg\" rel=\"fancybox\"><em>bootsamsungloop.qmg<\/em><\/a> &#038; <a class=\"fancybox iframe\" href=\"https:\/\/www.youtube.com\/embed\/h1O2RspGUQw?autoplay=1&#038;loop=1\" title=\"shutdown.qmg\" rel=\"fancybox\"><em>shutdown.qmg<\/em><\/a> de mon dernier t\u00e9l\u00e9phone.  <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>Sur la <a href=\"\/whiler\/2014\/03\/23\/wbootanimationframesgenerator\/2\/\" title=\"Page suivante\">seconde page<\/a>, un extrait du code de l&rsquo;application, que j&rsquo;ai impl\u00e9ment\u00e9 pour effectuer diverses op\u00e9rations uniquement disponibles sous Windows. En effet, puisque l&rsquo;application est \u00e9crite en <a href=\"\/whiler\/tag\/firemonkey\/\" title=\"Articles parlant de FireMonkey\">FireMonkey<\/a>, je pourrais, si je le souhaitais, \u00e9galement la compiler pour Mac OS X. <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>&nbsp;<\/p>\n<blockquote><p><a href=\"https:\/\/www.whiler.com\/freewares\/download?wBootAnimationFramesGenerator.exe\" title=\"T\u00e9l\u00e9charger wBootAnimationFramesGenerator.exe\">wBootAnimationFramesGenerator<\/a> est d\u00e9velopp\u00e9 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<p>&nbsp;<br \/>\n<!--nextpage--><br \/>\nCe code permet de&nbsp;:<\/p>\n<ul>\n<li>r\u00e9cup\u00e9rer la dimension et la position de l&rsquo;\u00e9cran principal<\/li>\n<li>afficher une barre de progression sur le bouton de l&rsquo;application dans la barre des t\u00e2ches<\/li>\n<\/ul>\n<p>Je l&rsquo;ai impl\u00e9ment\u00e9 afin de pouvoir appeler ses fonctions quelque soit la plateforme sans avoir \u00e0 faire des <code class=\"codecolorer delphi dawn\"><span class=\"delphi\"><span class=\"co2\">{$IFDEF plateforme}...{$ENDIF}<\/span><\/span><\/code> dans le code principal de l&rsquo;application (d&rsquo;o\u00f9 les m\u00e9thodes vides).<\/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 \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">unit<\/span> uWindowsOnly<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n<span class=\"kw1\">uses<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">Windows<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">SysUtils<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Dialogs<\/span><span class=\"sy1\">,<\/span> System<span class=\"sy1\">.<\/span><span class=\"me1\">Win<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">ComObj<\/span><span class=\"sy1\">,<\/span> Winapi<span class=\"sy1\">.<\/span><span class=\"me1\">ShlObj<\/span><span class=\"sy1\">,<\/span> FMX<span class=\"sy1\">.<\/span><span class=\"me1\">Platform<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Win<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">const<\/span><br \/>\n&nbsp; TBPF_NOPROGRESS &nbsp; &nbsp;<span class=\"sy3\">=<\/span> &nbsp;<span class=\"nu0\">0<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; TBPF_INDETERMINATE <span class=\"sy3\">=<\/span> <span class=\"re0\">$1<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; TBPF_NORMAL &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy3\">=<\/span> <span class=\"re0\">$2<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; TBPF_ERROR &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy3\">=<\/span> <span class=\"re0\">$4<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; TBPF_PAUSED &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy3\">=<\/span> <span class=\"re0\">$8<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TTaskButton <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">private<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tbl <span class=\"sy1\">:<\/span> ITaskbarList<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; tbl3<span class=\"sy1\">:<\/span> ITaskbarList3<span class=\"sy1\">;<\/span> &nbsp;<span class=\"co1\">\/\/ Fournis de nombreuses fonctions suppl\u00e9mentaires<\/span><br \/>\n<span class=\"co2\">{$ENDIF}<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">public<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">constructor<\/span> Create<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> &nbsp; SetProgressState<span class=\"br0\">&#40;<\/span>handle<span class=\"sy1\">:<\/span> NativeUInt<span class=\"sy1\">;<\/span> state<span class=\"sy1\">:<\/span> <span class=\"kw4\">SmallInt<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">procedure<\/span> &nbsp; SetProgressValue<span class=\"br0\">&#40;<\/span>handle<span class=\"sy1\">:<\/span> NativeUInt<span class=\"sy1\">;<\/span> value<span class=\"sy1\">,<\/span> max<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/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\">function<\/span> PrimaryScreenLeft &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">function<\/span> PrimaryScreenWidth <span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">function<\/span> PrimaryScreenTop &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">function<\/span> PrimaryScreenHeight<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">implementation<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$region 'Taille du moniteur principal'}<\/span><br \/>\n<span class=\"kw1\">function<\/span> PrimaryScreenLeft<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> <span class=\"nu0\">0<\/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> PrimaryScreenTop<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> <span class=\"nu0\">0<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n<span class=\"kw1\">function<\/span> PrimaryScreenWidth<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_CXSCREEN<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> PrimaryScreenHeight<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\">{$ELSE}<\/span><br \/>\n<span class=\"kw1\">function<\/span> PrimaryScreenWidth<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> <span class=\"nu0\">0<\/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> PrimaryScreenHeight<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> <span class=\"nu0\">0<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF}<\/span><br \/>\n<span class=\"co2\">{$endregion}<\/span><br \/>\n<br \/>\n<span class=\"coMULTI\">{ TTaskButton }<\/span><br \/>\n<br \/>\n<span class=\"kw1\">constructor<\/span> TTaskButton<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Windows 7 or 8<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> CheckWin32Version<span class=\"br0\">&#40;<\/span><span class=\"nu0\">6<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">or<\/span> CheckWin32Version<span class=\"br0\">&#40;<\/span><span class=\"nu0\">6<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/ Cr\u00e9ation des objets n\u00e9cessaires<\/span><br \/>\n&nbsp; &nbsp; tbl <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> CreateComObject<span class=\"br0\">&#40;<\/span>CLSID_TaskbarList<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">as<\/span> ITaskbarList<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; tbl<span class=\"sy1\">.<\/span><span class=\"me1\">HrInit<\/span><span class=\"sy1\">;<\/span> &nbsp;<span class=\"co1\">\/\/ Initialisation<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">Supports<\/span><span class=\"br0\">&#40;<\/span>tbl<span class=\"sy1\">,<\/span> IID_ITaskbarList3<span class=\"sy1\">,<\/span> tbl3<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF}<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TTaskButton<span class=\"sy1\">.<\/span><span class=\"me1\">SetProgressState<\/span><span class=\"br0\">&#40;<\/span>handle<span class=\"sy1\">:<\/span> NativeUInt<span class=\"sy1\">;<\/span> state<span class=\"sy1\">:<\/span> <span class=\"kw4\">SmallInt<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">Assigned<\/span><span class=\"br0\">&#40;<\/span>tbl3<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; tbl3<span class=\"sy1\">.<\/span><span class=\"me1\">SetProgressState<\/span><span class=\"br0\">&#40;<\/span>FmxHandleToHWND<span class=\"br0\">&#40;<\/span>handle<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> state<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF}<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">procedure<\/span> TTaskButton<span class=\"sy1\">.<\/span><span class=\"me1\">SetProgressValue<\/span><span class=\"br0\">&#40;<\/span>handle<span class=\"sy1\">:<\/span> NativeUInt<span class=\"sy1\">;<\/span> value<span class=\"sy1\">,<\/span> max<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">Assigned<\/span><span class=\"br0\">&#40;<\/span>tbl3<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; tbl3<span class=\"sy1\">.<\/span><span class=\"me1\">SetProgressValue<\/span><span class=\"br0\">&#40;<\/span>FmxHandleToHWND<span class=\"br0\">&#40;<\/span>handle<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> value<span class=\"sy1\">,<\/span> max<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF}<\/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>&nbsp;<br \/>\nJ&rsquo;avais d\u00e9j\u00e0 r\u00e9dig\u00e9 un <a href=\"\/whiler\/2011\/06\/23\/delphi-taskbar-windows-7\/\" title=\"Maximiser l\u2019utilisation de la barre des t\u00e2ches de Windows 7 avec Delphi\">article concernant l&rsquo;utilisation des fonctionnalit\u00e9s li\u00e9es \u00e0 la barre des t\u00e2ches de Windows 7<\/a>.<br \/>\nDans le code ci-dessus, il n&rsquo;y a que deux diff\u00e9rences notables&nbsp;:<\/p>\n<ul>\n<li>En plus de Windows&nbsp;7, on teste \u00e9galement Windows&nbsp;8&nbsp;: <code class=\"codecolorer delphi dawn\"><span class=\"delphi\">CheckWin32Version<span class=\"br0\">&#40;<\/span><span class=\"nu0\">6<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#41;<\/span><\/span><\/code><\/li>\n<li>Le <em>Handle<\/em> \u00e0 utiliser pour les appels aux diff\u00e9rentes proc\u00e9dures n&rsquo;est plus directement <code class=\"codecolorer delphi dawn\"><span class=\"delphi\"><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Handle<\/span><\/span><\/code> mais <code class=\"codecolorer delphi dawn\"><span class=\"delphi\">FmxHandleToHWND<span class=\"br0\">&#40;<\/span><span class=\"kw2\">Self<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Handle<\/span><span class=\"br0\">&#41;<\/span><\/span><\/code> puisque le d\u00e9veloppement est bas\u00e9 sur le framework <a href=\"\/whiler\/tag\/firemonkey\/\" title=\"Articles parlant de FireMonkey\">FireMonkey<\/a>.<\/li>\n<\/ul>\n<p>Si vous avez des questions concernant le d\u00e9veloppement, l&rsquo;impl\u00e9mentation, n&rsquo;h\u00e9sitez pas en laissant un commentaire&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;\" \/> <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les ann\u00e9es passent, mais certaines habitudes restent\u2026 depuis que j\u2019ai des t\u00e9l\u00e9phones Android, je remplace syst\u00e9matiquement l\u2019animation pr\u00e9sente au d\u00e9marrage (et maintenant, celle de l\u2019extinction \u00e9galement).<\/p>\n<p>Habituellement, je cr\u00e9e les nombreuses et diff\u00e9rentes images (frames) qui vont composer l\u2019animation manuellement, avec un \u00e9diteur d\u2019images. Cette fois, je me suis d\u00e9cid\u00e9 \u00e0 coder une application me permettant de g\u00e9n\u00e9rer automatiquement les images que je souhaite en d\u00e9finissant une image source et une image destination, tout en pouvant sp\u00e9cifier la transformation souhait\u00e9e ainsi que de nombreux autres param\u00e8tres.<\/p>\n<p>Delphi proposant maintenant plein d\u2019effets de transition, il me suffisait d\u2019impl\u00e9menter une interface les utilisant et permettant de configurer ce dont j\u2019avais besoin\u2026<\/p>\n","protected":false},"author":2,"featured_media":5328,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[132,7],"tags":[158,27,154,146,93],"class_list":["post-5324","post","type-post","status-publish","format-standard","hentry","category-android","category-delphi","tag-android","tag-coloration-syntaxique","tag-delphi","tag-firemonkey","tag-freeware"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/5324","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=5324"}],"version-history":[{"count":1,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/5324\/revisions"}],"predecessor-version":[{"id":6325,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/5324\/revisions\/6325"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media\/5328"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=5324"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=5324"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=5324"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}