Nombre d'auteurs : 123, nombre de questions : 920, dernière mise à jour : 8 novembre 2019 Ajouter une question
Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums Delphi et Delphi et bases de données de www.developpez.com et de l'expérience personnelle des auteurs.
Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose soient correctes. Les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous souhaitez y apporter des corrections ou la compléter, contactez un responsable (lien au bas de cette page).
Nous espérons que cette FAQ saura répondre à vos attentes. Nous vous en souhaitons une bonne lecture.
L'équipe Delphi de Developpez.com.
Le protocole About vous permet d'envoyer une chaîne de caractères dans votre composant TWebBrowser. Très pratique, ce protocole peut être utilisé pour construire des pages dans votre application et les afficher sans avoir à les enregistrer au préalable. Cette technique est utilisable pour de courts documents.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | procedure TMyForm.MyButtonClick(Sender: TObject); var Flags, TargetFrameName, PostData, Headers: OleVariant; sHTML: String; begin sHTML := { votre code HTML }; MyWebBrowser.Navigate('about:' + sHTML, Flags, TargetFrameName, PostData, Headers); end; |
Code delphi : | Sélectionner tout |
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 | uses Classes, Forms, ShDocVw, ActiveX; procedure LoadHTML(AWebBrowser: TWebBrowser; const HTMLCode: string); var ss: TStringStream; sa: TStreamAdapter; begin // Il est nécessaire de réinitialiser la page avec un appel à Navigate AWebBrowser.Navigate('about:blank'); // Il faut attendre que le navigateur soit prêt while AWebBrowser.ReadyState < READYSTATE_INTERACTIVE do Application.ProcessMessages; if Assigned(AWebBrowser.Document) then begin // On crée un flux ss:= TStringStream.Create(HTMLCode); try // et un adaptateur IStream sa:= TStreamAdapter.Create(ss); // Ne pas libérer // On appelle la méthode de chargement du WebBrowser (AWebBrowser.Document as IPersistStreamInit).Load(sa); finally // On libère le flux ss.Free; end; end; end; |
Il est possible de récupérer le contenu au format HTML (ou texte) de la page affichée dans le TWebbrowser :
Code delphi : | Sélectionner tout |
1 2 3 4 5 | {Pour récupérer le contenu du body dans un TMemo : } MyMemo.Text := MyWebBrowser.OleObject.Document.Body.InnerHTML; {Pour récupérer le texte du document dans un TMemo : } MyMemo.Text := MyWebBrowser.OleObject.Document.Body.InnerText; |
Code delphi : | Sélectionner tout |
webbrowser1.ExecWB(OLECMDID_SAVEAS , OLECMDEXECOPT_DODEFAULT);
Il est possible d'obtenir la liste des liens qui sont dans le document. La propriété Webbrowser.OleObject.Document.links.length vous indique le nombre de liens présents dans votre document et la propriété Webbrowser.OleObject.Document.links.item(i) contient les liens.
Exemple : récupérer la liste des liens dans un TMemo :
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 | var i : Integer; begin for i:=0 to MyWebbrowser.OleObject.Document.Links.Length-1 do MyMemo.Lines.Add(MyWebbrowser.OleObject.Document.Links.Item(i)); end; |
Le nombre d'images contenu dans la page affichée est stocké dans la variable
Code delphi : | Sélectionner tout |
Webbrowser1.OleObject.Document.Images.Length
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | procedure TIexplore.ToolButton5Click(Sender: TObject); var i: Word; Largeur, Hauteur: Integer; Infobulle, Poids, URLImage: string; begin for i := 0 to WebBrowser1.OleObject.Document.Images.Length - 1 do begin Largeur := WebBrowser1.OleObject.Document.Images.Item(i).Width; Hauteur := WebBrowser1.OleObject.Document.Images.Item(i).Height; Poids := WebBrowser1.OleObject.Document.Images.Item(i).FileSize; URLImage := WebBrowser1.OleObject.Document.Images.Item(i).Href; Infobulle := WebBrowser1.OleObject.Document.Images.Item(i).alt; ListBox1.Items.Add(Format('%s : %d x %d Pixels; %s octets; %s', [URLImage, Largeur, Hauteur, poids, InfoBulle])); end; end; |
Certaines pages beb sont divisées en frames. Pour savoir le nombre de frames présentes dans votre navigateur, il vous suffit d'interroger la propriété WebBrowser.OleObject.Document.frames.length :
Code delphi : | Sélectionner tout |
1 2 3 4 5 | var nombreframes: integer; begin nombreframes := MyWebBrowser.OleObject.Document.Frames.Length; end; |
Code delphi : | Sélectionner tout |
Webbrowser1.ExecWB(OLECMDID_PAGESETUP , OLECMDEXECOPT_DODEFAULT);
Pour imprimer le document avec Internet Explorer 4 ou supérieur, vous devez utiliser la propriété ControlInterface pour accéder à l'interface du composant WebBrowser (cette interface permet à un contrôleur Automation d'accéder aux propriétés, méthodes et événements du navigateur web).
Dans cet exemple, l'impression du document complet sera envoyée sans que la boîte de dialogue d'impression n'apparaisse. Pour afficher la boîte de dialogue, il faut remplacer OLECMDEXECOPT_DONTPROMPTUSER par OLECMDEXECOPT_PROMPTUSER.
Code delphi : | Sélectionner tout |
1 2 3 4 5 | var vaIn, vaOut: OleVariant; begin MyWebBrowser.ControlInterface.ExecWB(OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut); end; |
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | procedure PrintIE; var CmdTarget : IOleCommandTarget; vaIn, vaOut: OleVariant; begin if MyWebBrowser.Document <> nil then try MyWebBrowser.Document.QueryInterface(IOleCommandTarget, CmdTarget); if CmdTarget <> nil then try CmdTarget.Exec( PGuid(nil), OLECMDID_PRINT, OLECMDEXECOPT_DONTPROMPTUSER, vaIn, vaOut); finally CmdTarget.Release; end; except {Rien } end; end; |
Lorsque vous intégrez dans votre application l'objet TWebBrowser pour naviguer sur Internet, il arrive souvent d'avoir des fenêtres Popup qui s'ouvrent automatiquement. Pour annuler l'ouverture d'Internet Explorer dans ce cas là, vous devez écrire une procédure pour l'évènement OnNewWindow2 de votre TWebBrowser pour affecter la valeur True à la variable Cancel.
Code delphi : | Sélectionner tout |
1 2 3 4 | procedure TMyForm.MyWebBrowserNewWindow2(Sender: TObject; var ppDisp: IDispatch; var Cancel: WordBool); begin Cancel := True; end; |
Selon la taille des pages affichées, les scroolbars apparaissent automatiquement.
Code delphi : | Sélectionner tout |
1 2 3 4 5 6 7 | {Pour cacher les scrollbars : } MyWebBrowser.OleObject.Document.Body.Style.OverflowX := 'hidden'; MyWebBrowser.OleObject.Document.Body.Style.OverflowY := 'hidden'; {Pour réafficher les scroolbars : } MyWebBrowser.OleObject.Document.Body.Style.OverflowX := ''; MyWebBrowser.OleObject.Document.Body.Style.OverflowY := ''; |
Il suffit d'utiliser la méthode ExecWB qui permet d'utiliser l'interface IOleCommandTarget pour transmettre une commande au contrôle navigateur Web, et de lui passer le paramètre suivant :
OLECMDID_SELECTALL pour sélectionner tout
OLECMDID_COPY pour effectuer la copie vers le presse papier
Code delphi : | Sélectionner tout |
1 2 3 4 5 | // Sélectionner tout webbrowser1.ExecWB(OLECMDID_SELECTALL , OLECMDEXECOPT_DODEFAULT); // Copier Webbrowser1.ExecWB(OLECMDID_COPY , OLECMDEXECOPT_DODEFAULT); |
Dans internet Explorer, lorsque l'on appel le menu contextuel sur la page, l'option propriété permet d'afficher la fenêtre suivante :
Code delphi : | Sélectionner tout |
Webbrowser1.ExecWB(OLECMDID_PROPERTIES , OLECMDEXECOPT_DODEFAULT);
Afin d'analyser le contenu d'une page web, il peut être intéressant de récupérer l'intégralité de ses sources, en-tête HTML compris. Il y a pour cela deux méthodes.
La première, la plus simple, emploie l'interface IHTMLDocument3 :
Code delphi : | Sélectionner tout |
1 2 3 4 5 | procedure RecupererContenu1(CurrentWB: TWebBrowser; var Code: String); begin // recuperation du code entier Code := (CurrentWB.Document as IHTMLDocument3).documentElement.outerhtml; end; |
Code delphi : | Sélectionner tout |
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 | function RecupererContenu2(WB: TWebBrowser): String; var PersistStream: IPersistStreamInit; Stream: IStream; StrStream: TStringStream; begin // S'il n'y a pas de document assigné pour le TWebBrowser if not Assigned(WB.Document) then begin Result := ''; Exit; end; // TWebBrowser.Document implémente les fonctionnalités de l'interface // IPersitStream. On en demande l'accès ici. PersistStream := WB.Document as IPersistStreamInit; // Création d'un flux de caractères (vide au départ) StrStream := TStringStream.Create(''); try // On crée une instance de TStreamAdapter en demandant les // fonctionnalités de l'interface IStream. Ce sera notre "pont" entre // le stream de caractères et le document HTML. Stream := TStreamAdapter.Create(StrStream, soReference) as IStream; // Essai de sauvegarde du document dans le stream qui vient d'être créé if Failed(PersistStream.Save(Stream, True)) then Result := '' else begin // Si ça s'est bien passé, on remet le stream de caractères au début StrStream.Position := 0; // Et on renvoie ce qu'il contient Result := StrStream.Read(StrStream.Size); end; finally StrStream.Free; end; end; |
Code delphi : | Sélectionner tout |
1 2 3 4 | procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := RecupererContenu(WebBrowser1); end; |
Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.