J'utilise TWebBrowser dans DesignMode (Doc.DesignMode: = 'On') pour composer un document HTML. Il n'y a aucun document (fichier HTML sur le disque) chargé dans TWebBrowser. Je crée le document à partir de zéro directement dans TWebBrowser. Le code html sera extrait de TWebBrowser et enregistré en tant que c: /MyProjects/SomeHtmlName.html.Comment afficher les images de chemin relatif dans TWebBrowser?
Le problème est qu'il ne montrera pas les images que j'insère si elles ont un chemin relatif.
Plus exactement, si je coller ce code dans le navigateur Web, il affiche instantanément l'image:
<IMG src="file:///c:/MyProjects/resources/R.PNG">
Cependant, si je rentre:
<IMG border=0 src="resources\R.PNG">
<IMG border=0 src="resources/R.PNG"> <---- preferred so it will work on Linux
il affiche un espace réservé d'image au lieu de l'image réelle.
J'ai besoin de chemins relatifs pour que le site fonctionne toujours si je change le chemin racine OU si je le télécharge sur FTP.
procedure TForm1.Button1Click(Sender: TObject);
begin
LoadDummyPage;
SetHtmlCode('<img src="resources/test_img.PNG">');
Memo1.Text:= GetHtmlCode;
end;
function TForm1.LoadDummyPage: Boolean;
const FileName: string= 'c:\MyProject\_ONLINE WEB SITE\dummy.html';
begin
if not Assigned(wbBrowser.Document)
then wbBrowser.Navigate('about:blank');
Result := FileExists(FileName);
if Result
then wbBrowser.Navigate('file://' + FileName)
else Caption:= 'file not found';
end;
procedure TForm1.SetHtmlCode(const HTMLCode: string);
var
Doc: Variant;
begin
if not Assigned(wbBrowser.Document)
then wbBrowser.Navigate('about:blank');
Doc := wbBrowser.Document;
Doc.Write(HTMLCode);
Doc.Close;
Doc.DesignMode := 'On';
WHILE wbBrowser.ReadyState < READYSTATE_INTERACTIVE
DO Application.ProcessMessages;
Doc.body.style.fontFamily := 'Arial';
Doc.Close;
end;
function TForm1.GetHtmlCode: string; { Get the HTML code from the browser }
var
Doc: IHTMLDocument2;
BodyElement: IHTMLElement;
begin
if Assigned(wbBrowser.Document) and (wbBrowser.Document.QueryInterface(IHTMLDocument2, Doc) = S_OK) then
begin
BodyElement := Doc.body;
if Assigned(BodyElement) then
Result := BodyElement.innerHTML;
end;
if Result > ''
then Result := StringReplace(Result, '="about:', '="', [rfReplaceAll, rfIgnoreCase]); { Fix the 'How stop TWebBrowser from adding 'file:///' in front of my links' bug }
end;
Cela fonctionne-t-il si le répertoire de travail actuel de l'exécutable est c:/MyProjects /? – mjn42
Le 'hack' que je pourrais utiliser serait de post-traiter le HTML et supprimer le 'fichier: /// c:/MyProjects /' – Ampere
@ mjn42 - non. probablement parce que les images sont dans le dossier 'Ressources'? De plus, je pense que le dossier 'root' de TWebBrowser est le dossier racine par défaut d'Internet Explorer (quel qu'il soit) et non le dossier de l'application. – Ampere