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

Adaptando bateria de celular em joystick wireless

 

Recentemente, adquiri um controle sem fio para meu Xbox (versão 1), que apresentou-se de boa qualidade. A marca é a wideye, que ficou conhecida entre os adéptos do XBox justamente por produzir esse controle wireless, que permite utilizar um headset também wireless (vendido separadamente).

É um excelente controle. Só tinha dois 'problemas' nele: Um é o tamanho (em geral, a maioria dos controles wireless são enormes), e o outro problema são as baterias.

Bom, com relação ao tamanho do joystick, não há muito o que fazer; mas no caso das baterias... inventei uma ótima solução. Adaptei o controle para usar uma bateria de celular. E agora vou ensinar como fazer!

Note que esse tutorial pode ser também aplicado a outros controles sem fio, desde que os seguintes fatores sejam considerados: Potência da bateria do celular; Espaço disponível no slot de baterias do controle; Tempo da carga (se não durar nada, não vale apena né...)

 

Primeiro passo: Escolhendo uma bateria

Eu escolhi uma bateria de celular foston 868B. O motivo é que eu tenho essa bateria sobrando, pois eu tinha um celular desse mas roubaram. A voltagem dela, apesar de não ser igual a voltagem das baterias AA do controle (4.2v do celular contra 4.5v do controle), é compatível. Basta considerar que a voltagem de uma bateria AA recarregável é de 1.2 (3x 1.2 = 3.6v); Então, 'fecha' a carga numa boa...

Como se pode ver na foto, a bateria não é muito grande, e porisso encaixa legal no projeto (veja mais fotos abaixo). A bateria possui um carregador bem 'simpático', que pode ser carregado pela USB do computador mesmo...

 

Segundo passo: Encaixando a bateria

Tendo o controle, e tendo a bateria, precisamos pensar um jeito de encaixar a bateria no controle. Para isso, eu consegui um pequeno pedaço de espuma, que possui uma consistência mais firme. Talvez no futuro eu ache algo melhor para utilizar, mas no momento foi o que encontrei, e serviu...

Agora, precisamos dar um jeito de encaixar a espuma no slot das baterias AA do controle. Ah, detalhe: Para que serve a espuma? Bom, a bateria não encaixa perfeitamente no controle (lógico né), e a espuma vai servir como um 'elo' entre os dois - a bateria vai ser encaixada na espuma e a espuma no controle. Para fazer a gambiarra, necessitei de um bom estilete (crianças, tenham um adulto por perto). Veja nas fotos como a adaptação foi feita:

 

Estilete

 

Espuma já cortada do tamanho do slot das baterias AA

 

Espuma marcada com pontos azuis, para o corte no formato da bateria

 

Depois de cortada, a espuma vai ficar mais ou menos assim:

 

Agora, pode-se ver abaixo o resultado - como a espuma vai encaixar no controle e como a bateria vai encaixar na espuma. Um detalhe interessante é que aproveitei a sobra que foi cortada da espuma e colei na tampa do slot, para dar uma resistência na 'conexão' (assim a bateria não fica dançando dentro do slot). Veja as fotos:

 

 

 

 

 

Como se pode ver, o encaixe ficou perfeito. Mas não funciona... Porque não?? Bom, até aqui, nós apenas demos um jeito de colocar a bateria dentro do controle. Mas não fizemos com que os polos (positivo e negativo) da bateria ligassem aos polos do controle, fazendo assim a energia fluir. Essa talvez seja a parte mais complicada...

Eu fiz o seguinte: Peguei um pedaço de fio condutor fino (aqueles de telefone), e fiz um esquema para os contatos da bateria se conectarem aos do controle. Fiz isso de uma forma que pudesse retirar e colocar a bateria normalmente, a hora que eu quisesse.

Caso deseje fazer o mesmo, a forma de fazer isso vai depender muito do controle. Lembre-se que o número de baterias AA pode variar, bem como a carga de controle para controle. Mas em geral, os controles são bem parecidos. Meu tutorial apenas dá uma idéia de como melhorar o desempenho do controle, no quesito de baterias. No futuro vou tentar melhorar meu projeto, arranjando outros materiais. Na sequencia veja o esquema de ligação dos contatos, para o caso do meu controle:

No fim das contas, foi um ótimo negócio. A bateria do celular dura quase o dobro das baterias recárregaveis comuns, durando um pouco mais até que as pilhas alcalinas. Além disso, é muito mais fácil e rápido fazer a carga da bateria, se analizarmos que estamos falando de uma bateria pequena, e não de três pesadas baterias AA que demoram para carregar e tem uma vida útil muito pequena...

Esse post está aberto para comentários. Fiquem a vontade para tirar suas dúvidas ou darem sugestões.

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

 


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

Conectando a guitarra no computador

CONECTANDO A GUITARRA NO COMPUTADOR

Veja o esquema de como ligar sua guitarra no seu PC.



O esquema é muito simples. A guitarra é ligada no cabo normal, aquele mesmo que você usa para ligar no seu amplificador. O plug da guitarra se chama 'Plug P10'. Uma ponta do cabo é ligada na guitarra; a outra é ligada em um adaptador, que transforma o P10 em 'P2'. O P2 é o mesmo tipo de plug usado em fones de ouvido. Esse adaptador é algo extremamente simples, e pode ser comprado em média por R$ 2,00. O adaptador é ligado em uma das entradas de áudio do computador, seja a LineIn (Azul) ou a de microfone (Rosa). Essas entradas de áudio ficam atráz do computador e são identificadas por cor. Como se pode ver, as caixas de som são ligadas na saída de áudio - conector verde, assim como o normal.

Como se pode ver, é algo muito simples. O adaptador P10->P2 pode ser encontrado em qualquer eletrônica.

 


Posted by: Raphael Zimermann
Posted on: 18/12/2007 at 12:00
Tags: , , , ,
Categories: Matérias
Actions: E-mail | Kick it! | DZone it! | del.icio.us
Post Information: Permalink | Comentários (2) | Post RSSRSS comment feed

Visitas: 1585298