Fórum WebBrowser: Como interceptar mensagem de erro? #367599
08/01/2009
0
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
Curtir tópico
+ 0Posts
09/01/2009
Dbergkamps10
Gostei + 0
10/01/2009
Dbergkamps10
Gostei + 0
12/01/2009
Dbergkamps10
Gostei + 0
14/01/2009
Dbergkamps10
Gostei + 0
15/01/2009
Johnny-walker
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
15/01/2009
Johnny-walker
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
23/01/2009
Dbergkamps10
Se puder ajudar, agradeço.
Att
Dalton
Gostei + 0
24/01/2009
Dbergkamps10
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
25/01/2009
Johnny-walker
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
08/02/2009
Dbergkamps10
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
Clique aqui para fazer login e interagir na Comunidade :)