Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comment attendre la fin de WebBrowser.Navigate pour demarrer un traitement

3 réponses
Avatar
Atlas informatique
Bonjour,
Je voudrais savoir comment faire un pg qui fait
while (nonfini)
WebBrowser.Navigate (lien)
nonfini=traitement(WebBrowser)
wend

Ce programme lance le traitement avant la fin du chargement du navigateur.
Et comme le chargement tourne, le programme ne rafraichit pas le navigateur
???
Comment faire pour s'en sortir.
De plus, la fin n'est jamais atteint.
Si on lance en debug avec un point d'arret sur le traitement, le pg marche
bien jusqu'au bout, car on prend la main et donc on laisse le navigateur
charger sa page.
Merci pour votre aide

3 réponses

Avatar
Patrice Henrio
Atlas informatique a écrit :
Bonjour,
Je voudrais savoir comment faire un pg qui fait
while (nonfini)
WebBrowser.Navigate (lien)
nonfini=traitement(WebBrowser)
wend

Ce programme lance le traitement avant la fin du chargement du navigateur.
Et comme le chargement tourne, le programme ne rafraichit pas le navigateur
???
Comment faire pour s'en sortir.
De plus, la fin n'est jamais atteint.
Si on lance en debug avec un point d'arret sur le traitement, le pg marche
bien jusqu'au bout, car on prend la main et donc on laisse le navigateur
charger sa page.
Merci pour votre aide




J'espère ne pas être à côté de la plaque mais j'avais ce genre de
problème et je l'ai résolu par des DoEvents. Quant à savoir pourquoi ?

Public Sub InitWBHistoire()
'Bien que cela ne se voit pas dans l'exécution pas à pas, la méthode
.navigate fait appel
'à la méthode WBHistoire_BeforeNavigate2 puis à
WBHistoire_DocumentComplete. Ce premier appel
'avec l'URL Chemin & "Histoires.htm" permet d'initialiser la
collection Paragraphes.
'Dans le fichier Histoire.htm, les titres de paragraphes sont en
rouge et déterminent des balises <DIV>,
'les liens vers les dynasties sont en bleu et correspondent à des
balises ancre <A>.
With FormeHistoire.WBHistoire
.Navigate "file://" & Chemin & "Histoires.htm"
End With
DoEvents
End Sub


Private Sub WBHistoire_BeforeNavigate2(ByVal pDisp As Object, URL As
Variant, flags As Variant, TargetFrameName As Variant, PostData As
Variant, Headers As Variant, Cancel As Boolean)
'Cette méthode n'est utile que pour afficher la forme Dynastie et son
WebBrowser.
'L'URL = Chemin & "Histoires.htm" au premier appel et donc rien ne se passe,
'on passe à WBHistoire_DocumentComplete
If InStr(URL, "/Dynasties.htm#") > 0 Then
Cancel = True 'Il faut arrêter la navigation dans le WBHistoire car
l'URL concernée ne fait pas
'référence à une ancre du texte de ce controle.
FormeDynasties.Visible = True
FormeDynasties.WBDynasties.Navigate URL
End If
DoEvents
End Sub

Private Sub WBHistoire_DocumentComplete(ByVal pDisp As Object, URL As
Variant)
'Cette méthode permet de positionner le texte du WebBrowser Histoire en
fonction de l'année
'L'URL est la première fois Chemin & "Histoires.htm". Les appels
suivants de la méthode
'correspondent à un clic sur une ancre (texte en bleu). cette ancre doit
contenir le symbole &
'dans son nom pour déclencher un évènement. On doit faire ces actions
dans la méthode DocumentComplete
'car sinon les infos du document ne sont pas encore toutes chargées.

ICI TRAITEMENT DU DOCUMENT

end sub
Avatar
parci
On Thu, 13 Dec 2007 20:45:04 +0100, "Atlas informatique"
wrote:

Bonjour,
Je voudrais savoir comment faire un pg qui fait
while (nonfini)
WebBrowser.Navigate (lien)
nonfini=traitement(WebBrowser)
wend

Ce programme lance le traitement avant la fin du chargement du navigateur.
Et comme le chargement tourne, le programme ne rafraichit pas le navigateur
???
Comment faire pour s'en sortir.
De plus, la fin n'est jamais atteint.
Si on lance en debug avec un point d'arret sur le traitement, le pg marche
bien jusqu'au bout, car on prend la main et donc on laisse le navigateur
charger sa page.
Merci pour votre aide




Il faut utiliser les événements et tester éventuellement les
paramètres. Par exemple :

Private m_sUrl As String

Private Sub NavigateTo(sUrl As String)
m_sUrl = sUrl
WebBrowser1.Navigate sUrl
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As
Variant)
If (pDisp Is WebBrowser1.Object) Then
If m_sUrl = Cstr(URL) Then
TraiteDoc WebBrowser1.Document
End If
End If
End Sub

Private Sub TraiteDoc(hDoc As HtmlDocument)
' faire des choses
End Sub


