Durante o desenvolvimento de alguns projetos tive a necessidade de acessar páginas da Internet a partir do próprio Delphi, para obter informações da Web.

Uma maneira prática de abrir uma página a partir de uma aplicação Delphi pode ser vista a seguir:

{Declare UrlMon no uses}
 HlinkNavigateString(nil,'http://www.clubedelphi.net');

Uma desvantagem dessa abordagem é que a página será aberta em no navegador padrão do sistema operacional, em uma nova janela, o que torna difícil sua manipulação a partir da aplicação Delphi.

Neste artigo veremos como utilizar o componente WebBrowser da paleta Internet para criar um browser bastante simples. Esse componente permite adicionar as funcionalidades de um Web Browser à sua aplicação, e utiliza internamente as mesmas bibliotecas utilizadas pelo Internet Explorer, mais especificamente a SHDOCVW.DLL.

Criando um navegador

Abra o Delphi e crie uma nova aplicação, adicione no formulário os seguintes componentes: WebBrowser, Toolbar, ActionList, ImageList, Label, BitBtn e ComboBox. Adicione alguns botões à Toolbar e algumas imagens ao ImageList. Aponte a propriedade Images da ToolBar para o ImageList. Seu formulário deve estar semelhante ao da Figura 1.

Para cada botão da ToolBar você deverá inserir um manipuladpr para o evento OnClick e chamar o respectivo método do WebBrowser, conforme mostra a Tabela 1.

Botão Método do WebBrowser
Avançar GoForward
Voltar GoBack
Parar Stop
Atualizar Refresh
Página Inicial GoHome
Fechar Quit
Tabela 1. Chamada aos métodos do WebBrowser
Criando um “navegador” no Delphi
Figura 1. Criando um “navegador” no Delphi

Veja no exemplo a seguir como fica o manipulador para o evento OnClick do botão Voltar: WebBrowser1.GoBack;

No evento OnClick do ComboBox digite: WebBrowser1.Navigate(ComboBox1.Text);

Aponte evento OnClick do botão Ir para este mesmo manipulador.

Para enviar e-mails, utilizaremos uma ação pré-definida pelo ActionList. Dê um duplo clique sobre esse componente, selecione a opção New Standard Action e escolha o item Internet|TSendMail (Figura 2).

Selecione o botão da ToolBar que será encarregado de disparar a ação, e aponte sua propriedade Action para SendMail1.

Pronto! Rode a aplicação e você já poderá testar as funcionalidades básicas de navegação e envio de e-mails.

Dica: Você pode também utilizar o WebBrowser para exibir o conteúdo de um arquivo do disco (.html, .xml etc), como no exemplo a seguir:
WebBrowser1.Navigate('file:///c:\animals.xml')
ActionList contém ações pré-definidas para trabalhar com e-mails, URLs e Downloads
Figura 2. ActionList contém ações pré-definidas para trabalhar com e-mails, URLs e Downloads

Incrementando o navegador

Vamos adicionar mais algumas funcionalidades ao nosso exemplo, como abrir os sites que estão na pasta Favoritos do sistema.

Declare o seguinte na seção public do formulário:

pidl : PItemIDList;
 caminho : array [0..MAX_PATH] of char;
 procedure Favoritos (str : TStrings;
  const caminho : string);

Implemente o método como mostrado a seguir:

procedure TForm1.Favoritos(str : TStrings;
  const caminho: string);
 var
  searchrec : TSearchrec;
  path, dir, arquivo : string;
  Buffer : array[0..2047] of Char;
  found : Integer;
 begin
  {Pega todos os arquivos na pasta Favoritos}
  path := caminho +'\*.url';
  dir := ExtractFilepath(path);
  found := FindFirst(path, faAnyFile, searchrec);
  while found = 0 do
  begin
  SetString(arquivo, Buffer,
  GetPrivateProfileString('InternetShortcut',
  PChar('URL'), nil, Buffer, SizeOf(Buffer),
  PChar(dir + searchrec.Name)));
  str.Add(arquivo);
  found := FindNext(searchrec);
  end;
  found := FindFirst(dir +'\*.*', faAnyFile,
  searchrec);
  while found = 0 do
  begin
  if ((searchrec.Attr and faDirectory) > 0) and
  (searchrec.Name[1]<>'.') then
  Favoritos(str,(dir + '\'+searchrec.name));
  found := FindNext(searchrec);
  end;
  FindClose(searchrec);
 end;
 Declare ShlObj no uses da seção interface. No evento OnShow do formulário digite:
 SHGetSpecialFolderLocation(Handle,
  CSIDL_FAVORITES, pidl);
 SHGetPathFromIDList(pidl, caminho);
 Favoritos(ComboBox1.Items,StrPas(caminho));

Veja a aplicação em execução na Figura 3.

Favoritos adicionados a um ComboBox
Figura 3. Favoritos adicionados a um ComboBox

Uma outra alternativa seria exibir a lista dos favoritos em um PopupMenu, que será acionado quando o usuário clicar no botão Favoritos da ToolBar.

Adicione ao formulário um PopupMenu e declare o seguinte método logo acima da seção private do formulário:

procedure PreencheMenu(Sender: TObject);
 procedure DoOnClick(Sender : TObject);
 Implemente-o como mostrado a seguir:
 procedure TForm1.PreencheMenu(Sender: TObject);
 var
  lista : TStrings;
  i : integer;
  Item : TMenuItem;
 begin
  lista := TStringList.Create;
  PopupMenu1.Items.Clear;
  Favoritos(Lista,StrPas(caminho));
  for i := 0 to lista.Count - 1 do
  begin
  { Para cada item da lista adiciona um item
  no menu }
  Item := TMenuItem.Create(self);
  Item.Caption := lista.Strings[i];
  { Associa o evento OnClick do item de menu a
  procedure que irá abrir os sites }
  Item.OnClick := DoOnClick;
  { Adiciona o item no PopupMenu }
  PopupMenu1.Items.Add(Item);
  end;
 end;

Aponte o evento OnPopup do PopupMenu para o método PreencheMenu. Veja a seguir a implementação do método DoOnClick:

procedure TForm1.DoOnClick(Sender: TObject);
 var
  site : string;
 begin
  site := StringReplace((Sender as TMenuItem).Caption,
  '&',' ',[rfReplaceAll]);
  WebBrowser1.Navigate(site);
 end;

Altere a propriedade DropdownMenu do botão Favoritos da ToolBar para o PopupMenu1. Veja o resultado na Figura 4.

Favoritos adicionados a um PopupMenu
Figura 4. Favoritos adicionados a um PopupMenu

Interação Sistema x Navegador

Algumas vezes você pode desejar que o sistema exiba uma página de acordo com informações que estão no banco de dados.

Por exemplo, ao abrir uma ficha de um cliente em sua aplicação Delphi, você poderia automaticamente exibir no WebBrowser informações sobre esse mesmo cliente, que possam estar cadastradas em um site da Web.

Veja no exemplo a seguir como ficaria o acesso a um site de cadastro on-line usando informações vindas de um ClientDataSet:

var
  Cliente : string;
 begin
  Cliente := ClientDataSet1CLIENTE.AsString;
  WebBrowser1.Navigate('http://www.meusite.com.br/'+
  'consulta.dll?cliente=' + Cliente);
 end;

Conclusões

Como você pode ver a utilização do componente WebBrowser é bastante simples. Você pode agora utilizar esse componente pra as mais diferentes funcionalidades: fornecer um mecanismo de acesso direto ao site da sua empresa a partir da sua aplicação, integrar suas aplicações com sites da Web, exibir informações on-line diretamente em um formulário, etc. Até a próxima.