Delphi – Chromium como Navegador

Share Button

Até a versão Tokyo do Delphi, o navegador padrão embutido é o TWebBrowser – uma implementação para chamada do Navegador padrão do Windows. Se as páginas a serem chamadas são páginas mais antigas – ele até vai bem. No entanto quando o desejo for carregar o que há de mais novo em estrutura do HTML5 com frameworks como Angular5 e outros, vários problemas de incompatibilidade surgirão á inviabilizar o uso do TWebBrowser.

TChromium como Navegador
A alternativa que se mostra mais adequada para uso dos novos frameworks é a utilizado o TChromium com a implementação CEF4Delphi créditos para Salvador Díaz Fau como consta.

Leia os exemplos
É imperativo a leitura dos exemplos que são baixados do GIT. Ele requer chamada e configuração inicial antes do uso da biblioteca, assim como é necessário aguardar a inicialização da mesma antes de sair carregando a página. Então não deixe de olhar os exemplos.

Na inicialização – antes de abrir uma página


// preparando as configurações
var FStarted:boolean;
function CEFApplication: TCefApplication;
var sPath:String;
begin
  sPath := extractFilePath(ParamStr(0));   /// ou outro que for adequado ao seu aplicativo - com o local de instalação das DLLs do pacote
  if not assigned(GlobalCEFApp) then
  begin
    GlobalCEFApp := TCefApplication.Create;
    GlobalCEFApp.FlashEnabled := False;
    GlobalCEFApp.FastUnload := true;

    GlobalCEFApp.FrameworkDirPath := sPath+'cef';
    GlobalCEFApp.ResourcesDirPath := sPath+'cef';
    GlobalCEFApp.LocalesDirPath := sPath+'cef\locales';
    GlobalCEFApp.cache := sPath+'cef\cache';
    GlobalCEFApp.cookies := sPath+'cef\cookies';
    GlobalCEFApp.UserDataPath := sPath+'cef\User Data';
    GlobalCEFApp.EnableGPU := false;
  end;
  if not FStarted then
    FStarted := GlobalCEFApp.StartMainProcess;

  result := GlobalCEFApp;
end;


// na inicialização do projeto - chamar os dados de configuração da biblioteca - 
CEFApplication;


Antes de abrir uma página
Olhando para os exemplos, ele requer que a criação da área de apresentação (o Browser) exige que a estrutura de carga da biblioteca já esteja carregada.
Para fazer isto é preciso ficar monitorando a conclusão da inicialização para somente após criar a camada de apresentação (a VIEW);
Aqui nós usamos um timer para ficar monitorando quando que a estrutura foi inicializada.

algo que represente um loop:

while not (Chromium1.CreateBrowser(CEFWindowParent1, '')) and
        (Chromium1.Initialized) do
begin
   delay(100);
   application.processMessage();  // avaliar se a aplicação requer despachar outras mesnagens.
end;

Somente após a resposta que tudo foi carregado com sucesso que a página é chamada. Neste ponto uma dica é usar o evento “AfterCreated” do componente, ou seja, o “AfterCreated” é chamado após o componente ter concluído a criação da área de apresentação.

Carregando uma página

Depois de tudo inicializado “AfterCreated” é o momento de carrega a nossa página:

Chromium1.LoadURL(url);