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

I

import

Unregistered / Unconfirmed
GUEST, unregistred user!
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.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.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;
 
顶部