{"id":2179,"date":"2023-05-12T00:32:48","date_gmt":"2023-05-12T03:32:48","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=2179"},"modified":"2023-05-12T00:41:09","modified_gmt":"2023-05-12T03:41:09","slug":"usando-o-componente-cef4","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/programacao\/lazarus-ide\/usando-o-componente-cef4\/","title":{"rendered":"Usando o componente CEF4Delphi"},"content":{"rendered":"<p>Chromium \u00e9 um projeto de c\u00f3digo aberto (com contribui\u00e7\u00f5es do Google e outras empresas) para criar um navegador que suporte v\u00e1rias plataformas diferentes. Navegadores como Chrome e Edge s\u00e3o baseados nele.<\/p>\n\n\n\n<p>O Chromium Embedded Framework (CEF) \u00e9 uma estrutura de c\u00f3digo aberto para incorporar o Chromium em aplicativos do usu\u00e1rio. Pode ser usado em Linux, macOS e Windows nas vers\u00f5es de 32 e 64 bits. Originalmente havia muitas vers\u00f5es do CEF, mas boa parte deles n\u00e3o s\u00e3o mais mantidos, h\u00e1 apenas duas vers\u00f5es vigentes: CEF4 e fpCEF3, esta \u00faltima somente compat\u00edvel com o Lazarus, \u00e9 uma vers\u00e3o mais simples e pr\u00e1tica, por\u00e9m desatualizada tamb\u00e9m e em vers\u00f5es mais recentes do Lazarus nem compila, assim, para este artigo iremos usar o CEF4Delphi, que apesar do nome tem suporte para Delphi e tamb\u00e9m o Lazarus.<\/p>\n\n\n\n<p>Para Lazarus-IDE ou Delphi, o m\u00e9todo de instala\u00e7\u00e3o \u00e9 basicamente o mesmo, atrav\u00e9s de pacotes. Se voc\u00ea j\u00e1 instalou pacotes antes, n\u00e3o ter\u00e1 problemas em faz\u00ea-lo, basta baix\u00e1-los do reposit\u00f3rio oficial. Os passos a seguir ser\u00e3o para Lazarus, mas com pouca adapta\u00e7\u00e3o voc\u00ea tamb\u00e9m o instalar\u00e1 no Delphi.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Instalando-o no Lazarus-IDE<\/h2>\n\n\n\n<p>Primeiro vamos instalar o CEF, n\u00e3o se preocupe, s\u00e3o poucos passos.<\/p>\n\n\n\n<p>(1) V\u00e1 at\u00e9 a p\u00e1gina:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/salvadordf\/CEF4Delphi\">https:\/\/github.com\/salvadordf\/CEF4Delphi<\/a><\/p>\n\n\n\n<p>E leia o processo de instala\u00e7\u00e3o, se algo der errado, isto \u00e9, diferente das instru\u00e7\u00f5es que irei passar, provavelmente o projeto foi atualizado e \u00e9 preciso descobrir o que est\u00e1 faltando.<\/p>\n\n\n\n<p>(2) Via terminal, v\u00e1 at\u00e9 a pasta onde o seu Lazarus esta instalado, e l\u00e1 procure pela pasta &#8220;components&#8221; e dispare o comando git:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd C:\\lazarus\\components\ngit clone https:\/\/github.com\/salvadordf\/CEF4Delphi.git\ncd CEF4Delphi<\/code><\/pre>\n\n\n\n<p>Se voc\u00ea usar &#8216;<strong>git branch -r<\/strong>&#8216;, notar\u00e1 que o projeto n\u00e3o est\u00e1 nomeado e nem h\u00e1 versionamento, ou seja, estar\u00e1 sempre na &#8216;master&#8217;. Isso \u00e9 apenas um detalhe, vamos prosseguir.<\/p>\n\n\n\n<p>(3) Usando a IDE do Lazarus, v\u00e1 Pachage|Open Package File(.lpk) e ent\u00e3o selecione o(s) arquivo(s):<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">C:\\lazarus\\components\\CEF4Delphi\\packages\\cef4delphi_lazarus.lpk<\/pre>\n\n\n\n<p>E ent\u00e3o com o pacote aberto, clique em <strong>Compile<\/strong> e se n\u00e3o houver erros ent\u00e3o depois v\u00e1 em <strong>Use|Install<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"463\" height=\"247\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-1.png\" alt=\"\" class=\"wp-image-2182\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-1.png 463w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-1-300x160.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-1-18x10.png 18w\" sizes=\"auto, (max-width: 463px) 100vw, 463px\" \/><\/figure>\n\n\n\n<p>Eventualmente, a pr\u00f3pria IDE sugerir\u00e1 a inclus\u00e3o do pacote <strong>DCPCrypt<\/strong>, pois ele \u00e9 requerido n\u00e3o apenas por este pacote, mas muitos outros tamb\u00e9m. \u00c9 imperativo aceitar tal inclus\u00e3o.<\/p>\n\n\n\n<p>Ap\u00f3s a instala\u00e7\u00e3o, notar\u00e1  a presen\u00e7a de novos componentes na sua IDE:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"454\" height=\"114\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-2.png\" alt=\"\" class=\"wp-image-2183\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-2.png 454w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-2-300x75.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-2-18x5.png 18w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/figure>\n\n\n\n<p>O processo de instala\u00e7\u00e3o est\u00e1 agora completo. Mas como us\u00e1-lo? Vamos para o t\u00f3pico seguinte:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Criando o primeiro projeto:<\/h2>\n\n\n\n<p>(1) Crie uma pasta vazia, por exemplo, c:\\Projetos-fpc\\Demos<\/p>\n\n\n\n<p>(2) Agora copie a pasta <strong>&#8220;C:\\lazarus\\components\\CEF4Delphi\\demos\\Lazarus_Wind&#8221;ows\\SimpleBrowser&#8221;<\/strong> para dentro de <strong>&#8220;c:\\Projetos-fpc\\Demos&#8221;<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"763\" height=\"180\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-30.png\" alt=\"\" class=\"wp-image-2220\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-30.png 763w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-30-300x71.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-30-18x4.png 18w\" sizes=\"auto, (max-width: 763px) 100vw, 763px\" \/><\/figure>\n\n\n\n<p>(3) Abra este demo chamado &#8220;SimpleBrowser&#8221;, depois v\u00e1 em Project|Project Options, depois em Compiler Options|Configs and Target e seja espec\u00edfico na plataforma que ir\u00e1 usar, neste exemplo, usaremos como Target &#8216;Win32&#8217; o que significa aplica\u00e7\u00f5es compiladas para Windows 32bits:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"416\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-31-1024x416.png\" alt=\"\" class=\"wp-image-2221\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-31-1024x416.png 1024w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-31-300x122.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-31-768x312.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-31-18x7.png 18w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-31.png 1196w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\u00c9 importante saber isso porque iremos escolher no pr\u00f3ximo passo qual runtime do CEF baixar e ela ter\u00e1 de ser compat\u00edvel com o execut\u00e1vel que ser\u00e1 gerado.<\/p>\n\n\n\n<p>(4) Ainda em Project|Project Options, v\u00e1 agora em Compiler Options e notar\u00e1 que este projeto esta assim:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"421\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-33-1024x421.png\" alt=\"\" class=\"wp-image-2223\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-33-1024x421.png 1024w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-33-300x123.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-33-768x315.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-33-18x7.png 18w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-33.png 1193w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Vamos modific\u00e1-lo para ficar assim:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"426\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-34-1024x426.png\" alt=\"\" class=\"wp-image-2225\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-34-1024x426.png 1024w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-34-300x125.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-34-768x319.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-34-18x7.png 18w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-34.png 1196w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Agora clique em &#8216;OK&#8217; e nosso projeto est\u00e1 ajustado, vamos agora baixar o runtime apropriado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Baixando o runtime apropriado<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>Visite novamente a p\u00e1gina do projeto CEF, a saber:<\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/salvadordf\/CEF4Delphi\" target=\"_blank\" rel=\"noopener\" title=\"\">https:\/\/github.com\/salvadordf\/CEF4Delphi<\/a><\/p>\n\n\n\n<p>Rolando a tela, ver\u00e1 que voc\u00ea precisa baixar o runtime que s\u00e3o pacotes comprimidos (tarballs) que variam conforme o sistema operacional usado (windows, linux, macos) e arquitetura (32 ou 64bits):<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"843\" height=\"460\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-4.png\" alt=\"\" class=\"wp-image-2185\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-4.png 843w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-4-300x164.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-4-768x419.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-4-18x10.png 18w\" sizes=\"auto, (max-width: 843px) 100vw, 843px\" \/><\/figure>\n\n\n\n<p>Ent\u00e3o baixe o pacote apropriado para a vers\u00e3o que pretende compilar no Lazarus, no nosso exemplo, \u00e9 Windows 32bits (Win32).<\/p>\n\n\n\n<p>Recomendo que baixe-o na pasta de Downloads e depois descompacte-o ali mesmo.<\/p>\n\n\n\n<p>Em Downloads voc\u00ea ter\u00e1 uma subpasta &#8220;cef_binary(&#8230;)&#8221; um nome de pasta bem grande, mas seu conte\u00fado inteiro n\u00e3o nos \u00e9 importante, apenas a subpasta &#8220;Release&#8221; e &#8220;Locales&#8221;:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"802\" height=\"504\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-20.png\" alt=\"\" class=\"wp-image-2209\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-20.png 802w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-20-300x189.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-20-768x483.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-20-18x12.png 18w\" sizes=\"auto, (max-width: 802px) 100vw, 802px\" \/><\/figure>\n\n\n\n<p>De todos arquivos e subpastas, iremos precisar apenas das duas grifadas na imagem acima.<\/p>\n\n\n\n<p>V\u00e1 at\u00e9 a subpasta &#8220;Resources&#8221;, ent\u00e3o selecione todos os arquivos e subpastas que houverem:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"812\" height=\"595\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-35.png\" alt=\"\" class=\"wp-image-2227\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-35.png 812w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-35-300x220.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-35-768x563.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-35-16x12.png 16w\" sizes=\"auto, (max-width: 812px) 100vw, 812px\" \/><\/figure>\n\n\n\n<p>Ent\u00e3o copie-os para a pasta do nosso SimpleProject.<\/p>\n\n\n\n<p>Agora entre na pasta &#8220;Release&#8221;, selecione todos os arquivos dentro dela e copie-os para a pasta do SimpleProject:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"669\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-22-1024x669.png\" alt=\"\" class=\"wp-image-2211\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-22-1024x669.png 1024w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-22-300x196.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-22-768x502.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-22-18x12.png 18w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-22.png 1161w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>No final, sua pasta ficar\u00e1 mais ou menos assim:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"532\" height=\"839\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-36.png\" alt=\"\" class=\"wp-image-2228\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-36.png 532w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-36-190x300.png 190w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-36-8x12.png 8w\" sizes=\"auto, (max-width: 532px) 100vw, 532px\" \/><\/figure>\n\n\n\n<p>A partir desse momento, voc\u00ea j\u00e1 tem um runtime vi\u00e1vel para seu SimpleProject compilar e rodar, fa\u00e7a o teste e d\u00ea um F9:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"659\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-37-1024x659.png\" alt=\"\" class=\"wp-image-2229\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-37-1024x659.png 1024w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-37-300x193.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-37-768x495.png 768w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-37-18x12.png 18w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2023\/05\/image-37.png 1042w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Como preparar a cama<\/h2>\n\n\n\n<p>Muitas vezes, o c\u00f3digo do CEF \u00e9 alien\u00edgena para mim, isto acontece porque trata-se dum port para object pascal a partir de bibliotecas externas para Windows, Linux e MacOS, da\u00ed ent\u00e3o n\u00e3o \u00e9 um c\u00f3digo trivial, assim como voc\u00ea tem que preparar a cama para dormir, neste caso tem inicializar objetos e valores antes de consumir o componente e depois liber\u00e1-los, caso contr\u00e1rio ser\u00e1 um show de &#8216;access viollation&#8217;. Por isso, se voc\u00ea almeja fazer algo intrigante com o CEF, parta dos exemplos que acompanham ele. Usei como referencia o SimpleProject porque ele \u00e9 o mais minimalista que existe e que voc\u00ea pode levar para outras aplica\u00e7\u00f5es com pouca adapta\u00e7\u00e3o.<\/p>\n\n\n\n<p>Neste simples projeto, voce ir\u00e1 notar em SimpleProject.lpi:<\/p>\n\n\n\n<div class=\"wp-block-codemirror-blocks-code-block code-block\"><pre class=\"CodeMirror\" data-setting=\"{&quot;showPanel&quot;:true,&quot;languageLabel&quot;:false,&quot;fullScreenButton&quot;:true,&quot;copyButton&quot;:true,&quot;mode&quot;:&quot;pascal&quot;,&quot;mime&quot;:&quot;text\/x-pascal&quot;,&quot;theme&quot;:&quot;default&quot;,&quot;lineNumbers&quot;:true,&quot;styleActiveLine&quot;:true,&quot;lineWrapping&quot;:false,&quot;readOnly&quot;:true,&quot;fileName&quot;:&quot;&quot;,&quot;TrpContentRestriction&quot;:{&quot;restriction_type&quot;:&quot;exclude&quot;,&quot;selected_languages&quot;:[],&quot;panel_open&quot;:true},&quot;language&quot;:&quot;Pascal&quot;,&quot;maxHeight&quot;:&quot;400px&quot;,&quot;modeName&quot;:&quot;pascal&quot;}\">program SimpleBrowser;\n\n{$I cef.inc}\n\nuses\n  Forms, Interfaces,\n  uCEFApplication,\n  uSimpleBrowser in 'uSimpleBrowser.pas' {Form1};\n\n{$IFDEF WIN32}\n  \/\/ CEF3 needs to set the LARGEADDRESSAWARE flag which allows 32-bit processes to use up to 3GB of RAM.\n  \/\/ If you don't add this flag the rederer process will crash when you try to load large images.\n  {$SetPEFlags $20}\n{$ENDIF}\n\nbegin\n  GlobalCEFApp := TCefApplication.Create;\n\n  \/\/ In case you want to use custom directories for the CEF3 binaries, cache and user data.\n  \/\/ If you don't set a cache directory the browser will use in-memory cache.\n{\n  GlobalCEFApp.FrameworkDirPath     := 'c:\\cef';\n  GlobalCEFApp.ResourcesDirPath     := 'c:\\cef';\n  GlobalCEFApp.LocalesDirPath       := 'c:\\cef\\locales';\n  GlobalCEFApp.EnableGPU            := True;      \/\/ Enable hardware acceleration\n  GlobalCEFApp.cache                := 'c:\\cef\\cache';\n  GlobalCEFApp.UserDataPath         := 'c:\\cef\\User Data';\n}\n\n  \/\/ You *MUST* call GlobalCEFApp.StartMainProcess in a if..then clause\n  \/\/ with the Application initialization inside the begin..end.\n  \/\/ Read this https:\/\/www.briskbard.com\/index.php?lang=en&amp;amp;pageid=cef\n  if GlobalCEFApp.StartMainProcess then\n    begin\n      Application.Initialize;\n      Application.CreateForm(TForm1, Form1);\n      Application.Run;\n    end;           \n\n  GlobalCEFApp.Free;\n  GlobalCEFApp := nil;\nend. <\/pre><\/div>\n\n\n\n<p>Alguns par\u00e2metros ali s\u00e3o muito interessantes de serem modificados, por exemplo:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GlobalCEFApp.LocalesDirPath := 'c:\\cef\\locales';<\/code><\/pre>\n\n\n\n<p>que tal remover o coment\u00e1rio e definir uma pasta para &#8216;locales&#8217; como:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>GlobalCEFApp.LocalesDirPath := UTF8Decode(GetCurrentDir + PathDelim + 'locales');\t<\/code><\/pre>\n\n\n\n<p>Assim podemos definir um local mais conveniente para nossas aplica\u00e7\u00f5es.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">E agora?<\/h2>\n\n\n\n<p>Use os exemplos, eles cont\u00e9m um universo de aplica\u00e7\u00f5es diferentes com estes componentes, os exemplos est\u00e3o em:<\/p>\n\n\n\n<p><strong>components\/cef4Delphi\/demos\/<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\"><\/ul>\n\n\n\n<p>Estude-os, quase tudo que voc\u00ea pensou em fazer usando um navegador, outro j\u00e1 o fez e colocou o exemplo ali.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Referencias externas:<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.briskbard.com\/index.php?lang=en&amp;pageid=cef\">https:\/\/www.briskbard.com\/index.php?lang=en&amp;pageid=cef<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>\u00c9 um excelente componente, mas seu uso n\u00e3o \u00e9 para amadores. A transi\u00e7\u00e3o do TWebbrowser(Delphi) para ele \u00e9 enorme, mas em compensa\u00e7\u00e3o \u00e9 um navegador completo, repleto de recursos. \u00d3timo para navegar e tamb\u00e9m criar bots.<\/p>","protected":false},"excerpt":{"rendered":"<p>Chromium \u00e9 um projeto de c\u00f3digo aberto (com contribui\u00e7\u00f5es do Google e outras empresas) para criar um navegador que suporte v\u00e1rias plataformas diferentes. Navegadores como Chrome e Edge s\u00e3o baseados nele. O Chromium Embedded Framework (CEF) \u00e9 uma estrutura de c\u00f3digo aberto para incorporar o Chromium em aplicativos do usu\u00e1rio. Pode ser usado em Linux, [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":159,"menu_order":99,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-2179","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/2179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=2179"}],"version-history":[{"count":16,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/2179\/revisions"}],"predecessor-version":[{"id":2238,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/2179\/revisions\/2238"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/159"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=2179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}