Delphi中始终用WebBrowser打开网页

转载 2016年05月30日 16:34:27

这个问题也曾经困扰过我一段时间啊!呵呵……
给你一个解决办法,肯定能成功!
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
  var ppDisp: IDispatch; var Cancel: WordBool);
begin
Cancel:=true;
WebBrowser1.Navigate (NewURL);
end;
其中的NewURL是你在网页中点击的链接,它的值在以下事件中取得:
procedure TForm1.WebBrowser1StatusTextChange(Sender: TObject;
  const Text: WideString);
begin
NewURL :=text;
end;
这样,当你点击网页中的连接时,就在本窗口中打开.NewURL应定义为全局变量.实现不了找我哦! 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pucoov/archive/2006/02/04/591806.aspx

Delphi中始终用WebBrowser打开网页

Delphi 2010-01-26 13:38:17 阅读172 评论0 字号:

要在同一个WebBrowser里显示,可以这样:
再放一个小的WebBrowser2,设置它在WebBrowser1下面(设置Visible为False好象无效),
// 在WebBrowser1的OnNewWindow2事件中:
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp := WebBrowser2.Application; // 新的窗口先指向WebBrowser2
end;
// 在WebBrowser2的OnBeforeNavigate2事件中:
procedure TForm1.WebBrowser2BeforeNavigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
begin
WebBrowser1.Navigate(string(URL)); // 再指回WebBrowser1
Cancel := True;
end;


可以这样,窗体中放置两个PANEL,其中PANEL1中放WebBrowser1,PANEL2中放WebBrowser2,PANEL1和PANEL2、WebBrowser1和WebBrowser2的LEFT,TOP等所有属性设为一样。PANEL2的VISIBLE设为FALSE。然后添加代码如下即可:
procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp:=WebBrowser2.Application;
panel1.Visible:=false;
panel2.Visible:=true;
end;

procedure TForm1.WebBrowser2NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
ppDisp:=WebBrowser1.Application;
panel2.Visible:=false;
panel1.Visible:=true


我只回答第一个问题,看你给多少分:
1 NewWindow2的在接口中定义的原形:
procedure NewWindow2(Sender: TObject; var ppDisp: IDispatch;
var Cancel: WordBool);

2 通过传递一个WebBrowser的控制借口给ppDisp可以让新网页在指定的Wb中浏览
ppDisp:=WebBrowser1.Browser.ControlInterface;

3 在刚才传递的WebBrowser的OnBeforeNavigate2事件中就可以获得将要打开的
URL了!



function SaveToStream(AStream: TStream): HRESULT;
var
IpStream: IPersistStreamInit;
begin
with browser1 do
begin
while ReadyState <> READYSTATE_COMPLETE do
Forms.Application.ProcessMessages;
if Assigned(Document) then
begin
IpStream := Document as IPersistStreamInit;
Result := IpStream.save(TStreamAdapter.Create(AStream), TRUE);
end else Result := S_FALSE;
end;
end;

function Loadfromstream(AStream:TStream):hresult;
begin
with browser1 do
begin
if not Assigned(Document) then
begin
navigate2('about:blank',0,0,0,0);
while readystate <> READYSTATE_COMPLETE do Forms.Application.ProcessMessages;
end;
AStream.seek(0, 0);
Result := (Document as IPersistStreamInit).Load(TStreamadapter.Create(AStream));
end;
end;

相关文章推荐

Delphi实现HTMLWebBrowser实现HTML界面

elphi实现HTMLWebBrowser实现HTML界面  HTML的界面有以下特点:图文混排,格式灵活,可以包含Flash、声音和视频等,实现图文声像的多媒体界面,而且易于建立和维护。另外,HT...
  • fghydx
  • fghydx
  • 2014-01-20 10:11
  • 1220

webBrowser加载Word,以及保存

------------------------------------------------------打开文档------------------------------------------...

WebBrowser打开Word文档的一些注意事项

WebBrowser打开Word文档的一些注意事项2009年09月27日 星期日 17:37忙乎了多日,终于将WebBrowser中Word工具栏中搞定    在题库管理系统中,需要将试题显示出来,并...

delphi禁止webbrowser弹出窗口或者脚本错误

delphi禁止webbrowser弹出窗口或者脚本错误 webbrowser1.silent:=true; //屏蔽脚本错误 procedure TForm1.WebBrowser1Ne...

Delphi_Webbrowser中自动点击Alert弹出窗口中的按钮

function CallBackProc(H, HMainForm: hwnd): Boolean; stdcall; var   hChild: hwnd; begin   Result := T...
  • wbryfl
  • wbryfl
  • 2013-12-02 20:00
  • 2416

Delphi“尚未调用CoInitialize”解决方法

这个一般是在使用COM或者调用ADO控件时出现的错误,通常情况下都是程序的问题。调用了com,ole函数库前就要coinitialize,因为在应用程序中,delphi会自动在initialize 单...

用webBrowser打开网页出现脚本错误怎么办?

把Slient属性设为True就不会弹出脚本错误的信息了。 转自:http://bbs.csdn.net/topics/390351223
  • hncsl
  • hncsl
  • 2016-10-08 16:49
  • 824

用webBrowser打开网页出现脚本错误怎么办

当IE浏览器遇到脚本错误时,在浏览器左下角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框。我们在用webBrowser编写的程序打开网页,遇到脚本有问题是,会弹出一个错误...

delphi 怎么将webbrowser的cookie给idhttp用

WEBCooKies :=(CookieWEB.document as ihtmldocument2).cookie; IdHTTP.Request.CustomHeaders.Text := ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)