首页  编辑  

关于IE控件使用的几个问题

Tags: /超级猛料/OS.操作系统/IE.扩展/TWebBrowser/操作/   Date Created:

]、。·ˉˇ¨〃々—~‖…’”〕〉》」』〗】∶!"'),.:;?]` 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;