WebBrowser: Como interceptar mensagem de erro?
Olá.
Bom dia a todos.
Estou trabalhando com um WebBrowser e de vez em quando, apresenta na tela aquela mensagem do IE informando q foi encontrado um erro na página. Na mensagem, pergunta se vc deseja continuar executando script naquela página. Queria descobrir uma forma sempre responder que ´SIM´ a esta mensagem.
Se alguém puder ajudar, agradeço.
Att
Dalton
Bom dia a todos.
Estou trabalhando com um WebBrowser e de vez em quando, apresenta na tela aquela mensagem do IE informando q foi encontrado um erro na página. Na mensagem, pergunta se vc deseja continuar executando script naquela página. Queria descobrir uma forma sempre responder que ´SIM´ a esta mensagem.
Se alguém puder ajudar, agradeço.
Att
Dalton
Dbergkamps10
Curtidas 0
Respostas
Dbergkamps10
08/01/2009
up....
GOSTEI 0
Dbergkamps10
08/01/2009
up de novo
GOSTEI 0
Dbergkamps10
08/01/2009
up de novo.....
GOSTEI 0
Dbergkamps10
08/01/2009
upping....
GOSTEI 0
Johnny-walker
08/01/2009
Infelizmente amigo, vc tem de atualiza o webbrowser, já que é um controle é de 2002 quando foi lançado o delphi e de lá para cá muita coisa mudou...
Neste caso, você em de fazer nova importação da biblioteca do Internet Explorer ´shdocvw.dll´ para resolver este problema e depois instalar o novo webbrowser...
Caso contrário terá de se acostumar com estas mensagens...
Ou fazer isto abaixo:
Faça a importação da dll <shdocvw.dll? em Import type Library e salve esta nova unit no diretório do seu projeto... ela terá mais ou menos o seguinte nome na importação, SHDocVw_TLB.pas.
Depois copie este objeto abaixo e compile no seu projeto:
Seu projeto irá parar de dar estes problemas, neste caso vc deleta o objeto webbrowser antigo e passa a utilizar este que suportará as novas funções.
Aviso, este não contempla o Internet Explorer 7 e sim o 6, ainda não tenho o explorer 7 ou mesmo o mais novo...
Isto é um paliativo para vc nao ter de instalar o objeto no delphi, funciona perfeitamente, pois tenho browsers funcionando deste modo...
bye
Neste caso, você em de fazer nova importação da biblioteca do Internet Explorer ´shdocvw.dll´ para resolver este problema e depois instalar o novo webbrowser...
Caso contrário terá de se acostumar com estas mensagens...
Ou fazer isto abaixo:
Faça a importação da dll <shdocvw.dll? em Import type Library e salve esta nova unit no diretório do seu projeto... ela terá mais ou menos o seguinte nome na importação, SHDocVw_TLB.pas.
Depois copie este objeto abaixo e compile no seu projeto:
Seu projeto irá parar de dar estes problemas, neste caso vc deleta o objeto webbrowser antigo e passa a utilizar este que suportará as novas funções.
Aviso, este não contempla o Internet Explorer 7 e sim o 6, ainda não tenho o explorer 7 ou mesmo o mais novo...
object WebBrowser1: TWebBrowser
Left = 72
Top = 48
Width = 300
Height = 150
TabOrder = 0
ControlData = {
4C0000004D530000AD3300000000000000000000000000000000000000000000
000000004C000000000000000000000001000000E0D057007335CF11AE690800
2B2E12620A000000000000004C0000000114020000000000C000000000000046
8000000000000000000000000000000000000000000000000000000000000000
00000000000000000100000000000000000000000000000000000000}
end
Isto é um paliativo para vc nao ter de instalar o objeto no delphi, funciona perfeitamente, pois tenho browsers funcionando deste modo...
bye
GOSTEI 0
Johnny-walker
08/01/2009
eis aih o motivo do seu desespero...
Fonte: Johnny Walker (Tirado de uma artigo que escrevi sobre este controle)
bye
procedure TWebBrowser.InitControlData;
const
CEventDispIDs: array [0..17] of DWORD = (
$00000066, $0000006C, $00000069, $0000006A, $00000068, $00000071,
$00000070, $000000FA, $000000FB, $000000FC, $00000103, $000000FD,
$000000FE, $000000FF, $00000100, $00000101, $00000102, $00000104);
CControlData: TControlData2 = (
ClassID: ´{8856F961-340A-11D0-A96B-00C04FD705A2}´;
EventIID: ´{34A715A0-6587-11D0-924A-0020AFC7AC4D}´;
EventCount: 18;
EventDispIDs: @CEventDispIDs;
LicenseKey: nil (*HR:$80040154*);
Flags: $00000000;
Version: 401);
begin
ControlData := @CControlData;
TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnStatusTextChange) - Cardinal(Self);
end;
Observe que aponta para uma contagem de apenas 18 eventos (EventCount: 18;) e abaixo temos o novo controle que por acaso é do site koders:
FONTE: http://www.koders.com/delphi/fid3DF3045245F6C5DA362498652FC092868F59CF13.aspx
procedure TEWB.InitControlData;
const
CEventDispIDs: array[0..33] of DWORD = (
$00000066, $0000006C, $00000069, $0000006A, $00000068, $00000071,
$00000070, $000000FA, $000000FB, $000000FC, $00000103, $000000FD,
$000000FE, $000000FF, $00000100, $00000101, $00000102, $00000104, $00000105,
$00000106, $00000108, $00000109, $0000010A, $0000010B, $00000107,
$0000010C, $0000010D, $0000010E, $0000010F, $000000E1, $000000E2,
$000000E3, $00000110, $00000111);
CControlData: TControlData2 = (
ClassID: ´{8856F961-340A-11D0-A96B-00C04FD705A2}´;
EventIID: ´{34A715A0-6587-11D0-924A-0020AFC7AC4D}´;
EventCount: 34;
EventDispIDs: @CEventDispIDs;
LicenseKey: nil (*HR:$80040111*);
Flags: $00000000;
Version: 401);
begin
ControlData := @CControlData;
TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnStatusTextChange) - Cardinal(Self);
end;
Aqui você pode ver a nova unit que importei no meu sistema ou pelo menos parte dela, seu nome quando na importação fica SHDocVw_TLB.pas e fica em Letra_do_Drive:\Arquivos de programas\Borland\Delphi7\Imports. Lembrando que o Delphi utiliza a unit chamada SHDocVw.pas, apesar de que as implementações do koders são diferentes da importação do Delphi, veja no koders:
procedure TEWB.InitControlData;
Do Delphi:
procedure TWebBrowser.InitControlData;
Como podem notar é muito semelhante ao do koders que deve ter algumas atualizações da Microsoft a mais do que eu. Vejam que (EventCount: 34;) do koders aponta para 34 eventos enquanto que em minha importação somente 33 (EventCount: 33;).
FONTE: Motor de Importação de Objetos Activex do Delphi 7 <Import Type Library>
procedure TWebBrowser.InitControlData;
const
CEventDispIDs: array [0..32] of DWORD = (
$00000066, $0000006C, $00000069, $0000006A, $00000068, $00000071,
$00000070, $000000FA, $000000FB, $000000FC, $00000103, $000000FD,
$000000FE, $000000FF, $00000100, $00000101, $00000102, $00000104,
$00000106, $00000108, $00000109, $0000010A, $0000010B, $00000107,
$0000010C, $0000010D, $0000010E, $0000010F, $000000E1, $000000E2,
$000000E3, $00000110, $00000111);
CControlData: TControlData2 = (
ClassID: ´{8856F961-340A-11D0-A96B-00C04FD705A2}´;
EventIID: ´{34A715A0-6587-11D0-924A-0020AFC7AC4D}´;
EventCount: 33;
EventDispIDs: @CEventDispIDs;
LicenseKey: nil (*HR:$80040111*);
Flags: $00000000;
Version: 401);
begin
ControlData := @CControlData;
TControlData2(CControlData).FirstEventOfs := Cardinal(@@FOnStatusTextChange) - Cardinal(Self);
end;
Fonte: Johnny Walker (Tirado de uma artigo que escrevi sobre este controle)
bye
GOSTEI 0
Dbergkamps10
08/01/2009
Grande Jonhnny, valeu pela dica. Conforme já tinha lhe dito, migrei para o Delphi 2007, e espero nao ter este problema. Mas, ainda resta uma dúvida: desenvolvi uma rotina de pesquisa automática em um site, mas quando a pesquisa não encontra nenhum registro, o Internet Explorer retorna uma mensagem: ´Nenhum Registro Encontrado´. Como faço pra verificar quando isso acontecer?
Se puder ajudar, agradeço.
Att
Dalton
Se puder ajudar, agradeço.
Att
Dalton
GOSTEI 0
Dbergkamps10
08/01/2009
Olá,
Grande Jonhnny, segue aí o código da página que vc pediu:
Desde já agradeço,
Att
Dalton
Grande Jonhnny, segue aí o código da página que vc pediu:
function PisSaltaOnKeyUp(Valor){
Tam = Valor.Length
if (Tam == 11) {
if (!BWValidaDV_A(document.FrmAtend.txtPISPASEP.value)) {
alert(´Digite um n.° de NIS válido´);
document.all.txtPISPASEP.focus()
}
}
}
Desde já agradeço,
Att
Dalton
GOSTEI 0
Johnny-walker
08/01/2009
Amigo, isto aih acontece é pq pede para vc preencher o campo antes de dar ok, caso esteja vazio ou mesmo não for um número de pis válido acontecerá sempre isto... isto devido haver verificação na página do número do pis pelo seu dígito verificador e tb se o campo está vazio...
neste caso é somente enviar o valor para o campo do webbrowser e de preferência já com a verificação do digito verificador para que na hora de der um submit na página nao acontecer esta mensagem tb...
Aih vc terá que saber em qual local é guardado o campo, se é um frame, form e etc...
bye...
neste caso é somente enviar o valor para o campo do webbrowser e de preferência já com a verificação do digito verificador para que na hora de der um submit na página nao acontecer esta mensagem tb...
Aih vc terá que saber em qual local é guardado o campo, se é um frame, form e etc...
bye...
GOSTEI 0
Dbergkamps10
08/01/2009
Olá,
Fiz o q o colega Jonhnnhy recomendou, mas o componente da erro de access violation. Gostaria de saber se tem como nas configurações do iexplore, eu desativar essa confirmação de scripts.
Att
Dalton
Fiz o q o colega Jonhnnhy recomendou, mas o componente da erro de access violation. Gostaria de saber se tem como nas configurações do iexplore, eu desativar essa confirmação de scripts.
Att
Dalton
GOSTEI 0