4 de fevereiro de 2010

Interagindo com HTML em programas Delphi e C++ Builder - parte I

A linguagem HTML é amplamente utilizada na criação de sites devido as suas características, que permitem criar facilmente textos formatados e com diagramação complexa que incluam também imagens, animações e outros recursos.

No entanto, ela tem sérias restrições quando se tenta usá-la para criar aplicações ricas. Por "aplicação rica" eu quero dizer aquelas que são capazes de prover interações com o usuário de uma forma mais completa e responsiva. Elas contem recursos como organização em guias, apresentação de informações em árvores ou listas que podem responder a cliques do usuário, etc. As aplicações Windows tradicionais - (ditas Desktop) como o Excel ou um ERP como o Omega da ABC71 são exemplos de tais aplicações.

Por outro lado, em aplicações desktop é difícil de se tratar a exibição de textos formatados em que ocorram variações de tipo de fonte ou que apresentem hiperlinks e exibam imagens e animações - exatamente os recursos encontrados em um HTML.

Então, ter a capacidade de exibir páginas HTML numa aplicação desktop pode ser de grande utilidade. O Delphi e o C++ Builder incluem em suas paletas um componente chamado WebBrowser (ou CppWebBrowser) que permite exibir facilmente páginas HTML em aplicações desktop. Na verdade, este componente é um encapsulamento do navegador Internet Explorer de modo que ele tem os mesmos recursos que o navegador, podendo exibir páginas de forma idêntica. A grande diferença é que, como o componente está embutido em seu programa, é possível interceptar os eventos gerados pelo navegador e executar ações em cima desse eventos. Os eventos incluem seguir um link (permitindo redirecionar para uma outra página, por exemplo), o clique de botões (permitindo tratar o envio das informações contidas num formulário HTML), acompanhamento de downloads, entre outros.

O principal uso desse componente é exibir páginas HTML, o que pode ser obtido através da função Navigate:
FBrowser.Navigate('http://balaiotecnologico.blogspot.com/');

O parâmetro passado para esta função é a URL onde está o documento a ser exibido. A URL pode também apontar um endereço local, permitindo distribuir os documentos HTML necessários juntos com o seu programa:
var lURL: String;
begin
{ A URL deve ter o caminho completo, por isso extraio o caminho onde o executável está para prepará-la adequadamente, concatenando a esse caminho o protocolo FILE:// e acrescentando o nome do HTML }
lURL := 'file://' + ExtractFilePath(Application.ExeName) + 'bemvindo/bemvindo.html/';
FBrowser.Navigate(lURL);
end;

O evento OnDocumentComplete notifica o programa quando a carga de uma página terminou, o que pode ser usado para habilitar partes da interface gráfica no programa Delphi - por exemplo, habilitar um botão ou uma caixa de edição na tela. Caso a página indicada na URL seja constituida de Frames, este evento é executado uma vez para cada Frame, sempre que a carga de cada um é completada. Tenha em mente ainda que o OnDocumentComplete é disparado mesmo que a carga da página solicitada tenha dado erro. Neste caso, é possível detectar que uma situação de erro aconteceu respondendo ao evento OnNavigateError.

Outro evento importante é o OnBeforeNavigate2. Ele ocorre sempre que o usuário segue algum link na página ou pressiona um botão para submeter os dados de um formulário. O evento também é acionado quando se faz uma chamada à função Navigate dentro de seu programa. Todas as informações relativas à navegação são repassadas para este evento - a nova URL, os dados do formulário (se houver), o nome do frame aonde a página deve ser apresentada, etc. - de modo que é possível consistir tais informações e modificá-las apropriadamente se for necessário. Por exemplo, se o usuário tentar seguir um link ao qual ele não deve ter acesso, é possível redirecionar para uma página de erro ou até mesmo cancelar a navegação.

Esse componente também tem recursos para se transformar num editor de HTML no estilo WYSWYG, permitindo dar ao usuário final de seu programa um meio visual para modificar o conteúdo de páginas HTML mesmo sem conhecer essa linguagem. Falo desse recurso em outro post.

No próximo post eu mostro como fazer com que as interações do usuário com um HTML exibido no TWebBrowser sejam tratadas por um programa Delphi.

7 comentários :

Alison Bissoli Dias disse...

Bastante detalhado e útil, parabéns, aguardo o post do TWebBrowser.

Anônimo disse...

Fábio, preciso de uma ajuda. Tenho um programa em C++ Builder, e um documento HTML com a interface desse programa.
Preciso passar os dados digitados para serem processados pelo programa em C, como faço isso???

Luís Gustavo Fabbro disse...

Há um post no blog com uma sugestão de como recuperar os valores de um Form. O post traz a sintaxe em Delphi mas pode ser aproveitado também em programas C++ Builder.

O post é "Interagindo com forms html em programas Delphi e C++ Builder".

Iraê Azevedo disse...

Ola Luis
Bem interessante seu trabalho e o blog parabéns.
Eu sou estagiário em programação Delphi, tenho uma tarefa a cumprir, que é extrair de uma pagina HTML algumas informações e salvar em um banco de dados SQL server, e estou apanhando muito com isso... vc tem alguma sugestão de como eu poderia fazer isso e se isso realmente é possível?

Luís Gustavo Fabbro disse...

Iraê

Não sei que tipo de informação vc quer extrair do HTML mas pode usar o componente WebBrowser para obter o HTML estruturado como um DOM (mais ou menos como um xml).

Essa estrutura é acessível através da propriedade Document, que implementa a interface IHtmlDocument2. Com isso, você pode usar a propriedade all da interface para percorrer as tags internas do HTML à procura das informações que vc desejar.

Aqui no blog há um post que fala um pouco dessa interface (neste link) para construção de editores HTML.

Henry Fabrício disse...

Luís, eu procurei no seu blog sobre o recurso WYSWYG do TWebBrowser mas não achei. Já tem algo pronto? É que eu estou precisando deste recurso. Você sabe como eu faço para pegar um texto HTML de dentro de um Tmemo e jogar direto para um TWebBrowser e vice versa? Muito obrigado!

Luís Gustavo Fabbro disse...

Henry

Procure os posts com o texto TWebBrowser; há uma porção deles mostrando recursos para construir um editor HTML com esse componente, incluindo meios de se recuperar o HTML editado. Veja o link : http://balaiotecnologico.blogspot.com.br/search?q=TWebBrowser.

[]s

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.