最近发现一个软件,主界面就用webbrowser载入一个html页面,点击html的某一块区域,可以弹出相对应的form,请问这样的功能是如何实现的?
大家给点思路,问题一解决即散分.

解决方案 »

  1.   

    用ActiveX,网页中用脚本调用相应的ActiveXForm就可以了
      

  2.   

    页面中不同的区域指向不同的url,处理browser控件的BeforeNavigate2事件,在事件处理函数中弹出相应的form。
      

  3.   

    接 hyqer ,如果要自己弹出窗口,记住把事件中的参数 Cancel 设置为 false 。
      

  4.   

    or use scripts in the HTML and override IDocHostUIHandler::GetExternal to make your application scriptable.
      

  5.   

    http://www.delphidabbler.com/articles?article=22&part=3
      

  6.   

    给你一段我的窗体代码吧
    ufrmRepCenter.pas
    -----------------------
    unit ufrmRepCenter;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ufrmBaseMDI, OleCtrls, SHDocVw;type
      TfrmRepCenter = class(TfrmBaseMDI)
        wb: TWebBrowser;
        procedure FormCreate(Sender: TObject);
        procedure wbDocumentComplete(Sender: TObject; const pDisp: IDispatch;
          var URL: OleVariant);
        procedure wbBeforeNavigate2(Sender: TObject; const pDisp: IDispatch;
          var URL, Flags, TargetFrameName, PostData, Headers: OleVariant;
          var Cancel: WordBool);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      frmRepCenter: TfrmRepCenter;
      bLoaded:Boolean;
    implementationuses uAppFunction, ufrmShowReport;{$R *.dfm}procedure TfrmRepCenter.FormCreate(Sender: TObject);
    begin
      inherited;
      bLoaded:=False;
      wb.Navigate(TMyApp.GetAppPath+'html/Reportcenter.html');
      bLoaded:=True;
    end;procedure TfrmRepCenter.wbDocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      inherited;
      wb.oleobject.Document.body.Scroll := 'no';
    end;procedure TfrmRepCenter.wbBeforeNavigate2(Sender: TObject;
      const pDisp: IDispatch; var URL, Flags, TargetFrameName, PostData,
      Headers: OleVariant; var Cancel: WordBool);
    var
      sURL: string;
      I: Integer;
      f: TForm;
    begin
      inherited;
      if bLoaded then
      begin
        sURL:=ExtractFileName(String(URL));
        I:=StrToInt(sURL);
        frmShowReport:= TfrmShowReport.Create(I,self);
        frmShowReport.Show;
        Cancel:=True;
      end;
      
    end;end.ufrmRepCenter.dfm
    -----------------------
    inherited frmRepCenter: TfrmRepCenter
      Left = 228
      Top = 190
      Caption = #25253#34920#20013#24515
      OldCreateOrder = True
      OnCreate = FormCreate
      PixelsPerInch = 96
      TextHeight = 13
      object wb: TWebBrowser
        Left = 0
        Top = 0
        Width = 688
        Height = 453
        Align = alClient
        TabOrder = 0
        OnBeforeNavigate2 = wbBeforeNavigate2
        OnDocumentComplete = wbDocumentComplete
        ControlData = {
          4C0000001B470000D22E00000000000000000000000000000000000000000000
          000000004C000000000000000000000001000000E0D057007335CF11AE690800
          2B2E126208000000000000004C0000000114020000000000C000000000000046
          8000000000000000000000000000000000000000000000000000000000000000
          00000000000000000100000000000000000000000000000000000000}
      end
    end
      

  7.   

    抱歉,一句话说反了,是敲反了。
    记住把事件中的参数 Cancel 设置为 false 
    应该为
    记住把事件中的参数 Cancel 设置为 True