Si tu as une liste de liens à traiter, tu peux par exemple charger
cette liste dans un comobox. Le changement de sélection déclenche la
navigation. A la fin du traitement, tu passes à l'item suivant dans le
combo en modifiant la sélection.

Private m_sUrl As String

' soit cbUrls le combobox
Private Sub ChargeUrls()
With cbUrls
.Clear
' chargement avec une boucle et AddItem
' ....
' lance la première navigation
.ListIndex = 0
End With
End Sub

Private Sub cbUrls_Click()
m_sUrl = cbUrls.Text
WebBrowser1.Navigate cbUrls.Text
End Sub

Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As
Variant)
If (pDisp Is WebBrowser1.Object) Then
If m_sUrl = Cstr(URL) Then
TraiteDoc WebBrowser1.Document
End If
End If
End Sub

Private Sub TraiteDoc(hDoc As HTMLDocument)
' faire des choses

' poursuivre avec le liens suivant
Dim i As Long
i = cbUrls.ListIndex + 1
If i < (cbUrls.ListCount) Then
cbUrls.ListIndex = i
Else
MsgBox "C'est fini"
End If

End Sub

La mauvaise nouvelle pour finir : ça fonctionne en principe sans
problème sauf que j'ai eu des problèmes bizarres et aléatoire de faute
de page avec la dll MSHTML (que j'utilise pour analyser les documents
chargés dans le WebBrowser) lors de chargement nombreux et répétitifs
de documents dans un WebBrowser. L'unique solution que j'ai trouvé
pour les éviter, a été de recréer l'instance du WebBrowser avant toute
navigation (ça signifie mettre le WebBrowser sur un form dédié et
recréer une instance de ce form puis l'inclure dans le formulaire
principal). Même problème d'ailleurs en utilisant directement IE
plutôt que le contrôle WebBrowser. Les patchs existants pour MSHTML
n'ont pas donné non plus de résultat.
Avatar
Atlas informatique
J'ai pas trop bien compris comment je dois faire :
while (nonfini)
WebBrowser.Navigate (lien)
nonfini=traitement(WebBrowser)
wend

"Patrice Henrio" a écrit dans le message de
news: #QIPN#
Atlas informatique a écrit :
> Bonjour,
> Je voudrais savoir comment faire un pg qui fait
> while (nonfini)
> WebBrowser.Navigate (lien)
> nonfini=traitement(WebBrowser)
> wend
>
> Ce programme lance le traitement avant la fin du chargement du


navigateur.
> Et comme le chargement tourne, le programme ne rafraichit pas le


navigateur
> ???
> Comment faire pour s'en sortir.
> De plus, la fin n'est jamais atteint.
> Si on lance en debug avec un point d'arret sur le traitement, le pg


marche
> bien jusqu'au bout, car on prend la main et donc on laisse le navigateur
> charger sa page.
> Merci pour votre aide
>
>
J'espère ne pas être à côté de la plaque mais j'avais ce genre de
problème et je l'ai résolu par des DoEvents. Quant à savoir pourquoi ?

Public Sub InitWBHistoire()
'Bien que cela ne se voit pas dans l'exécution pas à pas, la méthode
.navigate fait appel
'à la méthode WBHistoire_BeforeNavigate2 puis à
WBHistoire_DocumentComplete. Ce premier appel
'avec l'URL Chemin & "Histoires.htm" permet d'initialiser la
collection Paragraphes.
'Dans le fichier Histoire.htm, les titres de paragraphes sont en
rouge et déterminent des balises <DIV>,
'les liens vers les dynasties sont en bleu et correspondent à des
balises ancre <A>.
With FormeHistoire.WBHistoire
.Navigate "file://" & Chemin & "Histoires.htm"
End With
DoEvents
End Sub


Private Sub WBHistoire_BeforeNavigate2(ByVal pDisp As Object, URL As
Variant, flags As Variant, TargetFrameName As Variant, PostData As
Variant, Headers As Variant, Cancel As Boolean)
'Cette méthode n'est utile que pour afficher la forme Dynastie et son
WebBrowser.
'L'URL = Chemin & "Histoires.htm" au premier appel et donc rien ne se


passe,
'on passe à WBHistoire_DocumentComplete
If InStr(URL, "/Dynasties.htm#") > 0 Then
Cancel = True 'Il faut arrêter la navigation dans le WBHistoire car
l'URL concernée ne fait pas
'référence à une ancre du texte de ce controle.
FormeDynasties.Visible = True
FormeDynasties.WBDynasties.Navigate URL
End If
DoEvents
End Sub

Private Sub WBHistoire_DocumentComplete(ByVal pDisp As Object, URL As
Variant)
'Cette méthode permet de positionner le texte du WebBrowser Histoire en
fonction de l'année
'L'URL est la première fois Chemin & "Histoires.htm". Les appels
suivants de la méthode
'correspondent à un clic sur une ancre (texte en bleu). cette ancre doit
contenir le symbole &
'dans son nom pour déclencher un évènement. On doit faire ces actions
dans la méthode DocumentComplete
'car sinon les infos du document ne sont pas encore toutes chargées.

ICI TRAITEMENT DU DOCUMENT

end sub