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

Delphi Discussion :

Probleme d'utilisation de TWebBrowser avec un fichier html local


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut Probleme d'utilisation de TWebBrowser avec un fichier html local
    Bonjour

    Je voulais utiliser le composant TWebBrowser pour afficher des pages HTML sur mon application. Ces pages sont dans un fichier qui est dans le même répertoire que l’exécutable mais je n'arrive pas à les afficher.
    Sur ma fiche j'ai juste un bouton qui quand je clique dessus foit m'afficher la page aide.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TForm2.Button1Click(Sender: TObject);
    begin
     WebBrowser1.Navigate('file://aide.html');
    end;
    Au cas ou le contenu de la page
    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
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html><head><meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>aide</title><style type="text/css">
    h1 {
      border-color: #6600cc;
      border-width: 1px;
      opacity: 0.507;
      background-color: #3366ff;
      color: #ffcc00;
    }
     
    </style></head><body>
    <h1>Aide du jeu toto</h1>
    <h2>Introduction</h2>
    Toto est un jeu qui consiste &agrave; faire des blagues d&eacute;biles<br>
    <br>
     
     
    </body></html>
    Si je mets une URL du style www.google.com ça fonctionne

    Du coup y a t'il une syntaxe particulière pour définir le chemin vers le fichier html?
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 676
    Points : 25 491
    Points
    25 491
    Par défaut
    ce n'est pas file:/// ?

    Et le chemin courant, je ne lui ferait pas confiance, j'utiliserais le chemin complet file:///C:/Dossier/Fichier.ext produit par un ExtractFilePath(Application.ExeName) + ...
    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 expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    file:/// ne fonctionne pas
    Par contre j'ai essayé avec le chemin complet et ça marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    procedure TForm2.Button1Click(Sender: TObject);
    var
      chem: String;
    begin
     chem:=ExtractFilePath(Application.ExeName);
     WebBrowser1.Navigate('file:///'+chem+'aide.html');
    end;
    Merci
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 676
    Points : 25 491
    Points
    25 491
    Par défaut
    Tu sais que tu peux utiliser l'afficheur de CHM : Delphi 11] Ajouter un fichier d'aide au programme, regarde la classe TSLTHtmlHelpManager qui utilise HH.exe

    Ainsi tu peux mettre un helpfile pour chaque form, la touche F1 affichera la page correspondante automatiquement

    Moi, je l'ai conçu pour afficher des fichiers Word, un wiki en HTTP, un vieux CHM au besoin

    Il te suffit de modifier HelpEventHandler pour gérer un if StartsText('file:///', CurrentHelpFile) then FindHTMLHelpWindowHandles ... qui ouvrira ton fichier dans le viewer de CHM actif
    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

  5. #5
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    Oui sauf que ça doit pouvoir tourner sur différents OS et pas sur que le chm fonctionne sur android
    Par contre chose amusante ce que j'ai fait ne fonctionne pas en fmx.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      nfic,chem: String;
    begin
     chem:=ExtractFilePath(ParamStr(0));
     nfic:=chem+'aide.html';
     if fileExists(nfic) then
      WebBrowser1.Navigate('file:///'+nfic);
    end;
    Il me sort l'erreur impossible de trouver le fichier spécifié
    Du coup j'ai ajouté un test sur l'existence du fichier et quand bien même fileExists renvoie true l'erreur persiste
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 676
    Points : 25 491
    Points
    25 491
    Par défaut
    Alors justement, l'idée c'est d'utiliser le moteur d'aide de Delphi HtmlHelpViewer mais de remplacer le CHM et un fichier HTML (dans mon cas une page wiki, autant que de TForm)
    Cela afficher dans le Viewer d'aide HH.Exe pour Windows,
    HtmlHelpViewer est strictement VCL !

    Mais comme TApplication.HelpFile ni TForm.HelpFile en FMX n'existe pas, je n'ai pas la moindre idée ce qui existe en FMX mais le sujet que j'ai mentionné
    Pense à préciser que tu bosses en FMX au début du sujet voire dans le titre préfixé par [FMX], cela ciblera plus rapidement les bonnes questions et réponses



    Le TWebBrowser de la VCL doit être différent du TWebBrowser de FMX
    Surement des privilèges à prévoir pour accéder aux fichiers !
    et ouvrir un fichier local dans le WebBrowser, la syntaxe "file:///" c'est un truc standard ou typique de Windows ?


    Sinon, tu peux injecter directement le contenu dans le DOM du Document, suffit de faire un Navigate(about:blank) et de modifier le contenu ... encore une fois, je ne sais le faire qu'avec le DOM Microsoft (voir plus bas)


    As-tu pensé à ne pas être dépendant du navigateur de l'OS avec un outil intégré comme https://github.com/digao-dalpiaz/DzHTMLText




    Comme, je le disais, afficher le HMTL sans fichier, dans mon cas, c'est du texte en MarkDown qui est utilisé, j'ai un convertisseur MD->HTML et j'affiche le HMTL directement dans une TFormHint (au survol de la souris) ou dans un TForm classique en cas de double-clic.

    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
    //------------------------------------------------------------------------------
    class procedure TMarkdownViewer.ShowAsHTML(const AContent: string; AShowMDComment: Boolean);
    var
      WebBrowser: TWebBrowser;
      Doc: IHTMLDocument2;
      Body: PSafeArray; // https://www.developpez.net/forums/d464072/environnements-developpement/delphi/web-reseau/afficher-page-html-delphi/#post2794797
    begin
      WebBrowser := TWebBrowser(FForm.FindComponent('WebBrowser'));
      if Assigned(WebBrowser) then
        FreeAndNil(WebBrowser);
     
      WebBrowser := TWebBrowser.Create(FForm);
      TComponent(WebBrowser).Name := 'WebBrowser';
      WebBrowser.Navigate('about:blank');
      WebBrowser.Align := alClient;
      WebBrowser.SetParentComponent(FForm);
     
      WebBrowser.Offline := True;
      WebBrowser.OnBeforeNavigate2 := SeizureNavigation;
      WebBrowser.OnBeforeScriptExecute := SeizureScript;
      WebBrowser.OnFileDownload := SeizureFileDownload;
     
      Body := PSafeArray(TVarData(VarArrayOf([ShapeAsHTML(AContent, AShowMDComment)])).VArray);
      Doc := WebBrowser.Document as IHTMLDocument2;
      Doc.Write(Body);
    end;

    C'était si la version simpliste ne fonctionnait pas : FAQ Delphi - Comment afficher une page construite dans son application ?
    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

  7. #7
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 095
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 095
    Points : 1 531
    Points
    1 531
    Billets dans le blog
    5
    Par défaut
    En fait les 2 m'intéressent (VCL et fmx).
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  8. #8
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    En VCL c'est ça :

    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
    uses Vcl.OleCtrls, MSHTML, SHDocVw, ActiveX;
     
    TwebBrowserHelper = class helper for TWebBrowser
      procedure Affiche(Html: string);
    end;
     
    procedure TwebBrowserHelper.Affiche(Html: string);
    var
      Doc : HTMLDocument;
      Elem: IHTMLElement;
    begin
      Visible := True;
      begin
        if not Assigned(Document) then
        begin
          Navigate('about:blank');
          while ReadyState <> SHDocVw.READYSTATE_COMPLETE do
            Vcl.Forms.Application.ProcessMessages;
        end;
        Doc := Document as HTMLDocument;
        with Doc do
        begin
          Clear;
          write(Html);
          Close;
        end;
        BringToFront;
      end;
    end;
    J-L aka Papy pour les amis

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

Discussions similaires

  1. [XSLT]Problème d'utilisation de XSL avec fichier GPX.
    Par robiwan dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/05/2010, 14h17
  2. Réponses: 2
    Dernier message: 21/03/2007, 15h13
  3. Réponses: 2
    Dernier message: 12/02/2007, 21h12
  4. Réponses: 5
    Dernier message: 11/01/2007, 08h53
  5. Problème d'utilisation de Mysql avec dev-c++
    Par Watchi dans le forum Dev-C++
    Réponses: 10
    Dernier message: 06/08/2004, 14h35

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