none
Besoin d'aide pour recherche de texte dans WebBrowser RRS feed

  • Question

  • Bonjour, j'essaie de faire une appli de recherche de texte dans un Web browser
    Jusqu'ici tout va bien, les problèmes interviennent au niveau des résultats. 

    1er problème 
    J'aimerais que s'il y a des résultats, qu'il soit mis en surbrillant sans modifier le code de la page, car ceci pose des problèmes lorsque les résultats sont dans des liens ou autres. 

    2e problème s'il y a des résultats hors du champ de vision, j'aimerais que le web browser scroll automatiquement. 

    et enfin un petit supplément(optionnel je pense pouvoir y arriver une fois les 2 problèmes résolu :) ) que je n'ai pas encore essayé j'avoue j'aimerais faire 2 boutons(un résultat de recherche précédent et l'autre résultat suivant. 

    If WebBrowser1.Document.Body.InnerHtml.IndexOf(TxtRecherche.Text) <> -1 Then

    WebBrowser1.Document.Body.InnerHtml = WebBrowser1.Document.Body.InnerHtml.Replace(TxtRecherche.Text, "<span style=""background-color:red"">" & TxtRecherche.Text & "</span>")

    End If

    Merci par avance pour votre aide 

    mercredi 25 mars 2015 17:15

Réponses

  • J'arrive à peu prêt à faire ce que je veut en utilisant le code fournis ici https://social.msdn.microsoft.com/Forums/en-US/b8c9d5d5-8d85-49ee-91e3-0753a6ead023/webbrowser-find-dialog?forum=Vsexpressvcs

    sauf que au bout de quelque occurence de mot, j'obtient : Exception de HRESULT : 0x800A025E

    aux code rng.select()

    le code : 

      Private Function GetSelection() As String
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = doc.selection
            Dim range As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            Return range.text
        End Function

        Private Function FindFirst(ByVal text As String) As Boolean
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = CType(doc.selection, IHTMLSelectionObject)
            sel.empty()
            ' get an empty selection, so we start from the beginning
            Dim rng As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            If rng.findText(text, 1000000000, 0) Then
                rng.select()
                Return True
            End If
            Return False
        End Function

        Public Function FindNext(ByVal text As String) As Boolean
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = doc.selection
            ' (IHTMLSelectionObject)doc.selection;
            Dim rng As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            rng.collapse(False)
            ' collapse the current selection so we start from the end of the previous range
            If rng.findText(text, 1000000, 0) Then
                Try
                    rng.select()
                Catch ex As Exception
                    ' Show the exception's message.
                    MessageBox.Show(ex.Message)
                End Try
                Return True
            Else
                FindFirst(text)
            End If
            Return False
        End Function


        Public Function FindPrevious(ByVal text As String) As Boolean
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = CType(doc.selection, IHTMLSelectionObject)
            Dim rng As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            rng.collapse(True)
            ' it should be true,so it goes to start of the document
            If rng.findText(text, -1, 0) Then
                Try
                    rng.select()
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
                Return True
            Else
                FindFirst(text)
            End If
            Return False
        End Function

    Merci  de venir à mon aide svp 

    Cordialement


    • Marqué comme réponse kalicem samedi 28 mars 2015 18:56
    samedi 28 mars 2015 03:38

Toutes les réponses

  • Bonjour kalicem,

    Quelles technologies et langage de programmation utilisez-vous?

    Cordialement,

    Nina


    Microsoft propose ce service gratuitement, dans le but d'aider les utilisateurs et d'élargir les connaissances générales liées aux produits et technologies Microsoft. Ce contenu est fourni "tel quel" et il n'implique aucune responsabilité de la part de Microsoft.

    jeudi 26 mars 2015 14:35
    Modérateur
  • Bonjour, Visual basic Avec net framwork 4.5 dans visual studio 2013

    ce que j'aimerais faire la même chose que https://mega.co.nz/#!tl8GHCAb!3-DB_pFHCEyLxWF58y00GKYghZa84_8Sx3J450SgIxM en changeant la RichTextBox en WebBrowser 

    Cordialement



    • Modifié kalicem jeudi 26 mars 2015 19:41
    jeudi 26 mars 2015 19:05
  • J'arrive à peu prêt à faire ce que je veut en utilisant le code fournis ici https://social.msdn.microsoft.com/Forums/en-US/b8c9d5d5-8d85-49ee-91e3-0753a6ead023/webbrowser-find-dialog?forum=Vsexpressvcs

    sauf que au bout de quelque occurence de mot, j'obtient : Exception de HRESULT : 0x800A025E

    aux code rng.select()

    le code : 

      Private Function GetSelection() As String
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = doc.selection
            Dim range As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            Return range.text
        End Function

        Private Function FindFirst(ByVal text As String) As Boolean
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = CType(doc.selection, IHTMLSelectionObject)
            sel.empty()
            ' get an empty selection, so we start from the beginning
            Dim rng As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            If rng.findText(text, 1000000000, 0) Then
                rng.select()
                Return True
            End If
            Return False
        End Function

        Public Function FindNext(ByVal text As String) As Boolean
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = doc.selection
            ' (IHTMLSelectionObject)doc.selection;
            Dim rng As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            rng.collapse(False)
            ' collapse the current selection so we start from the end of the previous range
            If rng.findText(text, 1000000, 0) Then
                Try
                    rng.select()
                Catch ex As Exception
                    ' Show the exception's message.
                    MessageBox.Show(ex.Message)
                End Try
                Return True
            Else
                FindFirst(text)
            End If
            Return False
        End Function


        Public Function FindPrevious(ByVal text As String) As Boolean
            Dim doc As IHTMLDocument2 = CType(Form1.WebBrowser1.Document.DomDocument, IHTMLDocument2)
            Dim sel As IHTMLSelectionObject = CType(doc.selection, IHTMLSelectionObject)
            Dim rng As IHTMLTxtRange = CType(sel.createRange, IHTMLTxtRange)
            rng.collapse(True)
            ' it should be true,so it goes to start of the document
            If rng.findText(text, -1, 0) Then
                Try
                    rng.select()
                Catch ex As Exception
                    MessageBox.Show(ex.Message)
                End Try
                Return True
            Else
                FindFirst(text)
            End If
            Return False
        End Function

    Merci  de venir à mon aide svp 

    Cordialement


    • Marqué comme réponse kalicem samedi 28 mars 2015 18:56
    samedi 28 mars 2015 03:38