里面就一个webbrowser控件和pagecontrol控件代码如下,我怎么样都不能捕捉到OnNewWindow2事件,就是说我在浏览器中点击一个连接后,动态出现一个webbrowser,并在pagecontrol中建立一个新的页。
unit xxxxxx;interfaceuses
Windows, messages,SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ActiveX, OleCtrls, SHDocVw, ComCtrls, StdCtrls,MSHTML;type
TfrmChildWeb = class(TForm)
WebBrowser: TWebBrowser;
PageControl1: TPageControl;
Constructor Create(AOwner:TComponent);
procedure FormCreate(Sender: TObject);
private
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
procedure Navigate2(Sender: TObject;const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure WebBrowserNewWindow(Sender: TObject; var ppDisp: System.IDispatch; var Cancel: WordBool);
public
procedure TabSheetWithBrowserResize(var amsg:TMessage); message WM_SIZE;
Destructor Destory;
published
end;
var
frmChildWeb:TFrmChildWeb;implementation{$R *.dfm}
constructor TfrmChildWeb.Create(AOwner: TComponent);
begin
inherited;
self.WebBrowser:=TWebBrowser.Create(AOwner);
end;destructor TfrmChildWeb.Destory;
begin
WebBrowser.Destroy;
WebBrowser:=nil;
inherited;
end;procedure TfrmChildWeb.TabSheetWithBrowserResize(var amsg:TMessage);
begin
self.WebBrowser.SetBounds(0,0,amsg.LParamLo,amsg.LParamHi);
end;procedure TfrmChildWeb.WebBrowserNewWindow(Sender: TObject; var ppDisp: System.IDispatch; var Cancel: WordBool);
var
tabwb:TfrmChildWeb;
begin
tabwb:=TfrmChildWeb.Create(self);
tabwb.PageControl1 := self.PageControl1 ;
tabwb.WebBrowser.ParentWindow := tabwb.Handle ;
tabwb.WebBrowser.SetBounds(0,0,tabwb.Width,tabwb.Height);
end;
//下面的过程用于WebBrowser输入回车
Procedure TfrmChildWeb.Navigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
S : String;
Begin
S := URL;
Application.MessageBox(pchar(S), 'URL', 0);
End;
procedure TfrmChildWeb.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
iOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
begin
if WebBrowser = nil then begin
Handled := False;
Exit;
end;
Handled := (IsDialogMessage(WebBrowser.Handle, Msg) = True); if (Handled) and (not WebBrowser.Busy) then
begin
if FOleInPlaceActiveObject = nil then
begin
Dispatch := WebBrowser.Application;
if Dispatch <> nil then
begin
Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
if iOIPAO <> nil then
FOleInPlaceActiveObject := iOIPAO;
end;
end; if FOleInPlaceActiveObject <> nil then
if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)) then
else
FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;
end;//主窗体启动后激发的事件
procedure TfrmChildWeb.FormCreate(Sender: TObject);
begin
Application.OnMessage := MsgHandler;
WebBrowser.Navigate('http://xxxxxxxxxx', EmptyParam,EmptyParam);
end;
//加入下面两行代码,可以使用Ctrl+C进行复制
initialization
OleInitialize(nil);
finalization
OleUninitialize;end.
unit xxxxxx;interfaceuses
Windows, messages,SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ActiveX, OleCtrls, SHDocVw, ComCtrls, StdCtrls,MSHTML;type
TfrmChildWeb = class(TForm)
WebBrowser: TWebBrowser;
PageControl1: TPageControl;
Constructor Create(AOwner:TComponent);
procedure FormCreate(Sender: TObject);
private
FOleInPlaceActiveObject: IOleInPlaceActiveObject;
procedure MsgHandler(var Msg: TMsg; var Handled: Boolean);
procedure Navigate2(Sender: TObject;const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
procedure WebBrowserNewWindow(Sender: TObject; var ppDisp: System.IDispatch; var Cancel: WordBool);
public
procedure TabSheetWithBrowserResize(var amsg:TMessage); message WM_SIZE;
Destructor Destory;
published
end;
var
frmChildWeb:TFrmChildWeb;implementation{$R *.dfm}
constructor TfrmChildWeb.Create(AOwner: TComponent);
begin
inherited;
self.WebBrowser:=TWebBrowser.Create(AOwner);
end;destructor TfrmChildWeb.Destory;
begin
WebBrowser.Destroy;
WebBrowser:=nil;
inherited;
end;procedure TfrmChildWeb.TabSheetWithBrowserResize(var amsg:TMessage);
begin
self.WebBrowser.SetBounds(0,0,amsg.LParamLo,amsg.LParamHi);
end;procedure TfrmChildWeb.WebBrowserNewWindow(Sender: TObject; var ppDisp: System.IDispatch; var Cancel: WordBool);
var
tabwb:TfrmChildWeb;
begin
tabwb:=TfrmChildWeb.Create(self);
tabwb.PageControl1 := self.PageControl1 ;
tabwb.WebBrowser.ParentWindow := tabwb.Handle ;
tabwb.WebBrowser.SetBounds(0,0,tabwb.Width,tabwb.Height);
end;
//下面的过程用于WebBrowser输入回车
Procedure TfrmChildWeb.Navigate2(Sender: TObject;
const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
Headers: OleVariant; var Cancel: WordBool);
var
S : String;
Begin
S := URL;
Application.MessageBox(pchar(S), 'URL', 0);
End;
procedure TfrmChildWeb.MsgHandler(var Msg: TMsg; var Handled: Boolean);
var
iOIPAO: IOleInPlaceActiveObject;
Dispatch: IDispatch;
begin
if WebBrowser = nil then begin
Handled := False;
Exit;
end;
Handled := (IsDialogMessage(WebBrowser.Handle, Msg) = True); if (Handled) and (not WebBrowser.Busy) then
begin
if FOleInPlaceActiveObject = nil then
begin
Dispatch := WebBrowser.Application;
if Dispatch <> nil then
begin
Dispatch.QueryInterface(IOleInPlaceActiveObject, iOIPAO);
if iOIPAO <> nil then
FOleInPlaceActiveObject := iOIPAO;
end;
end; if FOleInPlaceActiveObject <> nil then
if ((Msg.message = WM_KEYDOWN) or (Msg.message = WM_KEYUP)) and
((Msg.wParam = VK_BACK) or (Msg.wParam = VK_LEFT) or (Msg.wParam = VK_RIGHT)) then
else
FOleInPlaceActiveObject.TranslateAccelerator(Msg);
end;
end;//主窗体启动后激发的事件
procedure TfrmChildWeb.FormCreate(Sender: TObject);
begin
Application.OnMessage := MsgHandler;
WebBrowser.Navigate('http://xxxxxxxxxx', EmptyParam,EmptyParam);
end;
//加入下面两行代码,可以使用Ctrl+C进行复制
initialization
OleInitialize(nil);
finalization
OleUninitialize;end.
解决方案 »
- 用WinSocket做的Server,无法send的数据给客户端(附源码)
- 为IDWB,tjianliang 等几位朋友散分
- 关于同时屏蔽鼠标左键与滚轮
- 服务器运行时报错“由于系统缓冲区空间不足或列队已满,不能执行套接字上的操作。” 是什么原因
- 如何获得当前窗口大小?
- 关于MEMO控件的问题
- BDE中的 Database1.StartTransaction;和database1.Rollback功能在 ADO 中能实现吗?
- 在先等待 50 分--如果让程序在退出时,询问是否退出!是就退出 不是就不退出 呵呵
- 应用程序资源图标的问题
- 各位大哥,我总共才30分了,请帮帮我,关于文件的大小判断和删除.
- webbrowser控件的“复制”功能为什么不起作用?
- 有一个存储过程,可以动态选择字段进行查询
tabwb:TfrmChildWeb?
这是什么道理OnNewWindow2本身和窗体的WebBrowserNewWindow没有任何联系!窗体WebBrowserNewWindow中:
tabwb.WebBrowser.OnNewWindow2:=self.WebBrowserNewWindow;窗体的初始化也要加上这类语句!