GARANTIR DESCONTO

Fórum Enviar tecla para um componente especifico #344858

22/08/2007

0

Boa tarde,

gostaria de saber como fazer pra fazer uma rolagem automatica de um TWebBrowser. Estou usando um TTimer, e quero que ele vá descendo o texto periodicamente. Nao achei nenhuma função do componente que faça isso.

Então tentei da seguinte forma:
WebBrowser1.SetFocus;
  keybd_event(40,0,0,0);


Mas o SetFocus nao funciona, ele so desce o texto se eu clicar no WebBrowser para ele pegar o foco.

Não teria um jeito melhor? Talvez uma função expecifica do componente, ou um jeito de eu colocar o foco no webbrowser antes de enviar a tecla, ja que o .SetFocus não funciona.

Agradeço desde ja
Victor


Kohl

Kohl

Responder

Posts

22/08/2007

Marcosrocha

Amigo eu já fiz algo semelhante...
O código é um tanto complicado porque eu uso FindWindow para fazer isso...
Mas você consegue encontrar na net artigos e dicas sobre ´como pegar texto do Bloco de Notas´... se não conseguir encontrar me avise que eu procuro a rotina no meu arquivo morto... :D


Responder

Gostei + 0

22/08/2007

Kohl

Pesquisando na internet achei esse codigo pra enviar uma tecla para outra aplicação

var 
  myHandle : THandle; 
begin 
myHandle:= FindWindow( ´MyAppClass´, ´MyAppCaption´); 
if myHandle <> 0 then 
 PostMessage( myHandle, WM_KeyDown, VK_DOWN, 0 ); 
end; 


Mas o problema eh que não eh outra aplicação, eh para o componente que esta no meu form. Eu vi que a função FindWindow retorna HWND, entao tentei fazer essa ´gambiarra´:

PostMessage( WebBrowser1.HWND, WM_KeyDown, VK_DOWN, 0 );

Mas nao funcionou.
Se tiver como postar o codigo que você tem, ou se alguem mais tem uma solução agradeço muito.


Responder

Gostei + 0

23/08/2007

Marcosrocha

kohl a lógica é a mesma amigo, o problema é percorrer os Handles até achar o que você quer, na net você acha uma função com While que percorre todos os componentes de uma Janela. Mas só a título de informação, seu código ficaria algo do tipo:
var 
  myHandle : THandle; 
begin 
  myHandle:= FindWindow(´TApplication´, ´MeuPrograma´); 
  if myHandle <> 0 then
  begin
    myHandle := FindWindow(´TForm´, ´Form Navegador´);
    if myHandle <> 0 then
    begin
      myHandle := FindWindow(´TWebBrowser´, ´WebBrowser1´);
      if myHandle <> 0 then
        PostMessage( myHandle, WM_KeyDown, VK_DOWN, 0 ); 
    end;
  end;
end;



Responder

Gostei + 0

23/08/2007

Kohl

Bom, andei procurando na internet, fiz uns testes e não consegui.

Me parece que não tem como, porque o WebBrowser tem um propriedade .HWND que retorna o seu Handle, mas nao funciona com o keybd_event. Já que ele tem um metodo, então eu tenho como conseguir o seu HWND. O FindWindow nao retornaria esse mesmo valor?

De qualquer forma nao consegui fazer funcionar ele.

Se tiver mais algo pra ajudar agradeço muito, no mais muito obrigado pela ajuda. Vou ver ainda se consigo, mas sem muitas esperanças.


Responder

Gostei + 0

23/08/2007

Emerson Nascimento

tente assim:

SendMessage(WebBrowser1.Handle, WM_VSCROLL, 1, 0); // pra descer

SendMessage(WebBrowser1.Handle, WM_VSCROLL, 0, 0); // pra subir


Responder

Gostei + 0

23/08/2007

Kohl

emerson.en, infelizmente talbem nao funcionou. ele simplesmente nao sai do lugar. esse componente eh muito limitado, muito cheio de restrição.

sera que existe algum componente bom e gratuito para visualizacao de paginas html com css?

obrigado


Responder

Gostei + 0

23/08/2007

Marcosrocha

kohl o Handle é um endereço de memoria de um componente... O problema deve ser o método que você tá usando... Tenta usar o ´SendMessage´.


Responder

Gostei + 0

23/08/2007

Kohl

Bom, seguindo a minha primeira tentativa, resolvi procurar agora um jeito de focar o WebBrowser, ja q o keybd_event funcionava se eu clicasse na tela do WebBrowser.

Encontrei na internet esse codigo

uses ActiveX;
--------------------
with WebBrowser1 do
  if Document <> nil then
    with Application as IOleobject do
      DoVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle,
        GetClientRect); 


Com ele, consigo ajustar o foco do documento html em si, nao do componente e enfim funcionou.

Muito obrigado a todos que ajudaram
Sem mais


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar