none
Propriétés des composants MSHTML RRS feed

  • Question

  • bonjour,

    je souhaiterais recuperer dans une fenêtre de propriété toutes les propriété de l'élément html sélectionner qui est créer dans un webBrowser.

    C'est pour un éditeur wisiwing html. par exemple, un tableau et je voudrais recuperer toutes les propriétés (width, height .....) du composant sélectionner dans le webBrowser.

    Savez vous comment faire ?

    Merci d'avance.
    lundi 8 février 2010 12:45

Réponses

  • Bonjour David,

     

    Je crois avoir trouvé une solution, mais il me semble difficile et je ne sais pas si l’effort est justifié.

     

    Le premier problème de votre application est que vous avez besoin d’appeler une méthode du votre contrôle windows à partir d’une action dans un composant html.

     

    Pour ça, il faut lire la documentation d’ici :

    http://msdn.microsoft.com/fr-fr/library/system.windows.forms.webbrowser.objectforscripting.aspx

     

    Dans cet exemple la, on construit un bouton dans le contrôle html (votre composant webBrowser, par exemple) et on lui ajoute l’appel d’une fonction window.external sur l’évènement click. Donc ce contrôle ne va pas appeler une fonction à l’intérieur du document web, mais une fonction de la classe qui le contient, c’est-à-dire le formulaire windows.

     

    Dans la méthode du formulaire windows, qui sera appelée par le click du bouton html, on va essayer à lire  les propretés du webBrowser.Document.DomDocument. Là, on trouve les informations sur les objets du document html, et on peut lire leurs propretés.

     

    Si vous regardez les propretés du webBrowser.Document.DomDocument en mode debug, vous allez voire la propriété activeElement, qui contient les membres offsetHeight, offsetWidth, etc ; exactement ce que vous cherchez. Malheureusement, on ne peut pas lire ces propretés directement dans le code, et on doit utiliser un cast. Par exemple :

    (((mshtml.HTMLDocumentClass)(this.webBrowser1.Document.DomDocument)).activeElement).offsetWidth.ToString()

    Il faut aussi ajouter la référence Microsoft.mshtml a votre projet, pour avoir accès a mshtml.HTMLDocumentClass.

    J’espère que ces informations vous mettront sur le bon chemin. Si vous avez encore des questions, n’hésitez pas.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Alex Petrescu vendredi 19 février 2010 09:31
    mercredi 17 février 2010 10:52

