Come impostare la directory del browser web Delphi Base diversa quella posizione HTML

StackOverflow https://stackoverflow.com/questions/2686774

  •  30-09-2019
  •  | 
  •  

Domanda

Ho un programma di Delphi che crea file HTML. Più tardi, quando si preme un pulsante di un TWebBrowser è creato e un WebBrowser.Navigate fa sì che la pagina HTML per visualizzare.

Esiste un modo per impostare la "directory di default" del browser web in modo che sarà sempre la posizione del Delphi eseguibile non il file HTML?

Non voglio per impostare il valore di base nel codice HTML per un valore hardcoded perché poi, quando il codice HTML è corse da un altro Delphi exe che non si trovano.

Ad esempio:

se l'exe viene eseguito da D: \ data \ Delphi \ pgm.exe quindi la posizione di base D: \ Data \ Delphi \ ei JPG sono in D: \ data \ Delphi \ jpgs \

, ma se l'exe viene eseguito da: C: \ roba \ pgm.exe voglio la posizione di base per essere C: \ roba \ ei JPG di essere in C: \ roba \ jpgs \

Quindi non posso scrivere una riga nel codice HTML con la posizione di base da quando è corse da un altro exe che sarebbe puntare a posizione errata per questo exe.

Così ho neanche bisogno di impostare la posizione di base quando creo il browser web e prima di leggere il codice HTML o ho bisogno di un modo per passare al browser web la posizione in cui posso quindi impostare la posizione di base.

Siamo spiacenti per essere così prolisso, ma non riuscivo a capire come ha visto quello che mi serviva.

È stato utile?

Soluzione

Dal TWebBrowser è solo un involucro intorno al motore di Internet Explorer, non v'è alternativa si può provare se si consente scripting lato client per essere abilitato nel tuo browser.

  1. Crea un oggetto di automazione nella vostra applicazione che implementa l'IDispatch l'interfaccia, e dargli una stringa proprietà che restituisce dell'app percorso corrente in esecuzione.
  2. Crea un oggetto di automazione che implementa il IDocHostUIHandler interfaccia e ignorare la sua GetExternal() Metodo per restituire un puntatore al oggetto da # 1.
  3. Retreive ICustomDoc del browser interfacciarsi, e superare il tuo IDocHostUIHandler oggetto per il suo metodo SetUIHandler().

Fare riferimento a MSDN per ulteriori dettagli:

http://msdn.microsoft. com / it-it / library / aa770041.aspx

In questo modo, il codice HTML può contenere script che può utilizzare l'oggetto window.external per prelevare il percorso della applicazione e aggiornare i riferimenti JPG in modo dinamico, come ad esempio in caso OnLoad, vale a dire:

<script language="JScript">
function UpdateJPGs()
{
  var path = window.external.ExePath;
  document.images.item("jpg1").src = path + "1.jpg";
  document.images.item("jpg2").src = path + "2.jpg";
  // etc...
}
</script>

<body onLoad="UpdateJPGs">

Altri suggerimenti

Se il file HTML viene memorizzato nella stessa cartella dei file JPG, allora non c'è bisogno di impostare un percorso di base.

percorso di base del file Un HTML è il percorso da cui è caricato, o un percorso specificato nel codice HTML per sé tramite un tag <base href="...">. È possibile impostare un nuovo percorso di base, che è accessibile tramite la raccolta IHTMLDocument2.all.tags('base'), ma non è accessibile fino a dopo il file HTML è stato caricato e analizzato prima, che è un catch-22 per voi. Non è possibile impostare un percorso di base senza avere un documento caricato in precedenza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top