Delphi: TWebBrowser - Backspace e setas não funcionam. Veja como resolver

Estive essa semana criando um processo de atendimento online no sistema da empresa, onde o mesmo é aberto em um componente WebBrowser. Nada de muito complicado, mas me deparei com um problema no mínimo 'curioso'.

Ao tentar fazer o login na página aberta, percebi que ao tentar apagar o texto do login, que eu havia digitado errado, a tecla backspace simplesmente fazia a função de "tab". O mesmo ocorria com as setas do teclado. Comecei a buscar em alguns fóruns uma solução elegante, mas não achei nada em foruns do Brasil. Por fim encontrei a solução em um site de fora.

Agora eu trago a solução aos colegas, explicado em português ;)

 

Primeiramente, adicione a unit ActiveX em seu uses.

Agora, adicione a informação abaixo, bem no final de sua unit; ou seja, a cima do 'end.' final.


initialization
  OleInitialize(nil);

finalization
  OleUninitialize;


Aqui eu fiz algumas alterações, para evitar problemas no programa. Lembre-se que abaixo eu uso como form um Form1:TForm, como é de prache em exemplos em Delphi. Não esqueça de adaptar com base no nome do seu form!


Na área private do seu form, insira o seguinte:


private
  FOleInPlaceActiveObject: IOleInPlaceActiveObject;
  SaveMessageHandler: TMessageEvent;

  procedure MyMessageHandler(var Msg: TMsg; var Handled: Boolean);


Na implementação, adicione os códigos:

implementation

.... { bla blá...}

procedure TForm1.FormActivate(Sender: TObject);
begin
  SaveMessageHandler := Application.OnMessage;
  Application.OnMessage := MyMessageHandler;
end;

procedure TForm1.FormDeactivate(Sender: TObject);
begin
  Application.OnMessage := SaveMessageHandler;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Application.OnMessage := SaveMessageHandler;
  FOleInPlaceActiveObject := nil;
end;

procedure TForm1.MyMessageHandler(var Msg: TMsg; var Handled: Boolean);
var
  iOIPAO: IOleInPlaceActiveObject;
  Dispatch: IDispatch;
begin
  { Cai fora caso o objeto já foi retirado da memória, para evitar 'paus' }
  if WebBrowser = nil then
  begin
    Handled := False;
    Exit;
  end;

  Handled:=(IsDialogMessage(WebBrowser.Handle, Msg) = True);

  if (Handled) and (not WebBrowser.Busy) then
  begin
    if FOleInPlaceActiveObject = nil then
    begin
      Dispatch := WebBrowser.Application;
      if Dispatch <> nil then
      begin
        Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
        if iOIPAO <> nil then
          FOleInPlaceActiveObject := iOIPAO;
      end;
    end;

    if FOleInPlaceActiveObject <> nil then
      if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
         ((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)) then
        //nothing - do not pass on Backspace, Left or Right arrows
      else
        FOleInPlaceActiveObject.TranslateAccelerator(Msg);
  end;


end;

 

Não tem erro. Fazendo isso o problema é resolvido. Abraços, e até a próxima!!!


Posted by: Raphael Zimermann
Posted on: 18/10/2010 at 14:48
Tags: , ,
Categories: Desenvolvimento | Matérias | Tecnologia
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comentários (1) | Post RSSRSS comment feed

Preview do Guitar R.A. 1.2.1

Poisé minha gente... Eu havia prometido uma versão nova do Guitar R.A. para abril, e nada...

Bom, acontece que tive alguns problemas no meu PC, o que atrapalhou um pouco o processo. Ainda assim, há mais envolvido. Eu estava trabalhando em alguns processos novos, que iriam ficar para a versão 1.3.0 do Guitar R.A., mas decidi implantá-los já na versão 1.2.1. Para verem que não estou mentindo, eis aí um preview de como está a versão 1.2.1. Agora posso garantir que a nova versão estará no ar em breve!

Fiquem no aguardo de novidades...

Abraços a todos,

Raphael Zimermann

Preview do Guitar R.A. 1.2.1 (Clique na imagem para ampliar)


Posted by: Raphael Zimermann
Posted on: 04/05/2010 at 11:13
Tags: ,
Categories: Desenvolvimento | Novidades | Tecnologia
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comentários (3) | Post RSSRSS comment feed

Problema Driver ODBC X Windows server 2003

Olá amigos... Como sabem, sou desenvolvedor (nem vou listar aqui a quantia de linguagens e banco de dados que trabalho rs), e como tal, tenho que lidar com vários problemas que vão surgindo no meu dia dia, coisa comum de qualquer desenvolvedor... Um desses problemas estava me deixando louco já por alguns dias, até que hoje consegui resolver. Depois de tanto esquentar a cabeça e resolver o problema, decidi postar aqui a solução, para o caso de alguém precisar...

Qual é o problema?

Eu tinha acabado de terminar o desenvolvimento de um programa web, feito em asp.net (utilizando o banco de dados firebird), e estava prestes a instalá-lo em um servdor da empresa (Localizado nos EUA), quando ele simplesmente não funcionou... O erro apresentado foi:

[ODBC Firebird Driver]unavailable database

Ok, aqueles que conhecem drivers ODBC, firebird, etc, provavelmente pensaram: 'Ah, o caminho do banco está errado' ou 'O firebird não está instalado/executando'. Logicamente, também foi a primeira coisa que pensei. Mas após conferir tudo, descobri que estava tudo certo. E mesmo tudo certo, não funcionava. Comecei a imaginar que fosse algum problema com as configurações e instalações de pacotes do windows, já que na minha máquina de desenvolvimento (Windows XP), tudo funcionava...

Instala coisa aqui, atualiza ali, desinstala mais pra lá.. e nada. Depois de também ler alguns fóruns em inglês, descobri o problema: A velha GDS32.dll. Sim, o problema estava com a GDS (DLL do interbase, que às vezes é instalada por questão de compatibilidade). Por algum motivo, o driver ODBC estava tentando utilizar alternadamente a gds32.dll e a fbclient.dll (DLL do firebird), lembrando que o ODBC se comunica com o Firebird, necessitando este estar instalado também.

Solução final: Apenas exclui a GDS32.dll da pasta System32 do windows e... fubá!! O sistema funcionou!

Agora já sabem: Se precisarem, aí está a solução...

Grande abraço a todos e até a próxima!

 


Posted by: Raphael Zimermann
Posted on: 07/01/2010 at 20:32
Tags: , , ,
Categories: Desenvolvimento | Tecnologia
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comentários (2) | Post RSSRSS comment feed

Visitas: 1633802