Toutes les réponses


  •  

    Bonjour,

     

    Pouvez-vous nous donner plusieurs informations sur l’outil de développement que vous utilisez?

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mercredi 10 février 2010 08:22
  • j'utilise visual studio express 2008

    merci

    • Modifié dad72 mardi 16 février 2010 23:44
    dimanche 14 février 2010 12:39
  • Bonjour,

     

    Je vous remercie pour avoir consulté les services de MSDN et je suis désolé pour le fait que vous n’avez pas reçu une réponse dans un délai de temps plus raisonnable.

     

    Si une réponse ne vous a été fournie, c’est parce-que personne n’en a trouvé jusqu’à présent. Je vous assure que votre question n’est pas oubliée et qu’on fait tout le possible pour trouver une solution.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    lundi 15 février 2010 13:48
  • bonjour,

    Je vous remercie pour votre reponse, je suppose que ma question est difficile et je ne trouve rien sur le net qui règle mon problème depuis 15 jours, je cherche des journées complète sans succès, ce qui est frustrant si en plus personne ne nous répond, ni ici, ni sur le forum développer.com. Je constate que vous chercher des solutions et vous en remercie vivement.

    Je suis ouvert a toute information complémentaire qui vous permettrais de mieux comprendre ce que je veux faire (exemple de code, ou un mini projet fait avec visual stutio 2008).

    Je souhaite simplement recuperer les propriétés html dans un PropertyGrid les composants mshtml.IHTMLdocument2 qu'il s'affiche par sélection est ce modifie par le PropertyGrid et visse versa.

    Cordialement,

    David


    lundi 15 février 2010 16:16
  • Bonjour,

     

    Je travaille maintenant sur un petit projet pour essayer de reproduire votre scenario. Je n’ai pas trouvé la solution encore, mais je vais vous annoncer dès que j’ai des informations utiles.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mardi 16 février 2010 13:01
  • bonjour,

    J'avais fait un petit projet qui reproduit exactement mon scenario avec les fenêtre ancrer avec dockpanel... tout est dans le projet.

    Je vous propose de le télécharger pour que vous voyez exactement ce que j'ai fait. (peut etre mis suis je mal pris)

    Et merci beaucoup de vous pencher sur mon problème, je suis ravie.

    TestePropertyGrid.zip (257 Ko)

    Merci encore a vous Alex.

    David
    mardi 16 février 2010 20:04
  • Bonjour David,

     

    Je crois avoir trouvé une solution, mais il me semble difficile et je ne sais pas si l’effort est justifié.

     

    Le premier problème de votre application est que vous avez besoin d’appeler une méthode du votre contrôle windows à partir d’une action dans un composant html.

     

    Pour ça, il faut lire la documentation d’ici :

    http://msdn.microsoft.com/fr-fr/library/system.windows.forms.webbrowser.objectforscripting.aspx

     

    Dans cet exemple la, on construit un bouton dans le contrôle html (votre composant webBrowser, par exemple) et on lui ajoute l’appel d’une fonction window.external sur l’évènement click. Donc ce contrôle ne va pas appeler une fonction à l’intérieur du document web, mais une fonction de la classe qui le contient, c’est-à-dire le formulaire windows.

     

    Dans la méthode du formulaire windows, qui sera appelée par le click du bouton html, on va essayer à lire  les propretés du webBrowser.Document.DomDocument. Là, on trouve les informations sur les objets du document html, et on peut lire leurs propretés.

     

    Si vous regardez les propretés du webBrowser.Document.DomDocument en mode debug, vous allez voire la propriété activeElement, qui contient les membres offsetHeight, offsetWidth, etc ; exactement ce que vous cherchez. Malheureusement, on ne peut pas lire ces propretés directement dans le code, et on doit utiliser un cast. Par exemple :

    (((mshtml.HTMLDocumentClass)(this.webBrowser1.Document.DomDocument)).activeElement).offsetWidth.ToString()

    Il faut aussi ajouter la référence Microsoft.mshtml a votre projet, pour avoir accès a mshtml.HTMLDocumentClass.

    J’espère que ces informations vous mettront sur le bon chemin. Si vous avez encore des questions, n’hésitez pas.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    • Marqué comme réponse Alex Petrescu vendredi 19 février 2010 09:31
    mercredi 17 février 2010 10:52
  • Bonjour Alex,

    Merci beaucoup pour cette solution qui n'est pas tout a fait ce que je recherche, cela ne s'adapte pas a ma situation. j'aurais cependant appris quelque chose avec votre solution. bref, je n'arrive pas a recuperer les propriétés dans un PropertyGrid en sélectionnant le composant.

    Aussi j'ai plusieurs fenêtre Windows : Une pour l'éditeur html, une autre pour le PropertyGrid et une autre comme fenetre primcipal qui utilise un dockpanel ("WeifenLuo.WinFormsUI.Docking.dll") pour ancrer les 2 fentres (editeur et PropertyGrid). tout mon programme est fait sur un dockpanel qui me permet une meilleur séparation en plusieurs fenêtre des divers élément de mon programme.

    Je vous propose mon petit projet de teste annexe que j'ai fait, qui montre a l'exactitude ce que je souhaite. le projet a juste un simple exemple avec un bouton html et les 2 fenêtre ancrer avec "WeifenLuo.WinFormsUI.Docking.dll" rien de plus pour faciliter sa compréhension.

    s'il vous plait essayer avec mon petit projet, cela seras le plus proche scenario de ce que je souhaite faire (je ne vous l'aurais pas fait pour rien comme ca, lol).

    Merci d'avance pour ce que vous faite pour moi, mon problème est assez particulier a ce que je voie.

    Projet a jour :

    TestePropertyGrid.zip (237 Ko)
    mercredi 17 février 2010 13:24
  • Bonjour,

     

    Justement, j’avais commencé la recherche à partir de votre projet et je pense que la solution est applicable. J’ai teste sur un autre projet, simplifié, mais le principe est le même. Je vais essayer d’implémenter dans votre projet aussi cette solution.

    Vous pouvez me contacter sur l’adresse d’e-mail alexptr@live.com si vous avez besoin d’explications plus détaillées sur cette solution.

     

    Cordialement,

    Alex


    Alex Petrescu - MSFT
    mercredi 17 février 2010 15:44
  • Bonsoir,

    Je vous est envoyer un mail comme proposer. en vous remerciant.

    Cordialement.
    mercredi 17 février 2010 19:11