{"id":4041,"date":"2012-04-06T02:00:41","date_gmt":"2012-04-06T00:00:41","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=4041"},"modified":"2023-03-12T14:58:52","modified_gmt":"2023-03-12T13:58:52","slug":"fonctions-delphi","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2012\/04\/06\/fonctions-delphi\/","title":{"rendered":"Fonctions Delphi"},"content":{"rendered":"<p>R\u00e9guli\u00e8rement, je r\u00e9utilise les m\u00eames m\u00e9thodes parmi divers projets&#8230;<\/p>\n<p>J&rsquo;en ai regroup\u00e9 certaines d&rsquo;entre elles dans des unit\u00e9s que j&rsquo;utilise lorsque j&rsquo;en ai besoin, tandis que pour d&rsquo;autres qui me servent moins souvent, je me contente de faire un copier\/coller.<\/p>\n<p>Le plus dur, en g\u00e9n\u00e9ral, est de retrouver le projet o\u00f9 j&rsquo;en ai eu pr\u00e9c\u00e9demment besoin. <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/blush.gif\" alt=\":$\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p>Alors, tout comme j&rsquo;avais \u00e9crit 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 sur les boutons de la barre des t\u00e2ches sous Windows 7<\/a>, et qui m&rsquo;a encore servi pour <a href=\"\/whiler\/2012\/03\/22\/wtext2qr\/\" title=\"Article d\u00e9di\u00e9 \u00e0 wText2QR\">wText2QR<\/a>, je r\u00e9dige un article o\u00f9 je vais recenser certaines des fonctions que j&rsquo;utilise. Lorsque j&rsquo;arriverai \u00e0 retrouver la r\u00e9f\u00e9rence d&rsquo;une source, je l&rsquo;ajouterai. Je sp\u00e9cifie n\u00e9anmoins que la plupart ont \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9e de pages Web au fil du temps, lorsque j&rsquo;en ai eu pour la premi\u00e8re fois l&rsquo;utilit\u00e9, <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/bow.gif\" alt=\"(bow)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/>  et que je n&rsquo;en suis pas l&rsquo;auteur (j&rsquo;ai \u00e9ventuellement fait des modifications pour mes propres exigences).<\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2012\/04\/delphi-source.png\" alt=\"Source Delphi\" title=\"Source Delphi\" width=\"128\" height=\"128\" class=\"size-full wp-image-4047\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/04\/delphi-source.png 256w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2012\/04\/delphi-source-150x150.png 150w\" sizes=\"auto, (max-width: 128px) 100vw, 128px\" \/><\/center><\/p>\n<p><!--more--><\/p>\n<p>Par o\u00f9 commencer&#8230; <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/think.gif\" alt=\":?\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2010\/08\/stat_sys_warning_red.png\" alt=\"Attention !!!\" title=\"Attention !!!\" width=\"32\" height=\"32\" class=\"size-full wp-image-1503\" \/> Certains bouts de code sont clairement hardcod\u00e9s pour mes besoins&#8230; relisez bien les scripts si vous en copiez certains&nbsp;!<\/p>\n<p>C&rsquo;est par exemple le cas de cette unit\u00e9, que je me suis faite et qui fonctionne aussi bien sous Windows x86, x64 et Max OS X (VCL &#038; FireMonkey)&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 \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/>137<br \/>138<br \/>139<br \/>140<br \/>141<br \/>142<br \/>143<br \/>144<br \/>145<br \/>146<br \/>147<br \/>148<br \/>149<br \/>150<br \/>151<br \/>152<br \/>153<br \/>154<br \/>155<br \/>156<br \/>157<br \/>158<br \/>159<br \/>160<br \/>161<br \/>162<br \/>163<br \/>164<br \/>165<br \/>166<br \/>167<br \/>168<br \/>169<br \/>170<br \/>171<br \/>172<br \/>173<br \/>174<br \/>175<br \/>176<br \/>177<br \/>178<br \/>179<br \/>180<br \/>181<br \/>182<br \/>183<br \/>184<br \/>185<br \/>186<br \/>187<br \/>188<br \/>189<br \/>190<br \/>191<br \/>192<br \/>193<br \/>194<br \/>195<br \/>196<br \/>197<br \/>198<br \/>199<br \/>200<br \/>201<br \/>202<br \/>203<br \/>204<br \/>205<br \/>206<br \/>207<br \/>208<br \/>209<br \/>210<br \/>211<br \/>212<br \/>213<br \/>214<br \/>215<br \/>216<br \/>217<br \/>218<br \/>219<br \/>220<br \/>221<br \/>222<br \/>223<br \/>224<br \/>225<br \/>226<br \/>227<br \/>228<br \/>229<br \/>230<br \/>231<br \/>232<br \/>233<br \/>234<br \/>235<br \/>236<br \/>237<br \/>238<br \/>239<br \/>240<br \/>241<br \/>242<br \/>243<br \/>244<br \/>245<br \/>246<br \/>247<br \/>248<br \/>249<br \/>250<br \/>251<br \/>252<br \/>253<br \/>254<br \/>255<br \/>256<br \/>257<br \/>258<br \/>259<br \/>260<br \/>261<br \/>262<br \/>263<br \/>264<br \/>265<br \/>266<br \/>267<br \/>268<br \/>269<br \/>270<br \/>271<br \/>272<br \/>273<br \/>274<br \/>275<br \/>276<br \/>277<br \/>278<br \/>279<br \/>280<br \/>281<br \/>282<br \/>283<br \/>284<br \/>285<br \/>286<br \/>287<br \/>288<br \/>289<br \/>290<br \/>291<br \/>292<br \/>293<br \/>294<br \/>295<br \/>296<br \/>297<br \/>298<br \/>299<br \/>300<br \/>301<br \/>302<br \/>303<br \/>304<br \/>305<br \/>306<br \/>307<br \/>308<br \/>309<br \/>310<br \/>311<br \/>312<br \/>313<br \/>314<br \/>315<br \/>316<br \/>317<br \/>318<br \/>319<br \/>320<br \/>321<br \/>322<br \/>323<br \/>324<br \/>325<br \/>326<br \/>327<br \/>328<br \/>329<br \/>330<br \/>331<br \/>332<br \/>333<br \/>334<br \/>335<br \/>336<br \/>337<br \/>338<br \/>339<br \/>340<br \/>341<br \/>342<br \/>343<br \/>344<br \/>345<br \/>346<br \/>347<br \/>348<br \/>349<br \/>350<br \/>351<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"co1\">\/\/\/ &lt;summary&gt;<\/span><br \/>\n<span class=\"co1\">\/\/\/ &nbsp; Unit with cross-platforms methods<\/span><br \/>\n<span class=\"co1\">\/\/\/ &lt;\/summary&gt;<\/span><br \/>\n<span class=\"co1\">\/\/\/ &lt;remarks&gt;<\/span><br \/>\n<span class=\"co1\">\/\/\/ &nbsp; Currently works on Microsoft and Posix (OSX).<\/span><br \/>\n<span class=\"co1\">\/\/\/ &lt;\/remarks&gt;<\/span><br \/>\n<span class=\"kw1\">unit<\/span> uWxPlatform<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"kw1\">interface<\/span><br \/>\n<br \/>\n<span class=\"kw1\">uses<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; 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> ShlObj<span class=\"sy1\">,<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF POSIX}<\/span><br \/>\n&nbsp; Posix<span class=\"sy1\">.<\/span><span class=\"me1\">Stdlib<\/span><span class=\"sy1\">,<\/span><br \/>\n<span class=\"co2\">{$ENDIF POSIX}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">RegularExpressions<\/span><span class=\"sy1\">,<\/span> MacApi<span class=\"sy1\">.<\/span><span class=\"me1\">AppKit<\/span><span class=\"sy1\">,<\/span> MacApi<span class=\"sy1\">.<\/span><span class=\"me1\">Foundation<\/span><span class=\"sy1\">,<\/span> Macapi<span class=\"sy1\">.<\/span><span class=\"me1\">CocoaTypes<\/span><span class=\"sy1\">,<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/span><br \/>\n&nbsp; System<span class=\"sy1\">.<\/span><span class=\"me1\">SysUtils<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> NSBeep<span class=\"sy1\">;<\/span> <span class=\"kw1\">cdecl<\/span><span class=\"sy1\">;<\/span> &nbsp;<span class=\"kw1\">external<\/span> <span class=\"st0\">'\/System\/Library\/Frameworks\/AppKit.framework\/AppKit'<\/span> name <span class=\"st0\">'_NSBeep'<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">type<\/span><br \/>\n&nbsp; TFileVersionInfo <span class=\"sy3\">=<\/span> <span class=\"kw1\">record<\/span><br \/>\n&nbsp; &nbsp; fCompanyName<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fFileDescription<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fFileVersion<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fInternalName<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fLegalCopyRight<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fLegalTradeMark<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fOriginalFileName<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fProductName<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fProductVersion<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fComments &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fMajor<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fMinor<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fRelease<span class=\"sy1\">,<\/span><br \/>\n&nbsp; &nbsp; fBuild &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Word<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/\/ &lt;summary&gt;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/\/ &nbsp; The class which contains cross-platforms methods.<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/\/ &lt;\/summary&gt;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/\/ &lt;remarks&gt;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/\/ &nbsp; Procedures and functions are class methods when possible.<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/\/ &lt;\/remarks&gt;<\/span><br \/>\n&nbsp; TMisc <span class=\"sy3\">=<\/span> <span class=\"kw1\">class<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &lt;summary&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; To open the command.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &lt;\/summary&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &lt;param name=&quot;sCommand&quot;&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; Command which is opened in the shell\/DOS.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &lt;\/param&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &lt;remarks&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &lt;para&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &nbsp; Example :<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &lt;\/para&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &lt;para&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &nbsp; TMisc.Open('https:\/\/www.whiler.com\/');&lt;br \/&gt;It loads the URL in the default browser.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &lt;\/para&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &lt;para&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &nbsp; TMisc.Open('filename.txt');&lt;br \/&gt;It\u00a0opens the file &lt;i&gt;filename.txt&lt;\/i&gt; with the default text reader.<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &nbsp; &lt;\/para&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"co1\">\/\/\/ &lt;\/remarks&gt;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> Open<span class=\"br0\">&#40;<\/span>sCommand<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> Beep<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">function<\/span> &nbsp;BrowseForFolder<span class=\"br0\">&#40;<\/span><span class=\"kw1\">const<\/span> ATitle<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> ADir<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> GetAppVersionInfo<span class=\"br0\">&#40;<\/span>sAppNamePath<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> aFileVersionInfo<span class=\"sy1\">:<\/span> TFileVersionInfo<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;IsCtrlDown<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">class<\/span> <span class=\"kw1\">function<\/span> &nbsp;IsShiftDown<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">private<\/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=\"kw1\">var<\/span><br \/>\n&nbsp; lg_StartFolder<span class=\"sy1\">:<\/span> <span class=\"kw4\">String<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<br \/>\n<br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n<span class=\"kw1\">function<\/span> BrowseForFolderCallBack<span class=\"br0\">&#40;<\/span>Wnd<span class=\"sy1\">:<\/span> HWND<span class=\"sy1\">;<\/span> uMsg<span class=\"sy1\">:<\/span> UINT<span class=\"sy1\">;<\/span> lParam<span class=\"sy1\">,<\/span> lpData<span class=\"sy1\">:<\/span> LPARAM<span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span> <span class=\"kw1\">stdcall<\/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>uMsg <span class=\"sy3\">=<\/span> BFFM_INITIALIZED<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; SendMessage<span class=\"br0\">&#40;<\/span>Wnd<span class=\"sy1\">,<\/span> BFFM_SETSELECTION<span class=\"sy1\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy1\">,<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy2\">@<\/span>lg_StartFolder<span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">Sleep<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">500<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; PostMessage<span class=\"br0\">&#40;<\/span>Wnd<span class=\"sy1\">,<\/span> BFFM_SETSELECTION<span class=\"sy1\">,<\/span> <span class=\"nu0\">1<\/span><span class=\"sy1\">,<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy2\">@<\/span>lg_StartFolder<span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/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 MSWINDOWS}<\/span><br \/>\n<br \/>\n<span class=\"kw1\">class<\/span> <span class=\"kw1\">procedure<\/span> TMisc<span class=\"sy1\">.<\/span><span class=\"me1\">Open<\/span><span class=\"br0\">&#40;<\/span>sCommand<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/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; 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=\"kw4\">PChar<\/span><span class=\"br0\">&#40;<\/span>sCommand<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">,<\/span> SW_SHOWNORMAL<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF POSIX}<\/span><br \/>\n&nbsp; _system<span class=\"br0\">&#40;<\/span><span class=\"kw4\">PAnsiChar<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'open '<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw4\">AnsiString<\/span><span class=\"br0\">&#40;<\/span>sCommand<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF POSIX}<\/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> TMisc<span class=\"sy1\">.<\/span><span class=\"me1\">Beep<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; Beep<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n&nbsp; NSBeep<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/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> TMisc<span class=\"sy1\">.<\/span><span class=\"me1\">BrowseForFolder<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">const<\/span> ATitle<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> ADir<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; LOpenDir<span class=\"sy1\">:<\/span> NSOpenPanel<span class=\"sy1\">;<\/span><br \/>\n&nbsp; LInitialDir<span class=\"sy1\">:<\/span> NSURL<span class=\"sy1\">;<\/span><br \/>\n&nbsp; LDlgResult<span class=\"sy1\">:<\/span> NSInteger<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; LOpenDir <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TNSOpenPanel<span class=\"sy1\">.<\/span><span class=\"me1\">Wrap<\/span><span class=\"br0\">&#40;<\/span>TNSOpenPanel<span class=\"sy1\">.<\/span><span class=\"me1\">OCClass<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">openPanel<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">setAllowsMultipleSelection<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">False<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">setCanChooseFiles<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">False<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">setCanChooseDirectories<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">True<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>ADir &lt;&gt; <span class=\"st0\">''<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; LInitialDir <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TNSURL<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; LInitialDir<span class=\"sy1\">.<\/span><span class=\"me1\">initFileURLWithPath<\/span><span class=\"br0\">&#40;<\/span>NSSTR<span class=\"br0\">&#40;<\/span>ADir<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">setDirectoryURL<\/span><span class=\"br0\">&#40;<\/span>LInitialDir<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>ATitle &lt;&gt; <span class=\"st0\">''<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">setTitle<\/span><span class=\"br0\">&#40;<\/span>NSSTR<span class=\"br0\">&#40;<\/span>ATitle<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">retain<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; LDlgResult <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">runModal<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>LDlgResult <span class=\"sy3\">=<\/span> NSOKButton<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; ADir &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#40;<\/span>TNSUrl<span class=\"sy1\">.<\/span><span class=\"me1\">Wrap<\/span><span class=\"br0\">&#40;<\/span>LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">URLs<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">objectAtIndex<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">relativePath<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">UTF8String<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/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; LOpenDir<span class=\"sy1\">.<\/span><span class=\"me1\">release<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; browse_info <span class=\"sy1\">:<\/span> TBrowseInfo<span class=\"sy1\">;<\/span><br \/>\n&nbsp; folder &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw1\">array<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">..<\/span><span class=\"me1\">MAX_PATH<\/span><span class=\"br0\">&#93;<\/span> <span class=\"kw1\">of<\/span> <span class=\"kw4\">char<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; find_context<span class=\"sy1\">:<\/span> PItemIDList<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=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/--------------------------<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Initialise the structure.<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/--------------------------<\/span><br \/>\n&nbsp; <span class=\"kw3\">FillChar<\/span><span class=\"br0\">&#40;<\/span>browse_info<span class=\"sy1\">,<\/span><span class=\"kw3\">SizeOf<\/span><span class=\"br0\">&#40;<\/span>browse_info<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span><span class=\"re1\">#0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; lg_StartFolder &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> ADir<span class=\"sy1\">;<\/span><br \/>\n&nbsp; browse_info<span class=\"sy1\">.<\/span><span class=\"me1\">pszDisplayName<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"sy2\">@<\/span>folder<span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; browse_info<span class=\"sy1\">.<\/span><span class=\"me1\">lpszTitle<\/span> &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw4\">PChar<\/span><span class=\"br0\">&#40;<\/span>ATitle<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; browse_info<span class=\"sy1\">.<\/span><span class=\"me1\">ulFlags<\/span> &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> BIF_RETURNONLYFSDIRS <span class=\"kw1\">or<\/span> BIF_NEWDIALOGSTYLE<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co1\">\/\/ &nbsp;browse_info.hwndOwner := appHWND;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>ADir &lt;&gt; <span class=\"st0\">''<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; browse_info<span class=\"sy1\">.<\/span><span class=\"me1\">lpfn<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> BrowseForFolderCallBack<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; find_context <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> SHBrowseForFolder<span class=\"br0\">&#40;<\/span>browse_info<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">Assigned<\/span><span class=\"br0\">&#40;<\/span>find_context<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> SHGetPathFromIDList<span class=\"br0\">&#40;<\/span>find_context<span class=\"sy1\">,<\/span>folder<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; ADir &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> folder<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; ADir <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; GlobalFreePtr<span class=\"br0\">&#40;<\/span>find_context<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><br \/>\n&nbsp; &nbsp; ADir <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/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> TMisc<span class=\"sy1\">.<\/span><span class=\"me1\">GetAppVersionInfo<\/span><span class=\"br0\">&#40;<\/span>sAppNamePath<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span> <span class=\"kw1\">var<\/span> aFileVersionInfo<span class=\"sy1\">:<\/span> TFileVersionInfo<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; iVerSize &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; pcVerBuf &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">PChar<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; pVerBufValue <span class=\"sy1\">:<\/span> <span class=\"kw4\">Pointer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; iVerHandle &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Cardinal<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; iVerBufLen &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Cardinal<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sVerKey &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">function<\/span> GetInfo<span class=\"br0\">&#40;<\/span>ThisKey<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Result &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; sVerKey <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'\\StringFileInfo\\'<\/span> <span class=\"sy3\">+<\/span> <span class=\"kw3\">IntToHex<\/span><span class=\"br0\">&#40;<\/span>loword<span class=\"br0\">&#40;<\/span><span class=\"kw4\">integer<\/span><span class=\"br0\">&#40;<\/span>pVerBufValue<span class=\"sy2\">^<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">IntToHex<\/span><span class=\"br0\">&#40;<\/span>hiword<span class=\"br0\">&#40;<\/span><span class=\"kw4\">integer<\/span><span class=\"br0\">&#40;<\/span>pVerBufValue<span class=\"sy2\">^<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">4<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'\\'<\/span> <span class=\"sy3\">+<\/span> ThisKey<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> VerQueryValue<span class=\"br0\">&#40;<\/span>pcVerBuf<span class=\"sy1\">,<\/span> <span class=\"kw4\">PChar<\/span><span class=\"br0\">&#40;<\/span>sVerKey<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> pVerBufValue<span class=\"sy1\">,<\/span> iVerBufLen<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">StrPas<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw4\">PChar<\/span><span class=\"br0\">&#40;<\/span>pVerBufValue<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">function<\/span> QueryValue<span class=\"br0\">&#40;<\/span>ThisValue<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> GetFileVersionInfo<span class=\"br0\">&#40;<\/span><span class=\"kw4\">PChar<\/span><span class=\"br0\">&#40;<\/span>sAppNamePath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> iVerHandle<span class=\"sy1\">,<\/span> iVerSize<span class=\"sy1\">,<\/span> pcVerBuf<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">and<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; VerQueryValue<span class=\"br0\">&#40;<\/span>pcVerBuf<span class=\"sy1\">,<\/span> <span class=\"st0\">'\\VarFileInfo\\Translation'<\/span><span class=\"sy1\">,<\/span> pVerBufValue<span class=\"sy1\">,<\/span> iVerBufLen<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetInfo<span class=\"br0\">&#40;<\/span>ThisValue<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">function<\/span> <span class=\"kw3\">GetFileVersion<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw1\">const<\/span> FileName<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"co1\">\/\/ Returns True on success and False on failure.<\/span><br \/>\n&nbsp; <span class=\"kw1\">var<\/span><br \/>\n&nbsp; &nbsp; lwSize<span class=\"sy1\">,<\/span> lwLen <span class=\"sy1\">:<\/span> <span class=\"kw4\">LongWord<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; hFile &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Cardinal<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; pcBuffer &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">PChar<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; pInfo &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"sy2\">^<\/span>VS_FIXEDFILEINFO<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">False<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; lwSize <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetFileVersionInfoSize<span class=\"br0\">&#40;<\/span><span class=\"kw4\">PWideChar<\/span><span class=\"br0\">&#40;<\/span>FileName<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> hFile<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> lwSize &gt; <span class=\"nu0\">0<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw3\">GetMem<\/span><span class=\"br0\">&#40;<\/span>pcBuffer<span class=\"sy1\">,<\/span> lwSize<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> GetFileVersionInfo<span class=\"br0\">&#40;<\/span><span class=\"kw4\">Pointer<\/span><span class=\"br0\">&#40;<\/span>FileName<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> lwSize<span class=\"sy1\">,<\/span> pcBuffer<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> VerQueryValue<span class=\"br0\">&#40;<\/span>pcBuffer<span class=\"sy1\">,<\/span> <span class=\"st0\">'\\'<\/span><span class=\"sy1\">,<\/span> <span class=\"kw4\">pointer<\/span><span class=\"br0\">&#40;<\/span>pInfo<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> lwLen<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aFileVersionInfo<span class=\"sy1\">.<\/span><span class=\"me1\">fMajor<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> HiWord<span class=\"br0\">&#40;<\/span>pInfo<span class=\"sy1\">.<\/span><span class=\"me1\">dwFileVersionMS<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aFileVersionInfo<span class=\"sy1\">.<\/span><span class=\"me1\">fMinor<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LoWord<span class=\"br0\">&#40;<\/span>pInfo<span class=\"sy1\">.<\/span><span class=\"me1\">dwFileVersionMS<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aFileVersionInfo<span class=\"sy1\">.<\/span><span class=\"me1\">fRelease<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> HiWord<span class=\"br0\">&#40;<\/span>pInfo<span class=\"sy1\">.<\/span><span class=\"me1\">dwFileVersionLS<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aFileVersionInfo<span class=\"sy1\">.<\/span><span class=\"me1\">fBuild<\/span> &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LoWord<span class=\"br0\">&#40;<\/span>pInfo<span class=\"sy1\">.<\/span><span class=\"me1\">dwFileVersionLS<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw2\">True<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw3\">FreeMem<\/span><span class=\"br0\">&#40;<\/span>pcBuffer<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><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n&nbsp; sPlist &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sContent<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sLine &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; tf &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">TextFile<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">function<\/span> QueryValue<span class=\"br0\">&#40;<\/span>ThisValue<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">var<\/span><br \/>\n&nbsp; &nbsp; reSearch<span class=\"sy1\">:<\/span> TRegEx<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; mFound &nbsp;<span class=\"sy1\">:<\/span> TMatch<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Result &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; reSearch <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TRegEx<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'&lt;key&gt;'<\/span> <span class=\"sy3\">+<\/span> ThisValue <span class=\"sy3\">+<\/span> <span class=\"st0\">'&lt;\/key&gt;\\s*&lt;string&gt;([^&lt;]*)&lt;\/string&gt;'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; mFound &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> reSearch<span class=\"sy1\">.<\/span><span class=\"me1\">Match<\/span><span class=\"br0\">&#40;<\/span>sContent<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> mFound<span class=\"sy1\">.<\/span><span class=\"me1\">Success<\/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> mFound<span class=\"sy1\">.<\/span><span class=\"me1\">Groups<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">Value<\/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<span class=\"co2\">{$ENDIF MACOS}<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> sAppNamePath <span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; sAppNamePath <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">ParamStr<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n&nbsp; <span class=\"kw3\">GetFileVersion<\/span><span class=\"br0\">&#40;<\/span>sAppNamePath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; iVerSize <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> GetFileVersionInfoSize<span class=\"br0\">&#40;<\/span><span class=\"kw4\">PChar<\/span><span class=\"br0\">&#40;<\/span>sAppNamePath<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> iVerHandle<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; pcVerBuf <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">AllocMem<\/span><span class=\"br0\">&#40;<\/span>iVerSize<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">with<\/span> aFileVersionInfo <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fCompanyName &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'CompanyName'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fFileDescription &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'FileDescription'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fFileVersion &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'FileVersion'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fInternalName &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'InternalName'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fLegalCopyRight &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'LegalCopyRight'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fLegalTradeMark &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'LegalTradeMark'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fOriginalFileName <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'OriginalFileName'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fProductName &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'ProductName'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fProductVersion &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'ProductVersion'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; fComments &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'Comments'<\/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\">finally<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">FreeMem<\/span><span class=\"br0\">&#40;<\/span>pcVerBuf<span class=\"sy1\">,<\/span> iVerSize<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 MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n&nbsp; sContent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; sPlist &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">ExpandFileName<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">ExtractFilePath<\/span><span class=\"br0\">&#40;<\/span>sAppNamePath<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'\/..\/Info.plist'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">FileExists<\/span><span class=\"br0\">&#40;<\/span>sPlist<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">AssignFile<\/span><span class=\"br0\">&#40;<\/span>tf<span class=\"sy1\">,<\/span> sPlist<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">Reset<\/span><span class=\"br0\">&#40;<\/span>tf<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">while<\/span> <span class=\"kw1\">not<\/span> <span class=\"kw3\">Eof<\/span><span class=\"br0\">&#40;<\/span>tf<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw3\">ReadLn<\/span><span class=\"br0\">&#40;<\/span>tf<span class=\"sy1\">,<\/span> sLine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; sContent <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> sContent <span class=\"sy3\">+<\/span> sLine<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">CloseFile<\/span><span class=\"br0\">&#40;<\/span>tf<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">with<\/span> aFileVersionInfo <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; fCompanyName &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Whiler.com \u00a9'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fFileDescription &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fFileVersion &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'CFBundleVersion'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fInternalName &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'CFBundleExecutable'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fLegalCopyRight &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Whiler.com \u00a9'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fLegalTradeMark &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Whiler.com \u00a9'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fOriginalFileName <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'CFBundleDisplayName'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fProductName &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'CFBundleName'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fProductVersion &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> QueryValue<span class=\"br0\">&#40;<\/span><span class=\"st0\">'CFBundleVersion'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fComments &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">''<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/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> TMisc<span class=\"sy1\">.<\/span><span class=\"me1\">IsCtrlDown<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; ksCurrent <span class=\"sy1\">:<\/span> TKeyboardState<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; GetKeyboardState<span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#91;<\/span>VK_CONTROL<span class=\"br0\">&#93;<\/span> <span class=\"kw1\">and<\/span> <span class=\"nu0\">128<\/span><span class=\"br0\">&#41;<\/span> &lt;&gt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> NSControlKeyMask <span class=\"kw1\">and<\/span> TNSEvent<span class=\"sy1\">.<\/span><span class=\"me1\">OCClass<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">modifierFlags<\/span> <span class=\"sy3\">=<\/span> NSControlKeyMask<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/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> TMisc<span class=\"sy1\">.<\/span><span class=\"me1\">IsShiftDown<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$IFDEF MSWINDOWS}<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; ksCurrent <span class=\"sy1\">:<\/span> TKeyboardState<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; GetKeyboardState<span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#91;<\/span>VK_SHIFT<span class=\"br0\">&#93;<\/span> <span class=\"kw1\">and<\/span> <span class=\"nu0\">128<\/span><span class=\"br0\">&#41;<\/span> &lt;&gt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MSWINDOWS}<\/span><br \/>\n<span class=\"co2\">{$IFDEF MACOS}<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> NSShiftKeyMask <span class=\"kw1\">and<\/span> TNSEvent<span class=\"sy1\">.<\/span><span class=\"me1\">OCClass<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">modifierFlags<\/span> <span class=\"sy3\">=<\/span> NSShiftKeyMask<span class=\"sy1\">;<\/span><br \/>\n<span class=\"co2\">{$ENDIF MACOS}<\/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>J&rsquo;avais d\u00e9j\u00e0 publi\u00e9 une partie de ce code dans <a href=\"\/whiler\/2010\/11\/25\/recuperation-version-fichier\/\" title=\"R\u00e9cup\u00e9ration de la version d\u2019un fichier\">cet article<\/a>.<\/p>\n<p>Retrouvez d&rsquo;autres bouts de code sur la <a href=\"\/whiler\/2012\/04\/06\/fonctions-delphi\/2\/\" title=\"Visualiser la page suivante\">page suivante<\/a>&#8230;<br \/>\n<!--nextpage--><br \/>\nAvec la VCL, les couleurs (sans transparence) sont cod\u00e9es en Bleu-Vert-Rouge&#8230; Pour obtenir du Rouge-Vert-Bleu, une fonction qui inverse le rouge et le bleu (et donc utilisable dans les deux sens de conversion)&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><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 \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">function<\/span> SwitchRB<span class=\"br0\">&#40;<\/span>RGB<span class=\"sy1\">:<\/span> TColor<span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> TColor<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; R<span class=\"sy1\">,<\/span> G<span class=\"sy1\">,<\/span> B<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; R &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> &nbsp; RGB <span class=\"kw1\">div<\/span> <span class=\"re0\">$10000<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; G &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>RGB <span class=\"kw1\">mod<\/span> <span class=\"re0\">$10000<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">div<\/span> <span class=\"re0\">$100<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">shl<\/span> &nbsp;<span class=\"nu0\">8<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; B &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> &nbsp;<span class=\"br0\">&#40;<\/span>RGB <span class=\"kw1\">mod<\/span> <span class=\"re0\">$100<\/span> &nbsp;<span class=\"br0\">&#41;<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">shl<\/span> <span class=\"nu0\">16<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> R <span class=\"sy3\">+<\/span> G <span class=\"sy3\">+<\/span> B<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<br \/>\nPour tester si les touches <em>Contr\u00f4le<\/em> ou <em>Majuscule<\/em> sont enfonc\u00e9es&nbsp;:<\/p>\n<div class=\"codecolorer-container delphi dawn\" style=\"overflow:auto;white-space:nowrap;width:480px;\"><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 \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"co1\">\/\/ https:\/\/delphi.about.com\/cs\/adptips2000\/a\/bltip0400_3.htm<\/span><br \/>\n<span class=\"kw1\">function<\/span> isCtrlDown <span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; ksCurrent <span class=\"sy1\">:<\/span> TKeyboardState<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; GetKeyboardState<span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#91;<\/span>VK_CONTROL<span class=\"br0\">&#93;<\/span> <span class=\"kw1\">and<\/span> <span class=\"nu0\">128<\/span><span class=\"br0\">&#41;<\/span> &lt;&gt; <span class=\"nu0\">0<\/span><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> isShiftDown<span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; ksCurrent <span class=\"sy1\">:<\/span> TKeyboardState<span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; GetKeyboardState<span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>ksCurrent<span class=\"br0\">&#91;<\/span>VK_SHIFT<span class=\"br0\">&#93;<\/span> <span class=\"kw1\">and<\/span> <span class=\"nu0\">128<\/span><span class=\"br0\">&#41;<\/span> &lt;&gt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<br \/>\nPour effectuer une rotation d&rsquo;une image au format PNG&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 \/>120<br \/>121<br \/>122<br \/>123<br \/>124<br \/>125<br \/>126<br \/>127<br \/>128<br \/>129<br \/>130<br \/>131<br \/>132<br \/>133<br \/>134<br \/>135<br \/>136<br \/>137<br \/>138<br \/>139<br \/>140<br \/>141<br \/>142<br \/>143<br \/>144<br \/>145<br \/>146<br \/>147<br \/>148<br \/>149<br \/>150<br \/>151<br \/>152<br \/>153<br \/>154<br \/>155<br \/>156<br \/>157<br \/>158<br \/>159<br \/>160<br \/>161<br \/>162<br \/>163<br \/>164<br \/>165<br \/>166<br \/>167<br \/>168<br \/>169<br \/>170<br \/>171<br \/>172<br \/>173<br \/>174<br \/>175<br \/>176<br \/>177<br \/>178<br \/>179<br \/>180<br \/>181<br \/>182<br \/>183<br \/>184<br \/>185<br \/>186<br \/>187<br \/>188<br \/>189<br \/>190<br \/>191<br \/>192<br \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"co1\">\/\/ https:\/\/www.delphipraxis.net\/559330-post20.html (sans la fuite m\u00e9moire)<\/span><br \/>\n<span class=\"kw1\">procedure<\/span> SmoothRotate<span class=\"br0\">&#40;<\/span><span class=\"kw1\">var<\/span> aPng<span class=\"sy1\">:<\/span> TPngImage<span class=\"sy1\">;<\/span> Angle<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"coMULTI\">{Supporting functions: Inutile si on importe System.Math}<\/span><br \/>\n&nbsp; <span class=\"kw1\">function<\/span> TrimInt<span class=\"br0\">&#40;<\/span>i<span class=\"sy1\">,<\/span> Min<span class=\"sy1\">,<\/span> Max<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#40;<\/span>i &gt; Max<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Max<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>i &lt; Min<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Min<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> i<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">function<\/span> IntToByte<span class=\"br0\">&#40;<\/span>i<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Byte<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#40;<\/span>i &gt; <span class=\"nu0\">255<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">255<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>i &lt; <span class=\"nu0\">0<\/span> &nbsp;<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> i<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">function<\/span> <span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span>A<span class=\"sy1\">,<\/span> B<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>A &lt; B<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> A<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> B<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">function<\/span> <span class=\"kw3\">Max<\/span><span class=\"br0\">&#40;<\/span>A<span class=\"sy1\">,<\/span> B<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>A &gt; B<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span> Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> A<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">else<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> B<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">function<\/span> <span class=\"kw3\">Ceil<\/span><span class=\"br0\">&#40;<\/span>A<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; Result <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw4\">Integer<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Trunc<\/span><span class=\"br0\">&#40;<\/span>A<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw3\">Frac<\/span><span class=\"br0\">&#40;<\/span>A<span class=\"br0\">&#41;<\/span> &gt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw3\">Inc<\/span><span class=\"br0\">&#40;<\/span>Result<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&nbsp; <span class=\"coMULTI\">{Calculates the png new size}<\/span><br \/>\n&nbsp; <span class=\"kw1\">function<\/span> newsize<span class=\"sy1\">:<\/span> TSize<span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">var<\/span><br \/>\n&nbsp; &nbsp; fRadians &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fCosine<span class=\"sy1\">,<\/span> fSine &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint1x<span class=\"sy1\">,<\/span> fPoint1y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint2x<span class=\"sy1\">,<\/span> fPoint2y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint3x<span class=\"sy1\">,<\/span> fPoint3y<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fMinx<span class=\"sy1\">,<\/span> fMiny &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fMaxx<span class=\"sy1\">,<\/span> fMaxy &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{Convert degrees to radians}<\/span><br \/>\n&nbsp; &nbsp; fRadians <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"nu0\">2<\/span> <span class=\"sy3\">*<\/span> Pi <span class=\"sy3\">*<\/span> Angle<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">\/<\/span> <span class=\"nu0\">360<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; fCosine <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Abs<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Cos<\/span><span class=\"br0\">&#40;<\/span>fRadians<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fSine &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Abs<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">Sin<\/span><span class=\"br0\">&#40;<\/span>fRadians<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; fPoint1x <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span>aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">*<\/span> fSine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint1y <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">*<\/span> fCosine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint2x <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">*<\/span> fCosine <span class=\"sy3\">-<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">*<\/span> fSine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint2y <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">*<\/span> fCosine <span class=\"sy3\">+<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">*<\/span> fSine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint3x <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">*<\/span> fCosine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fPoint3y <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">*<\/span> fSine<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; fMinx <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span>fPoint1x<span class=\"sy1\">,<\/span> <span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span>fPoint2x<span class=\"sy1\">,<\/span> fPoint3x<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fMiny <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span>fPoint1y <span class=\"sy1\">,<\/span><span class=\"kw3\">Min<\/span><span class=\"br0\">&#40;<\/span>fPoint2y<span class=\"sy1\">,<\/span> fPoint3y<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fMaxx <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Max<\/span><span class=\"br0\">&#40;<\/span>fPoint1x<span class=\"sy1\">,<\/span> <span class=\"kw3\">Max<\/span><span class=\"br0\">&#40;<\/span>fPoint2x<span class=\"sy1\">,<\/span> fPoint3x<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; fMaxy <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Max<\/span><span class=\"br0\">&#40;<\/span>fPoint1y<span class=\"sy1\">,<\/span> <span class=\"kw3\">Max<\/span><span class=\"br0\">&#40;<\/span>fPoint2y<span class=\"sy1\">,<\/span> fPoint3y<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; Result<span class=\"sy1\">.<\/span><span class=\"me1\">cx<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Ceil<\/span><span class=\"br0\">&#40;<\/span>fMaxx <span class=\"sy3\">-<\/span> fMinx<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; Result<span class=\"sy1\">.<\/span><span class=\"me1\">cy<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Ceil<\/span><span class=\"br0\">&#40;<\/span>fMaxy <span class=\"sy3\">-<\/span> fMiny<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=\"kw1\">type<\/span><br \/>\n&nbsp; TFColor <span class=\"sy3\">=<\/span> <span class=\"kw1\">record<\/span><br \/>\n&nbsp; &nbsp; b<span class=\"sy1\">,<\/span> g<span class=\"sy1\">,<\/span> r<span class=\"sy1\">:<\/span><span class=\"kw4\">Byte<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; Top<span class=\"sy1\">,<\/span> Bottom<span class=\"sy1\">,<\/span> Left<span class=\"sy1\">,<\/span> Right<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; eww<span class=\"sy1\">,<\/span> nsw &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; fx<span class=\"sy1\">,<\/span> fy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; wx<span class=\"sy1\">,<\/span> wy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Extended<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; cAngle<span class=\"sy1\">,<\/span> sAngle &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Double<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; xDiff<span class=\"sy1\">,<\/span> yDiff &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; ifx<span class=\"sy1\">,<\/span> ify &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; px<span class=\"sy1\">,<\/span> py &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; ix<span class=\"sy1\">,<\/span> iy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; x<span class=\"sy1\">,<\/span> y &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; cx<span class=\"sy1\">,<\/span> cy &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; nw<span class=\"sy1\">,<\/span> ne<span class=\"sy1\">,<\/span> sw<span class=\"sy1\">,<\/span> se &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> TFColor<span class=\"sy1\">;<\/span><br \/>\n&nbsp; anw<span class=\"sy1\">,<\/span> ane<span class=\"sy1\">,<\/span> asw<span class=\"sy1\">,<\/span> ase &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">Byte<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; P1<span class=\"sy1\">,<\/span> P2<span class=\"sy1\">,<\/span> P3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">pByteArray<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; A1<span class=\"sy1\">,<\/span> A2<span class=\"sy1\">,<\/span> A3 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span> <span class=\"kw4\">pByteArray<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; dst &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> TPngImage<span class=\"sy1\">;<\/span><br \/>\n&nbsp; IsAlpha &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Boolean<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; new_colortype &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; anw <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; asw <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"coMULTI\">{Only allows RGB and RGBALPHA images}<\/span><br \/>\n&nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw1\">not<\/span> <span class=\"br0\">&#40;<\/span>apng<span class=\"sy1\">.<\/span><span class=\"me1\">Header<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">ColorType<\/span> <span class=\"kw1\">in<\/span> <span class=\"br0\">&#91;<\/span>COLOR_RGBALPHA<span class=\"sy1\">,<\/span> COLOR_RGB<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">raise<\/span> Exception<span class=\"sy1\">.<\/span><span class=\"me1\">Create<\/span><span class=\"br0\">&#40;<\/span>CAPTION_ROTATION_ERROR<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; IsAlpha <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> apng<span class=\"sy1\">.<\/span><span class=\"me1\">Header<\/span><span class=\"sy1\">.<\/span><span class=\"me1\">ColorType<\/span> <span class=\"kw1\">in<\/span> <span class=\"br0\">&#91;<\/span>COLOR_RGBALPHA<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> new_colortype <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> COLOR_RGBALPHA<br \/>\n&nbsp; <span class=\"kw1\">else<\/span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;new_colortype <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> COLOR_RGB<span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">with<\/span> newsize <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{Creates a copy}<\/span><br \/>\n&nbsp; &nbsp; dst <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TPngImage<span class=\"sy1\">.<\/span><span class=\"me1\">CreateBlank<\/span><span class=\"br0\">&#40;<\/span>new_colortype<span class=\"sy1\">,<\/span> <span class=\"nu0\">8<\/span><span class=\"sy1\">,<\/span> cx<span class=\"sy1\">,<\/span> cy<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">try<\/span><br \/>\n&nbsp; &nbsp; cx <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> dst<span class=\"sy1\">.<\/span><span class=\"me1\">width<\/span> &nbsp;<span class=\"kw1\">div<\/span> <span class=\"nu0\">2<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; cy <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> dst<span class=\"sy1\">.<\/span><span class=\"me1\">height<\/span> <span class=\"kw1\">div<\/span> <span class=\"nu0\">2<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{Gather some variables}<\/span><br \/>\n&nbsp; &nbsp; Angle &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> &nbsp;Angle<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; Angle &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"sy3\">-<\/span>Angle <span class=\"sy3\">*<\/span> Pi <span class=\"sy3\">\/<\/span> <span class=\"nu0\">180<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; sAngle <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Sin<\/span><span class=\"br0\">&#40;<\/span>Angle<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; cAngle <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Cos<\/span><span class=\"br0\">&#40;<\/span>Angle<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; xDiff &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span>Dst<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">-<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> <span class=\"br0\">&#41;<\/span> <span class=\"kw1\">div<\/span> <span class=\"nu0\">2<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; yDiff &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span>Dst<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">-<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">div<\/span> <span class=\"nu0\">2<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span class=\"coMULTI\">{Iterates over each line}<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> y <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span> <span class=\"kw1\">to<\/span> <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span>Dst<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; P3 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Dst<span class=\"sy1\">.<\/span><span class=\"me1\">scanline<\/span><span class=\"br0\">&#91;<\/span>y<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; A3 <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> Dst<span class=\"sy1\">.<\/span><span class=\"me1\">AlphaScanline<\/span><span class=\"br0\">&#91;<\/span>y<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; py <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>y <span class=\"sy3\">-<\/span> cy<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">{Iterates over each column}<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">for<\/span> x <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">0<\/span> <span class=\"kw1\">to<\/span> <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span>Dst<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">do<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; px &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>x <span class=\"sy3\">-<\/span> cx<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; fx &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>px <span class=\"sy3\">*<\/span> cAngle <span class=\"sy3\">-<\/span> py <span class=\"sy3\">*<\/span> sAngle<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">-<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">\/<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy3\">+<\/span> cx<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">-<\/span> xDiff<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; fy &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span>px <span class=\"sy3\">*<\/span> sAngle <span class=\"sy3\">+<\/span> py <span class=\"sy3\">*<\/span> cAngle<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">-<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy3\">\/<\/span> <span class=\"nu0\">2<\/span> <span class=\"sy3\">+<\/span> cy<span class=\"br0\">&#41;<\/span> <span class=\"sy3\">-<\/span> yDiff<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ifx <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>fx<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; ify <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>fy<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">{Only continues if it does not exceed image boundaries}<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">1<\/span> &lt; ifx<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">and<\/span> <span class=\"br0\">&#40;<\/span>ifx &lt; aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">and<\/span> <span class=\"br0\">&#40;<\/span><span class=\"sy3\">-<\/span><span class=\"nu0\">1<\/span> &lt; ify<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">and<\/span> <span class=\"br0\">&#40;<\/span>ify &lt; aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">{Obtains data to paint the new pixel}<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; eww <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> fx <span class=\"sy3\">-<\/span> ifx<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nsw <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> fy <span class=\"sy3\">-<\/span> ify<span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; iy &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TrimInt<span class=\"br0\">&#40;<\/span>ify <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Height<\/span> <span class=\"sy3\">-<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ix &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> TrimInt<span class=\"br0\">&#40;<\/span>ifx <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"sy1\">,<\/span> <span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Width<\/span> &nbsp;<span class=\"sy3\">-<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; P1 &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Scanline<\/span><span class=\"br0\">&#91;<\/span>ify<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; P2 &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Scanline<\/span><span class=\"br0\">&#91;<\/span>iy<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> A1 &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">AlphaScanline<\/span><span class=\"br0\">&#91;<\/span>ify<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> A2 &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> aPng<span class=\"sy1\">.<\/span><span class=\"me1\">AlphaScanline<\/span><span class=\"br0\">&#91;<\/span>iy<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nw<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P1<span class=\"br0\">&#91;<\/span>ifx <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nw<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P1<span class=\"br0\">&#91;<\/span>ifx <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; nw<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P1<span class=\"br0\">&#91;<\/span>ifx <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> anw <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> A1<span class=\"br0\">&#91;<\/span>ifx<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ne<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P1<span class=\"br0\">&#91;<\/span>ix <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ne<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P1<span class=\"br0\">&#91;<\/span>ix <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ne<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P1<span class=\"br0\">&#91;<\/span>ix <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> ane <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> A1<span class=\"br0\">&#91;<\/span>ix<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sw<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P2<span class=\"br0\">&#91;<\/span>ifx <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sw<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P2<span class=\"br0\">&#91;<\/span>ifx <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sw<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P2<span class=\"br0\">&#91;<\/span>ifx <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> asw <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> A2<span class=\"br0\">&#91;<\/span>ifx<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; se<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P2<span class=\"br0\">&#91;<\/span>ix <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; se<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P2<span class=\"br0\">&#91;<\/span>ix <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; se<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> P2<span class=\"br0\">&#91;<\/span>ix <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span> ase <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> A2<span class=\"br0\">&#91;<\/span>ix<span class=\"br0\">&#93;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">{Defines the new pixel}<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Top &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> nw<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy3\">+<\/span>eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>ne<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy3\">-<\/span> nw<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bottom &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> sw<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy3\">+<\/span>eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>se<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span> <span class=\"sy3\">-<\/span> sw<span class=\"sy1\">.<\/span><span class=\"me1\">b<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; P3<span class=\"br0\">&#91;<\/span>x <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">2<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> IntToByte<span class=\"br0\">&#40;<\/span><span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>Top <span class=\"sy3\">+<\/span> nsw <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>Bottom <span class=\"sy3\">-<\/span> Top<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Top &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> nw<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy3\">+<\/span> eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>ne<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy3\">-<\/span> nw<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bottom &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> sw<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy3\">+<\/span> eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>se<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span> <span class=\"sy3\">-<\/span> sw<span class=\"sy1\">.<\/span><span class=\"me1\">g<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; P3<span class=\"br0\">&#91;<\/span>x <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span> <span class=\"sy3\">+<\/span> <span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> IntToByte<span class=\"br0\">&#40;<\/span><span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>Top <span class=\"sy3\">+<\/span> nsw <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>Bottom <span class=\"sy3\">-<\/span> Top<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Top &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> nw<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy3\">+<\/span> eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>ne<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy3\">-<\/span> nw<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bottom &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> sw<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy3\">+<\/span> eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>se<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span> <span class=\"sy3\">-<\/span> sw<span class=\"sy1\">.<\/span><span class=\"me1\">r<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; P3<span class=\"br0\">&#91;<\/span>x <span class=\"sy3\">*<\/span> <span class=\"nu0\">3<\/span><span class=\"br0\">&#93;<\/span> &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> IntToByte<span class=\"br0\">&#40;<\/span><span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>Top <span class=\"sy3\">+<\/span> nsw <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>Bottom <span class=\"sy3\">-<\/span> Top<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; &nbsp; &nbsp; &nbsp; <span class=\"coMULTI\">{Only for alpha}<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> IsAlpha <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Top &nbsp; &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> anw <span class=\"sy3\">+<\/span> eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>ane <span class=\"sy3\">-<\/span> anw<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Bottom <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> asw <span class=\"sy3\">+<\/span> eww <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>ase <span class=\"sy3\">-<\/span> asw<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A3<span class=\"br0\">&#91;<\/span>x<span class=\"br0\">&#93;<\/span> &nbsp;<span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> IntToByte<span class=\"br0\">&#40;<\/span><span class=\"kw3\">Round<\/span><span class=\"br0\">&#40;<\/span>Top <span class=\"sy3\">+<\/span> nsw <span class=\"sy3\">*<\/span> <span class=\"br0\">&#40;<\/span>Bottom <span class=\"sy3\">-<\/span> Top<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/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<br \/>\n&nbsp; &nbsp; aPng<span class=\"sy1\">.<\/span><span class=\"me1\">Assign<\/span><span class=\"br0\">&#40;<\/span>dst<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">finally<\/span><br \/>\n&nbsp; &nbsp; dst<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><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>&nbsp;<br \/>\nPour jouer un fichier WAV qui est inclus dans les ressources&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 \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">procedure<\/span> TfrmCapture<span class=\"sy1\">.<\/span><span class=\"me1\">PlaySound<\/span><span class=\"br0\">&#40;<\/span>sSound<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; hFind<span class=\"sy1\">,<\/span> hRes<span class=\"sy1\">:<\/span> <span class=\"kw4\">THandle<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; Song &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> <span class=\"kw4\">PChar<\/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>sSound&lt;&gt; <span class=\"st0\">''<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; hFind <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> FindResource<span class=\"br0\">&#40;<\/span>HInstance<span class=\"sy1\">,<\/span> <span class=\"kw4\">PWideChar<\/span><span class=\"br0\">&#40;<\/span>sSound<span class=\"br0\">&#41;<\/span><span class=\"sy1\">,<\/span> <span class=\"st0\">'WAVE'<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>hFind &lt;&gt; <span class=\"nu0\">0<\/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; hRes <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LoadResource<span class=\"br0\">&#40;<\/span>HInstance<span class=\"sy1\">,<\/span> hFind<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>hRes &lt;&gt; <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Song <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> LockResource<span class=\"br0\">&#40;<\/span>hRes<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">Assigned<\/span><span class=\"br0\">&#40;<\/span>Song<span class=\"br0\">&#41;<\/span> <span class=\"kw1\">then<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SndPlaySound<span class=\"br0\">&#40;<\/span>Song<span class=\"sy1\">,<\/span> snd_ASync <span class=\"kw1\">or<\/span> snd_Memory<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; UnlockResource<span class=\"br0\">&#40;<\/span>hRes<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; FreeResource<span class=\"br0\">&#40;<\/span>hFind<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><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>La liste est tr\u00e8s loin d&rsquo;\u00eatre exhaustive&#8230; mais c&rsquo;est d\u00e9j\u00e0 un bon d\u00e9but <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/smile.gif\" alt=\":)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><\/p>\n<p>Si vous voyez des erreurs \u00e0 corriger, des optimisations qui pourraient \u00eatre faites, n&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire <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>R\u00e9guli\u00e8rement, je r\u00e9utilise les m\u00eames m\u00e9thodes parmi divers projets\u2026<\/p>\n<p>J\u2019en ai regroup\u00e9 certaines d\u2019entre elles dans des unit\u00e9s que j\u2019utilise lorsque j\u2019en ai besoin, tandis que pour d\u2019autres qui me servent moins souvent, je me contente de faire un copier\/coller.<\/p>\n<p>Le plus dur, en g\u00e9n\u00e9ral, est de retrouver le projet o\u00f9 j\u2019en ai eu pr\u00e9c\u00e9demment besoin.<\/p>\n<p>Alors, tout comme j\u2019avais \u00e9crit un article sur les boutons de la barre des t\u00e2ches sous Windows 7, et qui m\u2019a encore servi pour wText2QR, je r\u00e9dige un article o\u00f9 je vais recenser certaines des fonctions que j\u2019utilise. Lorsque j\u2019arriverai \u00e0 retrouver la r\u00e9f\u00e9rence d\u2019une source, je l\u2019ajouterai. Je sp\u00e9cifie n\u00e9anmoins que la plupart ont \u00e9t\u00e9 r\u00e9cup\u00e9r\u00e9e de pages Web au fil du temps, lorsque j\u2019en ai eu pour la premi\u00e8re fois l\u2019utilit\u00e9 et que je n\u2019en suis pas l\u2019auteur (j\u2019ai \u00e9ventuellement fait des modifications pour mes propres exigences).<\/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],"tags":[27,154,146,108,151],"class_list":["post-4041","post","type-post","status-publish","format-standard","hentry","category-delphi","tag-coloration-syntaxique","tag-delphi","tag-firemonkey","tag-script","tag-windows-7"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/4041","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=4041"}],"version-history":[{"count":1,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/4041\/revisions"}],"predecessor-version":[{"id":6365,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/4041\/revisions\/6365"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=4041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=4041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=4041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}