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

Web & réseau Delphi Discussion :

À propos de la sauvegarde d'une page affichée dans un TWebBrowser


Sujet :

Web & réseau Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut À propos de la sauvegarde d'une page affichée dans un TWebBrowser
    Bonjour,

    Je cherchais comment enregistrer une page affichée dans un TWebBrowser, j'ai fini par trouver la bonne syntaxe en parcourant la FAQ, avec une ligne du type :

    MyWebBrowser.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);

    ce qui fonctionne parfaitement, mais il me reste une question.

    Comment récupérer le nom de fichier qui a été attribué au fichier par l'utilisateur dans le dialogue d'enregistrement ?

    J'en ai même une deuxième, mais moins importante, existe-t-il un moyen de "prépositionner" le type de document souhaité (page web complète, archive web, page HTML seule...) dans le dialogue de sauvegarde ainsi invoqué ?

    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    A Savoir que tu peux accéder via la propriété "WebBrowser.OleObject.Document.Body.InnerHTML", tu as accès au source de la page, attention, ces objets sont des variants (late binding) et sont remplis de manière asynchrone, voir le sujet "Afficher page HTML dans Delphi"
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut
    Bien que je doute de pouvoir trouver le nom du fichier à partir du code HTML de la page, je vais tenter d'explorer cette piste.

    J'espérais plutôt une explication claire sur la façon d'utiliser l'interface iDispatch de la propriété Document de mon composant WebBrowser, car tout ce que j'ai pu trouver à ce sujet jusqu'à présent m'a semblé fumeux, incomplet, et les rares exemples peu parlants. Mais j'ai peut-être mal cherché.

    En tout cas, je te remercie beaucoup pour ta réponse.

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 939
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    Par défaut
    Ce que te propose Shai est de récupérer le code html, de le charger dans une StringList (par exemple) et de gérer toi-même la sauvegarde avec un SaveDialog.

  5. #5
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut
    Oups... Cette interprétation de sa réponse ne m'avait pas sauté aux yeux, merci.

    Elle est effectivement de nature à résoudre très facilement mon problème, dans la mesure où la sauvegarde que j'envisageais concernait juste la page HTML seule, sans ses fichiers associés (images, feuilles de styles, etc).

    Si j'avais voulu enregistrer la page complète, ça m'aurait fait nettement plus de boulot, et si j'avais voulu l'enregistrer au format ".mht", je pense que j'aurais eu un peu de mal à implémenter l'écriture moi-même.

    Je vais donc passer ma question à "Résolue" très prochainement, mais je regrette quand même un peu que certaines questions demeurent un mystère pour moi. Par exemple : ExecWB peut être utilisée avec deux paramètres supplémentaires (un pointeur en entrée, un en sortie), mais leur utilisation n'est documentée nulle part. J'aurais trouvé normal qu'au moins sur msdn, on trouve un petit tableau indiquant pour chaque type de fonction "OLECMDID_" quel(s) paramètre(s) on peut passer en entrée et/ou recevoir en sortie, mais rien...

    Quoi qu'il en soit, merci encore à vous deux.

  6. #6
    Membre averti
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2004
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 20
    Par défaut Problème résolu
    J'avais d'autres priorités, d'où le délai, mais en revenant à ce problème, j'ai trouvé la solution.

    L'ennui, avec la suggestion de Shai, hormis le fait qu'il faut soi-même coder la partie écriture du fichier (ce qui n'est pas un problème), c'est surtout qu'elle ne permet d'accéder, au mieux, qu'à ce qui est compris à l'intérieur de la balise <HTML>. Adieu, donc, les en-têtes de document du genre <!DOCTYPE...> et autres préliminaires.

    Heureusement, après de fastidieuses recherches, je suis tombé sur cet article en anglais.

    Le résultat obtenu avec le code ci-dessous est exactement le même qu'avec MyWebBrowser.ExecWB(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT); en choisissant l'option "Page Web, HTML uniquement" (exactement ce que je voulais), sauf que j'ai le contrôle sur l'ensemble des paramètres auxquels j'ai besoin d'accéder.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.BtSaveClick(Sender: TObject);
    Var
      HResult : Integer;
      SUrl, SFile: string;
      pSUrl, pSFile: PAnsiChar;
    begin
      SUrl:= String(Webb.LocationURL);
      pSUrl:= Pointer(SUrl);
      SFile:= <nom complet du fichier>;
      pSFile:= Pointer(SFile);
      HResult := URLDownloadToFileA(nil, pSUrl, pSFile, 0, nil);
    end;
    En espérant que ça puisse servir à quelqu'un !

    NB - La fonction URLDownloadToFile et ses dérivées (URLDownloadToFileA, URLDownloadToFileW) se trouvent dans l'unité (uses) URLMon.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher une page html dans un jtextpane
    Par fievel dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/03/2006, 17h36
  2. Réponses: 8
    Dernier message: 08/02/2006, 15h16
  3. [vb.net][html] afficher une page html dans une interface vb?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 29/09/2005, 17h31
  4. Comment modifier une page affichée dans un TWebBrowser ?
    Par dreamincoco dans le forum Composants VCL
    Réponses: 7
    Dernier message: 24/03/2005, 14h07

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