Como funciona a integração entre o código HTML e o código DelphiNão é nada complicado do ponto de vista do usuário do programa. Se você tiver experiência em HTML com a interação entre Image Maps e javascript, vai entender de cara como funciona só olhando o código fonte dos meus exemplos em HTML. Mesmo que você não tenha experiência com isso, o que vou explicar aqui deve ser suficiente.
O básicoPara poder exibir páginas HTML o programa usa um controle que encapsula um controle ActiveX da Microsoft que é, para todos os efeitos práticos, o Internet Explorer instalado no PC do usuário. Mesmo que o usuário não use o IE esse mecanismo está disponível em todas as versões do Windows por intermédio da biblioteca MSHTML.DLL, que encapsula toda a
Trident Engine.
Embora seja muito simples fazer isso (embutir uma instância do IE) em Delphi, não existe um mecanismo simples, nem no Delphi nem na linguagem HTML, para se passar informações entre esse IE embutido e a aplicação. Isso está sendo feito através de um mecanismo
COM que eu mal consigo entender e que por isso dá trabalho implementar.
Crédito da técnica - Peter D. JohnsonAtravés de COM eu consigo criar rotinas em Delphi e fazer com que elas sejam visíveis para o browser como se fossem rotinas em javascript ou vbscript, por meio do objeto
external. Essas rotinas podem ser chamadas da mesma forma que qualquer outra rotina em javascript seria, mas nos meus exemplos isso está sendo feito apenas quando o usuário clica ou move o mouse sobre o browser e por isso depende de tags HREF.
FuncionamentoPor exemplo, quando você cria uma região clicável em um Image Map HTML, obtém algo mais ou menos assim no código:
<area shape="circle" coords="66,1356,18"
href="#">
Para fazer com que o MTKRemote reaja a cliques e movimento do mouse sobre essa região, substitua o que está em negrito por:
href="javascript:void(0);" id=""
onclick="external.ProcessarDado('34');"
onmouseover="external.ExibirInfo('RANDOM');"
onmouseout="external.OcultarInfo()";
Três eventos do browser são usados (onclick, onmouseover e onmouseout) mas você pode usar apenas o evento onclick, porque é o único que realmente manda algo importante para o programa.
- A função ProcessarDado espera um MTKCommand em hexadecimal. No exemplo, o código "34" será enviado para o aparelho;
- ExibirInfo, que não está implementada ainda na versão Alfa3, apenas serve para exibir informação (no exemplo "RANDOM") no Delphi. Isso é perfeitamente dispensável no caso de MTKRemote, até mesmo porque se é só para indicar ao usuário a função do elemento por onde ele está passando o mouse, existem mecanismos em HTML/Javascript com essa funcionalidade;
- OcultarInfo é necessária sempre que você usar ExibirInfo.