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 :

Afficher page HTML dans Delphi


Sujet :

Web & réseau Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut Afficher page HTML dans Delphi
    Bonjour à tous et Joyeuses Fêtes de Fin d'Année,

    J'utilise un DBGrid qui m'affiche une liste de médicaments et je voudrais qu'en fonction du médicament sélectionné afficher dans une page html la composition, la posologie, ...

    J'ai vu le composant TWebBrowser mais je ne sais pas s'il y a la possibilité d'intégrer directement du code html sans passer par un fichier texte...

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 553
    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 553
    Points : 25 133
    Points
    25 133
    Par défaut
    Tient, j'ai écrit cette fonction pour modifier le HTML du TWebBrowser sans passer par un fichier

    Avec IE 4 ou 5, c'est facile, mais depuis la version 6 fourni avec XP, cela plante, j'ai donc bidouillé une variante WB_INTERFACED_BODY

    faut appeler InitBrowser pour créer les interfaces nécessaires, puis appeler WriteBrowserBody pour remplacer le Body par un autre ...
    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
     
     
    procedure InitBrowser(const WebBrowser: TWebBrowser);
    {$IFDEF WB_INTERFACED_BODY}
    var
       Doc: IHTMLDocument2;
       EmptyBodyText: WideString;
       EmptyBodyVarData: PSafeArray;
    begin
         try
            // "Connexion" sur une Page Vierge
            WebBrowser.Navigate('about:blank');
            // Stockage du Document dans une Variable Temporaire
            Doc := WebBrowser.Document as IHTMLDocument2;
            // Texte d'un Corps Vierge
            EmptyBodyText := '<html><body></body></html>';
     
            // VarArrayOf([InnerHtm]) - On Obtient un Tableau de Variant d'un Seul Elément
            // TVarData(...) - On Obtient la forme système d'un Variant
            // TVarData(...).VArray - On Obtient les Données du Tableau sous la Forme d'un Pointeur de TVarArray (PVarArray)
            // PSafeArray(...) - On Transtype le PVarArray en PSafeArray
            EmptyBodyVarData := PSafeArray(TVarData(VarArrayOf([EmptyBodyText])).VArray);
     
     
            Doc.Open('about:blank', '_self', '', True);
            Doc.Write(EmptyBodyVarData);
            Doc.Close();
         except
               Exit;
         end;
    end;
    {$ELSE}
    var
       URL, Flags, Target, Post, Header : OleVariant;
    begin
         try
            WebBrowser.Navigate('about:<html><head></head><body></body></html>', Flags, Target, Post, Header);
         except
               Exit;
         end;
    end;
    {$ENDIF}
     
    // -----------------------------------------------------------------------------
    procedure WriteBrowserBody(const WebBrowser: TWebBrowser; const Body: WideString);
    {$IFDEF WB_INTERFACED_BODY}
    var
       Doc : IHTMLDocument2;
       InnerHtm: WideString;
    begin
         try
            // Stockage du Document dans une Variable Temporaire
            Doc := WebBrowser.Document as IHTMLDocument2;
            // Texte d'un Corps et de son Contenu
            InnerHtm := '<html><body>' + Body + '</body></html>';
            // VarArrayOf([InnerHtm]) - On Obtient un Tableau de Variant d'un Seul Elément
            // TVarData(...) - On Obtient la forme système d'un Variant
            // TVarData(...).VArray - On Obtient les Données du Tableau sous la Forme d'un Pointeur de TVarArray (PVarArray)
            // PSafeArray(...) - On Transtype le PVarArray en PSafeArray
     
            Doc.Open('about:blank', '_self', '', True);
            Doc.Write(PSafeArray(TVarData(VarArrayOf([InnerHtm])).VArray));
            Doc.Close();
         except
               Exit;
         end;
    end;
    {$ELSE}
    begin
         try
            WebBrowser.OleObject.Document.Body.InnerHTML := Body;
         except
               Exit;
         end;
    end;
    {$ENDIF}
    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 régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Bonjour ShaiLeTroll et merci pour ta réponse

    J'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    InitBrowser(myWebBrowser);
    WriteBrowserBody(myWebBrowser, '<b><i>Petit test</i></b>');
    mais il se plante sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WebBrowser.OleObject.Document.Body.InnerHTML := Body;
    La variable Body contenant : <b><i>Petit test</i></b>

    Je me suis planté quelque part ???

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 553
    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 553
    Points : 25 133
    Points
    25 133
    Par défaut
    Comme, je l'ai dit cela dépend de la version de IE, essaye en ajoute au début de l'unité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$DEFINE WB_INTERFACED_BODY}
    Faudrait un jour, que je fasse l'effort de tester la version en cours du système au lieu de directive de compilation

    Si cela ne fonctionne toujours pas, vu que le TWebBrowser fonctionne en Asynchrone, c'est parfois trop lent, IE ne réagit pas assez vite (parce que l'on ne lui donne pas le temps non plus), tu peux essayer d'ajouter WaitWebAssigned, en général, 10 ms pour un about:blank suffit, ainsi on laisse IE charger en mémoire les objets ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    InitBrowser(myWebBrowser);
    WaitWebAssigned(myWebBrowser, 10);
    WriteBrowserBody(myWebBrowser, '<b><i>Petit test</i></b>');

    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
    // -----------------------------------------------------------------------------
    procedure WaitWebAssigned(const WebBrowser: TWebBrowser; TimeOut: Cardinal);
    var
       StartTime, PointTime(*, DiffTime*): Cardinal;
    begin
         try
            StartTime := GetTickCount();
            repeat
              Sleep(1); // Il laisse une Milliseconde Entière aux Autres Processus
              Application.ProcessMessages();
              PointTime := GetTickCount();
            // Continue tant que l'Objet est vide ou que le Délai Maximum soit écoulé
            until not VarIsEmpty(WebBrowser.OleObject.Document) or (PointTime >= StartTime+TimeOut);
     
            if not VarIsEmpty(WebBrowser.OleObject.Document) then begin
               StartTime := GetTickCount();
               repeat
                 Sleep(1); // Il laisse une Milliseconde Entière aux Autres Processus
                 Application.ProcessMessages();
                 PointTime := GetTickCount();
               until not VarIsEmpty(WebBrowser.OleObject.Document.Body) or (PointTime >= StartTime+TimeOut);
            end;
         except
            ShowMessage('L''Affichage HTML ne sera pas disponible avant quelques secondes !');
         end;
    end;
    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 régulier
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2003
    Messages : 186
    Points : 84
    Points
    84
    Par défaut
    Je viens de trouver ceci qui, à première vue, répond à mes besoins...

    Merci pour ton aide

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

Discussions similaires

  1. afficher page html dans flex
    Par ouldfella dans le forum Flex
    Réponses: 16
    Dernier message: 10/03/2010, 12h26
  2. Affiche page html dans un cadre
    Par Maglight dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 25/01/2009, 08h06
  3. afficher page HTML dans un JScrollPane
    Par Sarah22 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 17/03/2007, 14h05
  4. afficher une page html dans un jtextpane
    Par fievel dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 15/03/2006, 17h36
  5. [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

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