想利用TWeBrowser显示目录中文档,格式定位只读HTML文件。请教WebBrowser
的详细用法即实现源代码,最好能有范本,谢谢!

解决方案 »

  1.   

    1.如何打印WebBrower中所显示的页面;
    2.如何将IE收藏夹的信息显示在自己的菜单上,并可以实现将当前页面添加到收藏夹;注:要求使用IE控件自身的方法实现,最好不使用其他控件。
    0、取得页面上的所有的连接
    memo1.Text:=WebBrowser1.OleObject.document.documentelement.innerhtml;
    for i:=0 to webbrowser1.oleobject.document.links.length-1 do
    begin
       listbox1.Items.Add(webbrowser1.oleobject.document.links.item(i).href);
    end;
    1、打印
    WebBorwser.ExecWB(OLECMDID_PRINT,0);2、tWebBrowser中不能回车以及copy的问题吗
    用Webbrowser的ExecWB方法:
    webbrowser1.ExecWB(OLECMDID_COPY,OLECMDEXECOPT_DODEFAULT);//Copy
    webbrowser1.ExecWB(OLECMDID_PASTE,OLECMDEXECOPT_DODEFAULT);//Paste
    注意在Copy前要先选定要拷贝的内容,否则会出错。 在初始化函数里面,增加
    OleInitialize(nil);
    在推出程序之前,增加:
    OleUninitialize();3、向SOHU搜索引擎提交数据
    Var
      o : Olevariant;
    Begin
          o := wb_Cash.OleObject.document.all.item('keyword',0);
          o.value :='sdfsd';
          wb_Cash.oleobject.document.Forms.Item(0, 0).submit;4、捕获WebBrowser控件中点击超链接的url
    WebBrowser中的OnBeforeNavigate2事件,其传入参数的第一个就是那个URL。5、调用IE的方法
    回复人:mywater(2000-11-30 13:34:00)  得50分 
    我以前帮人解决过一个找到当前运行的IE,并调用IE的方法的问题。和你这个问题一样,我直接把上次的回答重贴一下:另:关于控制IE的问题:
    我做了一个小例子,也不是很好:
    1,在CB中,Server面板上有封装了的IE,Word,Excel,Outlook等自动化对象,
    可供我们直接使用,不过,其中的个别控件在2000上,似乎有点问题,我的解决办法:在CB中,Remove 这些包,然后我们自己引入类型库,重建一套!
        类型库是:
    Microsoft Internet Controls(Version 1.1) 
          [c:\\winnt\system32\shdocvw.dll]
        引入时,在ClassNames的Memo中,在每个雷名后都加一个1,防止和原来的类名冲突:TCppWebBrowser_V11
    TCppWebBrowser1
    TCppInternetExplorer1
    TCppShellBrowserWindow1
    TCppShellWindows1
    TCppShellUIHelper1
    TShellFavoritesNameSpace1
    TCScriptErrorList1
    TCppSearchAssistantOC1  编译时,可能出现错误,最简单的办法是把出错的语句
    注释掉,我检查过,这是几个IE的事件,我们基本用不着!
    如果,想用,就得改正这几个错误!就是,把参数独立出来
    ,改成用指针调用!2,第二步,使用ICppShellWindow1,获得系统中所有的Internet Explorer 对象,包括文件夹和IE等!
      检查是不是IE的办法是:
        GetApplicationName,看看是不是Explore.exe 还是....
        略去不写了!
      是IE的,使用ICppInternetExplorer1对象连接到他,之后,就可以调用各种方法对这个IE进行控制了!窗体上,放着两个空件:
    .h:
            TCppShellWindows1 *SW;
            TCppInternetExplorer1 *IE;cpp://简单的例子:
            SW->Connect();
    //debug:
    //获取
            iCount=SW->Get_Count();
            if(iCount<1)
                    {
                            ShowMessage("娘西皮,一个没有!");
                            return ;
                    };
    //我没做判断,直接连接到第一个实例上,
    //您应该处理的
            TVariantInParam index(0);
    //把IE和实例连接
            IE->ConnectTo(SW->Item(index));//方法调用举例:获取URL
            WideString temp(IE->Get_LocationURL());
            ShowMessage(temp);        //IE->Set_FullScreen(1);//执行OLE Command举例:运行Save As 菜单
    //设置存储路径
    TVariant *path=new TVariant("c:\\ttt");
    //调用,
          IE->ExecWB(
    //OLE CMD ID
    Shdocvw_tlb::OLECMDID_SAVECOPYAS, 
    //执行开关:不显示界面,不过似乎有点问题,
    //Save aS 对话框需要用户  安 确定 按钮
    Shdocvw_tlb::OLECMDEXECOPT_DONTPROMPTUSER,
    path);
            delete path;//连接文档:
    //把文档连接到IE,说明参见 3
            Doc->ConnectTo(IE->Get_Document());
    Doc----?????
    具体的使用,我没写,如果想在
    这一级上处理,非常繁琐,您需要
    处理每个集合,比如框架,图片,
    脚本,等等!
    3:如果相对IE文档进行更深层次的控制还得在引入
        Microsoft Html Object Library(Version .)
        [C:\\winnt\system32\mshtml.tlb]
      注意:这个类型库包含了几百个接口,需要很长时间,不是死机!
      使用IHTMLDocument对象ConnectTo 到IE的文档上,
    就可以对其进行操纵了!这个对象接口非常之多,参见MSDN
    集合更多,我也没用过!,看来只能试一试了!具体参见MSDN
    文档!  我写了一个小例子,安以上步骤,能调出IE 的Save As
    对话框!
    注意:如果在您的机器上出现类没有注册,或根本就找不到
    这两个类型库,请安装IE5 
    ---------------
    1. Webbrowser.ExecWeb(OLECMDID_FIND,OLECMDEXECOPT_DODEFAULT);//查找
      Webbrowser.ExecWeb(OLECMDID_FIND,OLECMDEXECOPT_DODEFAULT);//查找
    2. Webbrowser.ExecWeb(OLECMDID_SAVEAS, OLECMDEXECOPT_DODEFAULT);//保存
       webbrowser1.ExeWB(OLECMDID_SAVECOPYAS,OLECMDEXECOPT_DODEFAULT)将网页内容存在一个指定的地方
    3. Webbrowser.ExecWeb(OLECMDID_ PROPERTIES, OLECMDEXECOPT_DODEFAULT);//查看属性
    Webbrowser.OleObject.Document.Documentelement.InnerHtml;//在OnDocumentComplete事件后调用。才可调节器用。----------------
    //写HTML
    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;//读HTML
    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;
    -------------
    WebBrowser从流中的读取
    var
      OleStream: IStream;
      DelphiStream: TStream;DelphiStream := TStringStream.Create('I Love Delphi!'); // or any other TStream class instance
    OleStream := TOleStream.Create(OleStream);
    try
    OleStream.CopyFrom(DelphiStream, DelphiStream.Size);
    // of course if you have already valid IStream which contains what you want to load, use it directly. e.g URLOpenStream...
      with (WebBrowser.Document as IPersistStreamInit) do
      begin
        OleCheck(InitNew);
        OleCheck(Load(OleStream)); // OleStream is a IStream interface pointer
      end;
    finally
      OleStream.Free;
      DelphiStream.Free;
    end;
      

  2.   

    你的话很不清楚?这里有大量资料:
    http://www.euromind.com/iedelphi
      

  3.   

    呵呵,不好意思,谢谢你了,我第一次来。请海涵海涵。我会慢慢研究的,DELPHI中应该可以调用IE显示页面的吧,怎么给你加分啊?
      

  4.   

    那个网址提供了很多对IE相关COM接口的封装单元,以即大量相关控件!而想深入了解的最好方法还是查询MSDN!CSDN论坛里也有大量相关贴子!
      

  5.   

    http://www.csdn.net/Expert/TopicView1.asp?id=923467
    http://www.csdn.net/Expert/TopicView1.asp?id=931232
    http://www.csdn.net/Expert/TopicView1.asp?id=1023819
    http://www.csdn.net/Expert/TopicView1.asp?id=1063152
    http://www.csdn.net/Expert/TopicView1.asp?id=790392
    ...