TWebBrowser is a wrapper for Internet Explorer COM interface. The most common way to use TWebBrowser is using Navigate method that accept a URL string. However, this is not convenient for user who already has a rendered HTML string or stream. One workaround solution for this is save the string or stream to a temporary file and use supply a local file URL to TWebBrowser.Navigate.
Here is a solution for supplying a HTML stream to TWebBrowser:
uses ActiveX;
const IID_IPersistStreamInit : TGUID = '{7FD52380-4E07-101B-AE2D-08002B2EC713}';
procedure TForm19.Button1Click(Sender: TObject);
var S: TStream;
o: IPersistStreamInit;
begin
S := TStringStream.Create('<html><body>this is a test</body></html>');
try
WebBrowser1.Navigate('about:blank');
while WebBrowser1.ReadyState <> Shdocvw.READYSTATE_COMPLETE do
Application.ProcessMessages;
if Supports(WebBrowser1.Document, IID_IPersistStreamInit, o) then
o.Load(TStreamAdapter.Create(S));
finally
S.Free;
end;
end;
Reference:
- Component to display HTML read from a stream rather than fetched from a URL. Author: Antonio Estevez. URL: https://forums.codegear.com/thread.jspa?threadID=15004&tstart=0
4 comments:
Great, but what if you want to stream more than only html? Something like this:
S := TStringStream.Create('[html][body]this is a image: [img src="myimg:picture.jpg"][/body][/htlm]');
The file picture.jpg is not on disk, but in memory (TMemoryStream).
A better wrapper around the web browser control can be found here: http://www.bsalsa.com/ - some rough edges but fra more powerful control - that's the kind of work Borland/Codegear should have done in the past 8/10 years instead of chasing any new buzzword.
@Jelmer: about loading images the way you like, you should implement an Asynchronous Pluggable Protocols - MSDN has the details (it requires to implement some COM interfaces), I did it once to display images embedded into HTML mail messages.
Forget relying on Microsoft's junk and their nutso COM+ interfaces. Use PBear's HTML Display components, available here: http://pbear.com/
As of last year, these components are free. (We've been a paying customer for something like 10 years now, and the controls work great.)
PBear controls support only HTML 3.2, 4.0 partially and no Javascript - good if the developer can control what is fed to the control and has no high-end needs. They are no longer supported also.
Post a Comment