{"id":2230,"date":"2011-06-13T13:00:55","date_gmt":"2011-06-13T11:00:55","guid":{"rendered":"http:\/\/blogs.wittwer.fr\/whiler\/?p=2230"},"modified":"2023-03-12T15:00:19","modified_gmt":"2023-03-12T14:00:19","slug":"delphi2android","status":"publish","type":"post","link":"https:\/\/blogs.wittwer.fr\/whiler\/2011\/06\/13\/delphi2android\/","title":{"rendered":"Delphi to Android"},"content":{"rendered":"<p>Dans un <a href=\"\/whiler\/2010\/08\/13\/firefox2android\/\">ancien article<\/a>, j&rsquo;avais parl\u00e9 de l&rsquo;application <a href=\"https:\/\/code.google.com\/p\/chrometophone\/\" target=\"_blank\" rel=\"noopener\">Chrome To Phone<\/a> qui permet d&rsquo;envoyer des liens, num\u00e9ros de t\u00e9l\u00e9phone, &#8230;, depuis le navigateur de son ordinateur vers son t\u00e9l\u00e9phone Android.<\/p>\n<p>Si mon <a href=\"https:\/\/www.mozilla.com\/fr\/firefox\/\" target=\"_blank\" rel=\"noopener\">Firefox<\/a> peut envoyer un message \u00e0 mon t\u00e9l\u00e9phone, mon <a href=\"https:\/\/www.embarcadero.com\/fr\/products\/delphi\" target=\"_blank\" rel=\"noopener\">Delphi<\/a> doit donc aussi pouvoir le faire&nbsp;!<br \/>\nDe plus, le <a href=\"https:\/\/code.google.com\/p\/chrometophone\/source\/checkout\" target=\"_blank\" rel=\"noopener\">projet Chrome To Phone<\/a> \u00e9tant <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Open_source\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: Open source\" style=\"\" >Open source<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup>, je peux non seulement trouver des informations utiles dans le code, mais \u00e9galement modifier l&rsquo;application c\u00f4t\u00e9 t\u00e9l\u00e9phone avec le <a href=\"https:\/\/developer.android.com\/sdk\/index.html\" target=\"_blank\" rel=\"noopener\">SDK d&rsquo;Android<\/a> pour impl\u00e9menter les fonctionnalit\u00e9s de mon choix.<\/p>\n<p>Je n&rsquo;ai pas cod\u00e9 l&rsquo;int\u00e9gralit\u00e9 des va-et-vient entre mon application Delphi et les serveurs, de Google, j&rsquo;ai simplement utilis\u00e9 un <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/SHDocVw.TWebBrowser\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">TWebBrowser<\/span><\/code><\/a> pour permettre \u00e0 l&rsquo;utilisateur de s&rsquo;authentifier lui-m\u00eame&#8230;<br \/>\n<!--more--><\/p>\n<p>On cr\u00e9e une nouvelle application fiche, sur laquelle on ajoute les composants suivants&nbsp;:<\/p>\n<ul>\n<li>un <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/SHDocVw.TWebBrowser\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">TWebBrowser<\/span><\/code><\/a>, wbSend2Phone<\/li>\n<li>2 <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/StdCtrls.TButton\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">TButton<\/span><\/code><\/a>, btnConnect &amp; btnSend<\/li>\n<li>3 <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/en\/ExtCtrls.TLabeledEdit\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">TLabeledEdit<\/span><\/code><\/a>, lbledURL, lbledTitle &amp; lbledSel<\/li>\n<\/ul>\n<p>L&rsquo;interface peut ressembler \u00e0 ceci&nbsp;:<\/p>\n<div id=\"attachment_2254\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/06\/design.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2254\" src=\"\/whiler\/wp-content\/uploads\/2011\/06\/design-300x172.jpg\" alt=\"Interface de la fiche\" title=\"Interface de la fiche\" width=\"300\" height=\"172\" class=\"size-medium wp-image-2254\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/06\/design-300x172.jpg 300w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/06\/design.jpg 651w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-2254\" class=\"wp-caption-text\">Interface de la fiche<\/p><\/div>\n<p>Il ne reste plus qu&rsquo;\u00e0 coder les quelques \u00e9v\u00e9nements n\u00e9cessaires <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<h3>La connexion<\/h3>\n<p>Elle permet \u00e0 l&rsquo;utilisateur de donner son autorisation au service de Chrome To Phone pour l&rsquo;envoie des messages li\u00e9 \u00e0 un compte Google. Pour obtenir le <a href=\"http:\/\/fr.wikipedia.org\/wiki\/Cookie_(informatique)\" rel=\"glossary\" target=\"_blank\" title=\"Wikipedia, D&eacute;finition de&nbsp;: cookie\" style=\"\" >cookie<\/a><sup style=\"font-family: Georgia, Times New Roman, Serif; font-weight: bold; color: #AAAAAA\" ><em>W<\/em><\/sup> n\u00e9cessaire, on ajoute un \u00e9v\u00e9nement <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/StdCtrls.TButton.OnClick\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">OnClick<\/span><\/code><\/a> sur le bouton btnConnect&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 \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">btnConnectClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">begin<\/span><br \/>\n&nbsp; wbSend2Phone<span class=\"sy1\">.<\/span><span class=\"me1\">Navigate<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">'https:\/\/chrometophone.appspot.com\/signin?extret=about%3Ablank&amp;ver=5'<\/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>En fonction des cookies d\u00e9j\u00e0 pr\u00e9sents sur votre disque, le nombre d&rsquo;\u00e9tapes peut varier. Si vous avez donn\u00e9 l&rsquo;autorisation, vous devriez finalement atterrir sur une Page Web introuvable&#8230; C&rsquo;est normal  <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/happy.gif\" alt=\"(lol)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> , l&rsquo;adresse de redirection incluse dans l&rsquo;URL appel\u00e9e ne fonctionne pas&#8230; Cependant, vous devriez avoir r\u00e9cup\u00e9r\u00e9 le cookie n\u00e9cessaire pour l&rsquo;\u00e9tape suivante.<br \/>\nVous pouvez v\u00e9rifier sa pr\u00e9sence dans le r\u00e9pertoire de vos cookies, il devrait avoir un nom du type&nbsp;: <em>utilisateur<\/em>@chrometophone.appspot[<em>x<\/em>].txt<br \/>\nCe fichier devrait contenir un cookie nomm\u00e9 <strong>SACSID<\/strong>.<br \/>\nVous pourrez \u00e9galement coder des \u00e9v\u00e9nements du <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/SHDocVw.TWebBrowser\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">TWebBrowser<\/span><\/code><\/a> pour v\u00e9rifier que vous \u00eates bien arriv\u00e9 sur la page escompt\u00e9e&nbsp;; sur le <a href=\"https:\/\/docwiki.embarcadero.com\/VCL\/fr\/SHDocVw.TWebBrowser.OnDocumentComplete\" target=\"_blank\" rel=\"noopener\"><code class=\"codecolorer delphi dawn\"><span class=\"delphi\">OnDocumentComplete<\/span><\/code><\/a> par exemple  <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<h3>L&rsquo;envoie d&rsquo;un message<\/h3>\n<p>Lors de l&rsquo;envoie, trois param\u00e8tres sont \u00e0 d\u00e9finir&nbsp;:<\/p>\n<ul>\n<li>le lien que l&rsquo;on souhaite envoy\u00e9<\/li>\n<li>le titre de ce lien<\/li>\n<li>le texte s\u00e9lectionn\u00e9<\/li>\n<\/ul>\n<p>Par d\u00e9faut, l&rsquo;application du t\u00e9l\u00e9phone va v\u00e9rifier s&rsquo;il s&rsquo;agit d&rsquo;un num\u00e9ro de t\u00e9l\u00e9phone, du contenu d&rsquo;un presse-papier, ou d&rsquo;un lien&nbsp;:<\/p>\n<div class=\"codecolorer-container java 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 \/><\/div><\/td><td><div class=\"java codecolorer\">&nbsp; &nbsp; <span class=\"kw1\">public<\/span> <span class=\"kw1\">static<\/span> Intent getLaunchIntent<span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+context\"><span class=\"kw3\">Context<\/span><\/a> context, <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> title, <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> url, <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> sel<span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Intent intent <span class=\"sy0\">=<\/span> <span class=\"kw2\">null<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+string\"><span class=\"kw3\">String<\/span><\/a> number <span class=\"sy0\">=<\/span> parseTelephoneNumber<span class=\"br0\">&#40;<\/span>sel<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>number <span class=\"sy0\">!=<\/span> <span class=\"kw2\">null<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Intent<span class=\"br0\">&#40;<\/span>Intent.<span class=\"me1\">ACTION_DIAL<\/span>,<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Uri.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;tel:&quot;<\/span> <span class=\"sy0\">+<\/span> number<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent.<span class=\"me1\">setFlags<\/span><span class=\"br0\">&#40;<\/span>Intent.<span class=\"me1\">FLAG_ACTIVITY_NEW_TASK<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ClipboardManager cm <span class=\"sy0\">=<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span>ClipboardManager<span class=\"br0\">&#41;<\/span> context.<span class=\"me1\">getSystemService<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+context\"><span class=\"kw3\">Context<\/span><\/a>.<span class=\"me1\">CLIPBOARD_SERVICE<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cm.<span class=\"me1\">setText<\/span><span class=\"br0\">&#40;<\/span>number<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>sel <span class=\"sy0\">!=<\/span> <span class=\"kw2\">null<\/span> <span class=\"sy0\">&amp;&amp;<\/span> sel.<span class=\"me1\">length<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">&gt;<\/span> <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ No intent for selection - just copy to clipboard<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ClipboardManager cm <span class=\"sy0\">=<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#40;<\/span>ClipboardManager<span class=\"br0\">&#41;<\/span> context.<span class=\"me1\">getSystemService<\/span><span class=\"br0\">&#40;<\/span><a href=\"http:\/\/www.google.com\/search?hl=en&amp;q=allinurl%3Adocs.oracle.com+javase+docs+api+context\"><span class=\"kw3\">Context<\/span><\/a>.<span class=\"me1\">CLIPBOARD_SERVICE<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cm.<span class=\"me1\">setText<\/span><span class=\"br0\">&#40;<\/span>sel<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span> <span class=\"kw1\">else<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Intent<span class=\"br0\">&#40;<\/span>Intent.<span class=\"me1\">ACTION_VIEW<\/span>, Uri.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span>url<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent.<span class=\"me1\">setFlags<\/span><span class=\"br0\">&#40;<\/span>Intent.<span class=\"me1\">FLAG_ACTIVITY_NEW_TASK<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>isMapsURL<span class=\"br0\">&#40;<\/span>url<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent.<span class=\"me1\">setClassName<\/span><span class=\"br0\">&#40;<\/span>GMM_PACKAGE_NAME, GMM_CLASS_NAME<span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"co1\">\/\/ Fall back if we can't resolve intent (i.e. app missing)<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; PackageManager pm <span class=\"sy0\">=<\/span> context.<span class=\"me1\">getPackageManager<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span><span class=\"kw2\">null<\/span> <span class=\"sy0\">==<\/span> intent.<span class=\"me1\">resolveActivity<\/span><span class=\"br0\">&#40;<\/span>pm<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent <span class=\"sy0\">=<\/span> <span class=\"kw1\">new<\/span> Intent<span class=\"br0\">&#40;<\/span>Intent.<span class=\"me1\">ACTION_VIEW<\/span>, Uri.<span class=\"me1\">parse<\/span><span class=\"br0\">&#40;<\/span>url<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; intent.<span class=\"me1\">setFlags<\/span><span class=\"br0\">&#40;<\/span>Intent.<span class=\"me1\">FLAG_ACTIVITY_NEW_TASK<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">return<\/span> intent<span class=\"sy0\">;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Nous allons donc lui passer les 3 param\u00e8tres attendus en ajoutant un \u00e9v\u00e9nement OnClick sur le second bouton&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 \/><\/div><\/td><td><div class=\"delphi codecolorer\"><span class=\"kw1\">procedure<\/span> TfrmMain<span class=\"sy1\">.<\/span><span class=\"me1\">btnSendClick<\/span><span class=\"br0\">&#40;<\/span>Sender<span class=\"sy1\">:<\/span> <span class=\"kw4\">TObject<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<span class=\"kw1\">var<\/span><br \/>\n&nbsp; sEncodedData<span class=\"sy1\">:<\/span> <span class=\"kw4\">string<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; ovURL &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span> OleVariant<span class=\"sy1\">;<\/span><br \/>\n&nbsp; ovPostData &nbsp;<span class=\"sy1\">:<\/span> OleVariant<span class=\"sy1\">;<\/span><br \/>\n&nbsp; ovHeaders &nbsp; <span class=\"sy1\">:<\/span> OleVariant<span class=\"sy1\">;<\/span><br \/>\n&nbsp; iLoop<span class=\"sy1\">,<\/span> iMax <span class=\"sy1\">:<\/span> <span class=\"kw4\">Integer<\/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>lbledtURL<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span> <span class=\"sy3\">=<\/span> <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; lbledtURL<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'https:\/\/blogs.wittwer.fr\/whiler\/2011\/06\/13\/delphi2android\/'<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; sEncodedData <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw4\">string<\/span><span class=\"br0\">&#40;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"st0\">'url='<\/span> &nbsp; <span class=\"sy3\">+<\/span> HTTPEncode<span class=\"br0\">&#40;<\/span><span class=\"kw4\">AnsiString<\/span><span class=\"br0\">&#40;<\/span>lbledtURL<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy3\">+<\/span> <span class=\"st0\">'&amp;'<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'title='<\/span> <span class=\"sy3\">+<\/span> HTTPEncode<span class=\"br0\">&#40;<\/span><span class=\"kw4\">AnsiString<\/span><span class=\"br0\">&#40;<\/span>lbledtTitle<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy3\">+<\/span> <span class=\"st0\">'&amp;'<\/span> <span class=\"sy3\">+<\/span> <span class=\"st0\">'sel='<\/span> &nbsp; <span class=\"sy3\">+<\/span> HTTPEncode<span class=\"br0\">&#40;<\/span><span class=\"kw4\">AnsiString<\/span><span class=\"br0\">&#40;<\/span>lbledtSel<span class=\"sy1\">.<\/span><span class=\"me1\">Text<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; iMax &nbsp; &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Length<\/span><span class=\"br0\">&#40;<\/span>sEncodedData<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; ovPostData <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> VarArrayCreate<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"sy1\">,<\/span> <span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span>iMax<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span><span class=\"sy1\">,<\/span> varByte<span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; <span class=\"kw1\">for<\/span> iLoop <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"nu0\">1<\/span> <span class=\"kw1\">to<\/span> iMax <span class=\"kw1\">do<\/span><br \/>\n&nbsp; <span class=\"kw1\">begin<\/span><br \/>\n&nbsp; &nbsp; ovPostData<span class=\"br0\">&#91;<\/span><span class=\"kw3\">Pred<\/span><span class=\"br0\">&#40;<\/span>iLoop<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#93;<\/span> <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"kw3\">Ord<\/span><span class=\"br0\">&#40;<\/span>sEncodedData<span class=\"br0\">&#91;<\/span>iLoop<span class=\"br0\">&#93;<\/span><span class=\"br0\">&#41;<\/span><span class=\"sy1\">;<\/span><br \/>\n&nbsp; <span class=\"kw1\">end<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; ovHeaders <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'Accept: *.*'<\/span><span class=\"re1\">#13<\/span><span class=\"re1\">#10<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy3\">+<\/span> <span class=\"st0\">'Content-type: application\/x-www-form-urlencoded;'<\/span><span class=\"re1\">#10<\/span><span class=\"re1\">#13<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class=\"sy3\">+<\/span> <span class=\"st0\">'X-Same-Domain: true'<\/span><span class=\"re1\">#10<\/span><span class=\"re1\">#13<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; ovURL &nbsp; &nbsp; <span class=\"sy1\">:<\/span><span class=\"sy3\">=<\/span> <span class=\"st0\">'https:\/\/chrometophone.appspot.com\/send?ver=4'<\/span><span class=\"sy1\">;<\/span><br \/>\n<br \/>\n&nbsp; wbSend2Phone<span class=\"sy1\">.<\/span><span class=\"me1\">Navigate<\/span><span class=\"br0\">&#40;<\/span>ovURL<span class=\"sy1\">,<\/span> EmptyParam<span class=\"sy1\">,<\/span> EmptyParam<span class=\"sy1\">,<\/span> ovPostData<span class=\"sy1\">,<\/span> ovHeaders<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>L&rsquo;URL est un champ obligatoire sinon le message n&rsquo;est pas transmis au t\u00e9l\u00e9phone. Si <em>S\u00e9lection<\/em> est d\u00e9fini, le contenu sera copi\u00e9 dans le presse-papier, s&rsquo;il est vide, c&rsquo;est le <em>Titre<\/em> qui sera affich\u00e9 et le lien qui sera lanc\u00e9 sur le t\u00e9l\u00e9phone.<br \/>\nSi la <em>S\u00e9lection<\/em> est un num\u00e9ro de t\u00e9l\u00e9phone, vous pourrez le composer, &#8230;<\/p>\n<p>Finalement, rien de bien compliqu\u00e9 <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/cool.gif\" alt=\"8-)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/><br \/>\n<div id=\"attachment_2255\" style=\"width: 190px\" class=\"wp-caption aligncenter\"><a href=\"\/whiler\/wp-content\/uploads\/2011\/06\/notifications.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-2255\" src=\"\/whiler\/wp-content\/uploads\/2011\/06\/notifications-180x300.jpg\" alt=\"Notifications\" title=\"Notifications\" width=\"180\" height=\"300\" class=\"size-medium wp-image-2255\" srcset=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/06\/notifications-180x300.jpg 180w, https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/uploads\/2011\/06\/notifications.jpg 480w\" sizes=\"auto, (max-width: 180px) 100vw, 180px\" \/><\/a><p id=\"caption-attachment-2255\" class=\"wp-caption-text\">Notifications<\/p><\/div><\/p>\n<p>Si vous le souhaitez, vous pouvez t\u00e9l\u00e9charger le code source depuis <a href=\"https:\/\/www.whiler.com\/delphi\/Delphi2Phone.zip\">ce lien<\/a>.<br \/>\nN&rsquo;h\u00e9sitez pas \u00e0 laisser un commentaire si vous avez des questions <img src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-includes\/images\/smilies\/skype\/\/wink.gif\" alt=\";)\" class=\"wp-smiley\" style=\"height: 1em; max-height: 1em;\" \/> <\/p>\n<p><center><a href=\"\/whiler\/category\/computer\/delphi\/\" title=\"Articles concernant Delphi\"><img loading=\"lazy\" decoding=\"async\" src=\"\/whiler\/wp-content\/uploads\/2011\/06\/powered_by_delphi.png\" alt=\"\u00c9crit en Delphi\" title=\"\u00c9crit en Delphi\" width=\"125\" height=\"51\" class=\"size-full wp-image-2736\" \/><\/a><\/center><\/p>\n<div class=\"thanks_button_div\" \n                  style=\"float: right; margin-right: 10px; margin-top:10px;\"><div id=\"thanksButtonDiv_2230_1\" style=\"background-image:url(https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/thanks_compact_brown1.png); background-repeat:no-repeat; float: left; display: inline;\"\n                onmouseover=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_2230_1', true);\" \n                onmouseout=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_2230_1', false);\"\n                onclick=\"javascript:thankYouChangeButtonImage('thanksButtonDiv_2230_1', false);\" >\n                <input type=\"button\" onclick=\"thankYouButtonClick(2230, 'You left &ldquo;Thanks&rdquo; already for this post')\" value=\"Merci\u00a0 3\"\n                  class=\"thanks_button thanks_compact thanks_brown1\"\n                  style=\"  font-family: Verdana, Arial, Sans-Serif; font-size: 14px; font-weight: normal;; color:#00f;\"\n                  id=\"thanksButton_2230_1\" title=\"Click to leave &ldquo;Thanks&rdquo; for this post\"\/>\n             <\/div><div id=\"ajax_loader_2230_1\" style=\"display:inline;visibility: hidden;\"><img decoding=\"async\" alt=\"ajax loader\" src=\"https:\/\/blogs.wittwer.fr\/whiler\/wp-content\/plugins\/thanks-you-counter-button\/images\/ajax-loader.gif\" \/><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Dans un ancien article, j\u2019avais parl\u00e9 de l\u2019application Chrome To Phone qui permet d\u2019envoyer des liens, num\u00e9ros de t\u00e9l\u00e9phone, \u2026, depuis le navigateur de son ordinateur vers son t\u00e9l\u00e9phone Android.<\/p>\n<p>Si mon Firefox peut envoyer un message \u00e0 mon t\u00e9l\u00e9phone, mon Delphi doit donc aussi pouvoir le faire&#8230;<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_links_to":"","_links_to_target":""},"categories":[132,7,6],"tags":[158,27,154,43,157,108],"class_list":["post-2230","post","type-post","status-publish","format-standard","hentry","category-android","category-delphi","category-dev","tag-android","tag-coloration-syntaxique","tag-delphi","tag-donnees","tag-google","tag-script"],"_links":{"self":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2230","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=2230"}],"version-history":[{"count":1,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2230\/revisions"}],"predecessor-version":[{"id":6373,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/posts\/2230\/revisions\/6373"}],"wp:attachment":[{"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/media?parent=2230"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/categories?post=2230"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.wittwer.fr\/whiler\/wp-json\/wp\/v2\/tags?post=2230"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}