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; //后退 这一句代码,现在这句代码不能运行,谢谢了

解决方案 »

  1.   

    都找到了TabSheet,那直接取其中的Components,找出TWebBrowser就可以了。
    for i := 0 to tab.Componentcount - 1 do
      begin
        if tab.Components.Component[I] is TWebbrowser then
          TWebbrowser(tab.Components.Component[I]).GoBack;
      end;
      

  2.   

    偿试了一下以下代码:
    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)
      

  3.   

    for里面用的是ControlCount那为什么下面取的是Components?
      

  4.   

    for i := 0 to tab.Componentcount - 1 do 
      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问题现在依然没有解决啊 
      

  5.   

    下面这段代码没有问题吧?参考着写吧。
    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;