IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++Builder Discussion :

Recuperer source page web


Sujet :

C++Builder

  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par d�faut Recuperer source page web
    bonjour
    je n'arrive pas a faire fonctionner le code d�crit dans la faq pour r�cup�rer la source d'un page web.
    je souhaite l'affichez dans un doc pour voir ce qu'il recupere mais mon doc reste vide.
    avez vous une id�e de mon erreur? merci

    mon code :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    // fonction non modifiée de la faq
    AnsiString __fastcall GetSource (TCppWebBrowser * browser)
    {
       IHTMLDocument3 *html = NULL;
       IHTMLElement *element = NULL;
       BSTR string = L"";
     
       try
       {
          if (browser->Document != NULL)
          {
             OleCheck(browser->Document->QueryInterface(IID_IHTMLDocument3,(LPVOID*)&html));
             OleCheck(html->get_documentElement(&element));
             OleCheck(element->get_outerHTML(&string));
          }
       }
       catch (EOleSysError &eOSE)
       {
          if (element != NULL)
          {
             element->Release();
          }
          if (html != NULL)
          {
             html->Release();
          }
          throw eOSE;
       }
       return (AnsiString) string;
    }
     
    // un bouton pour la tester
     
    void __fastcall TForm3::Button7Click(TObject *Sender)
    {
    GetSource (Form2 -> CppWebBrowser1);
    }
     
    // affichage sous word
     
    void __fastcall TForm3::Button2Click(TObject *Sender)
    {
     
    WideString source;
    //txt = VarToStr(aContenuHTML);
    source = string.c_str();
     
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        vFileName = "c:\\test.doc";
        Variant vMSWord;
    try
            {
     
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
     
        vWDocuments = vMSWord.OlePropertyGet("Documents");
        vWDocument = vWDocuments.OleFunction("Open", vFileName,vReadOnly);
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",source);
    }

  2. #2
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Merci de mieux lire la FAQ avant de poster
    l'article mentionn� est parfaitement fonctionnel, mais il faut parfois le lire dans son entier
    cdlt
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

  3. #3
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Salut manworms2
    DjmSoftware a raison il faut lire correctement les exemples fournis, et prendre le temps de reflechir, les codes fournis demandent toujours a etre adaptes
    Sur la Form un TButton pour ouvrir la page Web et un CppWebBrowser pour l'affichage, un TButton pour copier le CppWebBrowser dans word
    le .cpp
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <mshtml.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "SHDocVw_OCX"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
    CppWebBrowser1->Navigate((TVariant)"<a href="http://www.site.com/page.html" target="_blank">http://www.site.com/page.html</a>", &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString aContenuText = "";
    AnsiString aContenuHTML = "";
    Variant vDocument = CppWebBrowser1->ControlInterface->Document;
    if (((IDispatch *)vDocument) != NULL)
    {
       Variant vBody = vDocument.OlePropertyGet("Body");
       Variant vContenuText = vBody.OlePropertyGet("InnerText");
       Variant vContenuHTML = vBody.OlePropertyGet("InnerHTML");
       aContenuText = vContenuText;
       aContenuHTML = vContenuHTML;
    }
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        Variant vMSWord;
    try
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
        vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(aContenuText));
    }
    //---------------------------------------------------------------------------

  4. #4
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par d�faut
    merci pour vos r�ponses
    blondelle j'ai essayer ton code mais il ne r�cup�re pas la source, seulement le texte de la page.

    j'ai l'erreur lors de la compilation:
    "unresolved external Tform3 Get source referenced from UNIT3.OBJ"

    merci

  5. #5
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Dans la chaine de code
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(aContenuText));
    remplacer " aContenuText " par " aContenuHTML " pour recuperer le code HTML
    pour l'erreur soit tu a cree une Form non defini dans les autres Forms ou tu a enleve de ton code une Form sans effacer completement ses references dans les autres Forms

  6. #6
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par d�faut
    merci pour ta r�ponse , seulement la fonction que tu mentionne ne r�cup�re que 1/3 du code source de la page.

  7. #7
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Etonnant mais bon, essaye avec le code que tu avait propose
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
     
    //---------------------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    #include "Unit1.h"
    #include <mshtml.h>
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma link "SHDocVw_OCX"
    #pragma link "SHDocVw_OCX"
    #pragma resource "*.dfm"
    TForm1 *Form1;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    TVariant vFlags = {0}, vTargetFrameName={0}, vPostData={0}, vHeaders={0};
    CppWebBrowser1->Navigate((TVariant)"<a href="http://www.site.com/page.html" target="_blank">http://www.site.com/page.html</a>", &vFlags, &vTargetFrameName, &vPostData, &vHeaders);
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString aContenuText = "";
    AnsiString aContenuHTML = "";
    Variant vDocument = CppWebBrowser1->ControlInterface->Document;
    if (((IDispatch *)vDocument) != NULL)
    {
       Variant vBody = vDocument.OlePropertyGet("Body");
       Variant vContenuText = vBody.OlePropertyGet("InnerText");
       Variant vContenuHTML = vBody.OlePropertyGet("InnerHTML");
       aContenuText = vContenuText;
       aContenuHTML = vContenuHTML;
    }
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        Variant vMSWord;
    try
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
        vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(aContenuHTML));
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
       IHTMLDocument3 *html = NULL;
       IHTMLElement *element = NULL;
       BSTR string = L"";
       try
       {
          if (CppWebBrowser1->Document != NULL)
          {
             OleCheck(CppWebBrowser1->Document->QueryInterface(IID_IHTMLDocument3,(LPVOID*)&html));
             OleCheck(html->get_documentElement(&element));
             OleCheck(element->get_outerHTML(&string));
          }
       }
       catch (EOleSysError &eOSE)
       {
          if (element != NULL)
          {
             element->Release();
          }
          if (html != NULL)
          {
             html->Release();
          }
          throw eOSE;
       }
    //   return (AnsiString) string;
        Variant vFileName, vReadOnly, vWDocuments, vWDocument;
        Variant vMSWord;
    try
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
    catch(...)
            {
        vMSWord = Variant::CreateObject("Word.Application");
            }
        vMSWord.OlePropertySet("Visible", true);
        vReadOnly = false; // lecture seule
        vWDocuments = vMSWord.OlePropertyGet("Documents");
     vWDocument = vWDocuments.OleFunction("Add");
        vMSWord.OlePropertyGet("Selection").OleProcedure("TypeText",WideString(string));
    }
    //---------------------------------------------------------------------------
    J'ai juste ajoute un TButton

  8. #8
    Membre confirm�
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    103
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 103
    Par d�faut
    merci blondelle mais j'ai toujours le m�me probl�me , il ne r�cup�re que environ 1/3 de la page , il est vrai que la source est importante , 1/3 prend d�j� 9 pages word.
    dans un premier temps , je souhaiterais r�cup�rer un array nomm� "var TabVersion" dans la source. j'ai cherch� mais je ne sais pas comment utiliser OlePropertyGet .

    merci

  9. #9
    R�dacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par d�faut
    Peut etre en passant par un TMemo, plutot quand passant par uune string
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
     
    Memo1->Lines->Add(vContenuText);
    ou
    Memo1->Lines->Add(vContenuHTML);
    ou
    Memo1->Lines->Add(string);
    pour le TMemo mettre sa propriete " ScrollBars " a " ssVertical "

  10. #10
    Membre tr�s actif Avatar de Argol_Medusa
    Homme Profil pro
    Ing�nieur Radiofr�quences
    Inscrit en
    Ao�t 2005
    Messages
    208
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Ing�nieur Radiofr�quences
    Secteur : High Tech - �lectronique et micro-�lectronique

    Informations forums :
    Inscription : Ao�t 2005
    Messages : 208
    Par d�faut
    Citation Envoy� par blondelle Voir le message
    Peut etre en passant par un TMemo, plutot quand passant par uune string
    Heu je dis �a de t�te mais il n'y a pas une limitation en lignes dans un TMemo ?
    Du genre 65536 lignes ?

    V�rifiez ce point, c'�tait peut-etre sur le builder 6 seulement.

    V�rifiez aussi le aContenuHTML, mais �a peut fort bien expliquer cette limite rencontr�e dans la lecture de la page web.


    Sinon autre possibilit� : faire directement un download du fichier, puis le traiter en suite sans passer par le composant CppWebBrowser, c'est encore plus simple.

  11. #11
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Responsable de compte
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par d�faut
    Heu je dis �a de t�te mais il n'y a pas une limitation en lignes dans un TMemo ?
    Du genre 65536 lignes ?
    cette limitation n'a plus lieu depuis NT4
    cdlt
    vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les r�gles du forum

Discussions similaires

  1. winsock source page web diff�rente
    Par PoZZyX dans le forum Windows
    R�ponses: 5
    Dernier message: 24/05/2007, 12h05
  2. recuperer une page web
    Par openWorld dans le forum Langage
    R�ponses: 5
    Dernier message: 19/05/2007, 11h11
  3. recuperer une page web
    Par Liiscar dans le forum Documents
    R�ponses: 1
    Dernier message: 10/01/2007, 18h29
  4. Recuperer une page Web sous Windows
    Par tmanta7 dans le forum R�seau
    R�ponses: 7
    Dernier message: 22/05/2006, 23h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo