我做了个浏览器
打开新的页面时 就跳转到IE打开了
怎么能做到用自身打开啊怎么做呢?
如何实现呢?

解决方案 »

  1.   

    最重要的是处理两个事件:
    procedure TFormWeb.WebBrowserDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      //这段代码是记下打开的地址
      curUrl:=URL;
      SetHistory;
      RefreshButton;
    end;procedure TFormWeb.WebBrowserNewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
    var
      NewApp:TFormWeb;
    begin
      //这段代码是用自身浏览器打开
      NewApp:=TFormWeb.Create(nil);
      NewApp.Visible:=true;
      ppDisp:=NewApp.webbrowser.Application;
    end;
      

  2.   

    在OnNewWindow2事件中写上
    procedure TForm1.WebBrowser1NewWindow2(ASender: TObject; var ppDisp: IDispatch;
      var Cancel: WordBool);
    begin
       ppDisp := Self.WebBrowser1;
    end;
    让新的宿主为WebBrowser则可
      

  3.   

    如果是用新窗体打开,而不是用IE打开,简单一点:
    procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
    var
      frmWB:TForm1;
    begin
      frmWB := TForm1.Create(Self);
      frmWB.WebBrowser1.RegisterAsBrowser := TRUE;
      ppDisp := frmWB.WebBrowser1.OleObject;
      frmWB.Visible := TRUE;
    end;
    如果是用当前WebBrowser打开,可以这样:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, SHDocVw, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        WebBrowser1: TWebBrowser;
        procedure Button1Click(Sender: TObject);
        procedure WebBrowser1NewWindow2(Sender: TObject; var ppDisp: IDispatch;
          var Cancel: WordBool);
        procedure tempWBBeforeNavigate2(Sender: TObject;
          const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
          Headers: OleVariant; var Cancel: WordBool);
        procedure WebBrowser1DocumentComplete(Sender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    var
      tempWB : TWebBrowser;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Self.WebBrowser1.Navigate('http://www.google.cn');
    end;procedure TForm1.WebBrowser1NewWindow2(Sender: TObject;
      var ppDisp: IDispatch; var Cancel: WordBool);
    begin
      tempWB := TWebBrowser.Create(Self);
      tempWB.OnBeforeNavigate2 := Self.tempWBBeforeNavigate2;
      ppDisp := tempWB.OleObject;
    end;procedure TForm1.tempWBBeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    begin
      Self.WebBrowser1.Navigate(Url);
      Cancel := True;
    end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      if Assigned(tempWB) then FreeAndNil(tempWB);
    end;end.
      

  4.   

    忽然发现,4楼第一种代码里,如果frmWB := TForm1.Create(Self);是在本窗体的WebBrowser打开,如果frmWB := TForm1.Create(Application或nil);是在新窗口打开