procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key=13 then
begin
if first<>0 then
begin
first:=1 + first;
tab:=TTabSheet.Create(self);
tab.Parent:=self.PageControl1;
tab.PageControl:=self.PageControl1;
//ta:= Self.PageControl1.ActivePage;
//Self.PageControl1.ActivePage:=tab;
tab.Align:=alClient;
tab.Tag:=first;
//tab.Visible:=True;subweb:=TWebBrowser.Create(tab);
subweb.ParentWindow := tab.Handle;
TOleControl(subweb).Parent :=tab;
subweb.OnNewWindow2:=self.WebBrowser1NewWindow2;
subweb.OnDocumentComplete:=self.WebBrowser1DocumentComplete;
subweb.Align:=alClient;
//subweb.Visible:=True;
//ppDisp := subweb.DefaultDispatch;
Self.web:=subweb;
self.web.Tag:=first;
end
else first:=1;self.web.Navigate(self.Edit1.Text);end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
self.web.Free;
end;procedure TForm1.FormShow(Sender: TObject);
begin
self.web:=self.WebBrowser1;
end;procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
//if first=0 then Exit;
first:=1 + first;
tab:=TTabSheet.Create(self);
tab.Parent:=self.PageControl1;
tab.PageControl:=self.PageControl1;
//ta:= Self.PageControl1.ActivePage;
Self.PageControl1.ActivePage.SetFocus;
tab.Align:=alClient;
tab.Tag:=first;
//tab.Visible:=True;subweb:=TWebBrowser.Create(tab);
subweb.ParentWindow := tab.Handle;
TOleControl(subweb).Parent :=tab;
subweb.OnNewWindow2:=self.WebBrowser1NewWindow2;
subweb.OnDocumentComplete:=self.WebBrowser1DocumentComplete;
subweb.Align:=alClient;
//subweb.Visible:=True;
ppDisp := subweb.DefaultDispatch;
Self.web:=subweb;
self.web.Tag:=first;
//Self.PageControl1.ActivePage := ta;
end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);begin
hd := TWebBrowser(Sender).Document as IHTMLDocument2;
TTabSheet(TOleControl(Sender).Parent).Caption := hd.title;
edit1.text:=hd.url;
TTabSheet(TOleControl(Sender).Parent).Caption :=copy(hd.title,1,2);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
first:=0;
Timer1.Interval := 300;
Timer1.Enabled := False;
self.web:=TWebBrowser.Create(self);
end;procedure TForm1.PageControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Timer1.Enabled and Assigned(TPageControl(Sender).ActivePage) then
TPageControl(Sender).ActivePage.TabVisible := False
//TPageControl(Sender).ActivePage.Free//如果你是动态创建
else Timer1.Enabled := True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
TTimer(Sender).Enabled := False;
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
//if self.WebBrowser1.Tag= TPageControl(Sender).ActivePage.Tag
TWebBrowser(Sender).GoBack; //后退
end;我用以上代码创建了一个多页面浏览器,现在想做一个前进后退的功能,当我点击那个BitBtn2Click按钮,目标是想让网页后退,可是结果出错,分析其原因应是没有选定Webbrowser实例,导至程序不知道给哪一个webbrowser后退而已,在创建webbrowser实例的时候,我把每个实例的标签都设成与TabSheet一样的标签了,其代码如下:
tab.Tag:=first;
self.web.Tag:=first;
我可以通过TPageControl(Sender).ActivePage.tag来找到当前所使用的TabSheet,这个TabSheet的tag和其下的webbrowser控件标签相等的,可是我不懂得如何通过Webbrowser标签来定位Webbrowser控件,定位好Webbrowser才可以对其进行一系列的操作。
其实问题说简单一点就是帮我改写一下TWebBrowser(Sender).GoBack; //后退 这一句代码,现在这句代码不能运行,谢谢了
Shift: TShiftState);
begin
if Key=13 then
begin
if first<>0 then
begin
first:=1 + first;
tab:=TTabSheet.Create(self);
tab.Parent:=self.PageControl1;
tab.PageControl:=self.PageControl1;
//ta:= Self.PageControl1.ActivePage;
//Self.PageControl1.ActivePage:=tab;
tab.Align:=alClient;
tab.Tag:=first;
//tab.Visible:=True;subweb:=TWebBrowser.Create(tab);
subweb.ParentWindow := tab.Handle;
TOleControl(subweb).Parent :=tab;
subweb.OnNewWindow2:=self.WebBrowser1NewWindow2;
subweb.OnDocumentComplete:=self.WebBrowser1DocumentComplete;
subweb.Align:=alClient;
//subweb.Visible:=True;
//ppDisp := subweb.DefaultDispatch;
Self.web:=subweb;
self.web.Tag:=first;
end
else first:=1;self.web.Navigate(self.Edit1.Text);end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
self.web.Free;
end;procedure TForm1.FormShow(Sender: TObject);
begin
self.web:=self.WebBrowser1;
end;procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
var ppDisp: IDispatch; var Cancel: WordBool);
begin
//if first=0 then Exit;
first:=1 + first;
tab:=TTabSheet.Create(self);
tab.Parent:=self.PageControl1;
tab.PageControl:=self.PageControl1;
//ta:= Self.PageControl1.ActivePage;
Self.PageControl1.ActivePage.SetFocus;
tab.Align:=alClient;
tab.Tag:=first;
//tab.Visible:=True;subweb:=TWebBrowser.Create(tab);
subweb.ParentWindow := tab.Handle;
TOleControl(subweb).Parent :=tab;
subweb.OnNewWindow2:=self.WebBrowser1NewWindow2;
subweb.OnDocumentComplete:=self.WebBrowser1DocumentComplete;
subweb.Align:=alClient;
//subweb.Visible:=True;
ppDisp := subweb.DefaultDispatch;
Self.web:=subweb;
self.web.Tag:=first;
//Self.PageControl1.ActivePage := ta;
end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);begin
hd := TWebBrowser(Sender).Document as IHTMLDocument2;
TTabSheet(TOleControl(Sender).Parent).Caption := hd.title;
edit1.text:=hd.url;
TTabSheet(TOleControl(Sender).Parent).Caption :=copy(hd.title,1,2);
end;procedure TForm1.FormCreate(Sender: TObject);
begin
first:=0;
Timer1.Interval := 300;
Timer1.Enabled := False;
self.web:=TWebBrowser.Create(self);
end;procedure TForm1.PageControl1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Timer1.Enabled and Assigned(TPageControl(Sender).ActivePage) then
TPageControl(Sender).ActivePage.TabVisible := False
//TPageControl(Sender).ActivePage.Free//如果你是动态创建
else Timer1.Enabled := True;
end;procedure TForm1.Timer1Timer(Sender: TObject);
begin
TTimer(Sender).Enabled := False;
end;procedure TForm1.BitBtn2Click(Sender: TObject);
begin
//if self.WebBrowser1.Tag= TPageControl(Sender).ActivePage.Tag
TWebBrowser(Sender).GoBack; //后退
end;我用以上代码创建了一个多页面浏览器,现在想做一个前进后退的功能,当我点击那个BitBtn2Click按钮,目标是想让网页后退,可是结果出错,分析其原因应是没有选定Webbrowser实例,导至程序不知道给哪一个webbrowser后退而已,在创建webbrowser实例的时候,我把每个实例的标签都设成与TabSheet一样的标签了,其代码如下:
tab.Tag:=first;
self.web.Tag:=first;
我可以通过TPageControl(Sender).ActivePage.tag来找到当前所使用的TabSheet,这个TabSheet的tag和其下的webbrowser控件标签相等的,可是我不懂得如何通过Webbrowser标签来定位Webbrowser控件,定位好Webbrowser才可以对其进行一系列的操作。
其实问题说简单一点就是帮我改写一下TWebBrowser(Sender).GoBack; //后退 这一句代码,现在这句代码不能运行,谢谢了
for i := 0 to tab.Componentcount - 1 do
begin
if tab.Components.Component[I] is TWebbrowser then
TWebbrowser(tab.Components.Component[I]).GoBack;
end;
ta:=PageControl1.ActivePage;
for I := 0 to ta.ControlCount-1 do
begin
if ta.Components[I] is Tedit then
Tedit(ta.Components[I]).text:='999999';
end;
运行结果出错; 错误信息:list index out of bounds (0)
begin
if tab.Components.Component[I] is TWebbrowser then
TWebbrowser(tab.Components.Component[I]).GoBack;
end;
在form中可以这样写
tab.Componentcount
但在tabsheet中这样写其值一直都是0
具体可以参看http://topic.csdn.net/t/20021024/10/1120502.html问题现在依然没有解决啊
var
tab:TTabSheet;
subweb:TWebBrowser;
I: Integer;
begin
tab := TTabSheet.Create(self);
tab.PageControl := PageControl1;
subweb:=TWebBrowser.Create(tab);
subweb.ParentWindow := tab.Handle;
TOleControl(subweb).Parent :=tab;
tab := PageControl1.ActivePage;
for I := 0 to tab.ComponentCount - 1 do
ShowMessage(tab.Components[I].ClassName);end;