初学求助!
一、如何将图片添加到TWebBrowser中,例如做页面背景。图片不是文件,而是从资源读出的或预设在程序中的。二、关于在TWebBrowser中实现流的读写时有如下代码:
procedure SetHtml(const WebBrowser: TWebBrowser; const Html: string);
var
Stream: IStream;
hHTMLText: HGLOBAL;
psi: IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then Exit;hHTMLText := GlobalAlloc(GPTR, Length(Html) + 1);
if 0 = hHTMLText then RaiseLastWin32Error;CopyMemory(Pointer(hHTMLText), PChar(Html), Length(Html));OleCheck(CreateStreamOnHGlobal(hHTMLText, True, Stream));
try
OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));
try
OleCheck(psi.InitNew);
OleCheck(psi.Load(Stream));
finally
psi := nil;
end;
finally
Stream := nil;
end;
end;function GetHtml(const WebBrowser:TWebBrowser): string;
const
BufSize = $10000;
var
Size: Int64;
Stream: IStream;
hHTMLText: HGLOBAL;
psi: IPersistStreamInit;
begin
if not Assigned(WebBrowser.Document) then Exit;OleCheck(WebBrowser.Document.QueryInterface(IPersistStreamInit, psi));
try
//OleCheck(psi.GetSizeMax(Size));
hHTMLText := GlobalAlloc(GPTR, BufSize);
if 0 = hHTMLText then RaiseLastWin32Error;OleCheck(CreateStreamOnHGlobal(hHTMLText,True, Stream));
try
OleCheck(psi.Save(Stream, False));Size := StrLen(PChar(hHTMLText));
SetLength(Result, Size);
CopyMemory(PChar(Result), Pointer(hHTMLText), Size);
finally
Stream := nil;
end;
finally
psi := nil;
end;
end;请问,其中的IStream;IPersistStreamInit;是在哪里定义或引用的?我怎么找不到?三、如何映射一部分内存为一个逻辑磁盘,向其存放临时文件,并且禁止其他程序访问该磁盘或文件。

解决方案 »

  1.   

    只回答二、:在 ActiveX 单元中
    对于一、,建议把要显示的文件弄成 *.mht
      

  2.   

    谢谢!疑问一:如果是MHT文件,那么问题是怎么样更换页面中的图片?这个图片也是个流而不是文件。不考虑建临时文件(内存里的虚拟磁盘例外,但怎么做?)。
    因为有多个页面,如果图片不能共用,那么程序就不够小巧了。听说用命名空间的方法可以,不知道该怎么实现。
      

  3.   

    要使用IPersistStreamInit可引用MSHtml
      

  4.   

    试过引用MSHtml,还是提示未定义
      

  5.   

    刚在csdn找到
    IStream引用Types
    IPersistStreamInit引用ActiveX
      

  6.   

    参考以下这个网站
    http://eagleboost.myrice.com/issues/Materials/Articles/TWebBrowser.htm#TextRange我上次的问题就是在这里得到提示的,我上次做了个小东东,想
    通过单击一个按钮然后控制webbrowse弹出查找对话框 做了好久都没成功,看了这个网站后得到了提示。^_^
    如果找不到使用单元 你就用win查找功能 查找*.dcu 包含文字为你要查的内容(网站上没写使用单元)
    这是我的问题的答案给你参考一下
    使用单元
    user Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, OleCtrls, SHDocVw, ExtCtrls, Buttons,mshtml,ActiveX;代码
    if WebBrowser1.Document <> nil then
    with WebBrowser1.Application as IOleobject do
    doVerb(OLEIVERB_UIACTIVATE, nil, WebBrowser1, 0, Handle, GetClientRect);
    //上面三句为关键语句 主要实现将焦点转移到WebBrowser(setfocus没用)
    keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),0,0); //按下CTRL键。
    keybd_event(ord('F'),MapVirtualKey(ord('F'),0),0,0);//键下F键。
    keybd_event(ord('F'),MapVirtualKey(ord('F'),0), KEYEVENTF_KEYUP,0);//放
    开F键。
    keybd_event(VK_CONTROL,MapVirtualKey(VK_CONTROL,0),KEYEVENTF_KEYUP,0);
    Delphi6+Win2000专业版通过
      

  7.   

    谢谢,sunny518,你提供的网址上不去。继续求一、三问的解。