如何实现 当我鼠标移动到WebBrowser1 上 显示SHOWMESSAGE(‘1‘) 移动到WebBrowser2上 显示SHOWMESSAGE(‘2)

解决方案 »

  1.   

    参考如下代码:
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, OleCtrls, SHDocVw, MSHTML, StdCtrls;type
      TForm1 = class(TForm)
        WebBrowser1: TWebBrowser;
        WebBrowser2: TWebBrowser;
        Memo1: TMemo;
        procedure FormCreate(Sender: TObject);
        procedure WebBrowser1DocumentComplete(Sender: TObject;
          const pDisp: IDispatch; var URL: OleVariant);
      private
        { Private declarations }
        procedure Document_OnMouseOver(ADocument: IHTMLDocument2);
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}uses ActiveX;type
      TObjectProcedure = procedure(ADocument: IHTMLDocument2) of object;  TEventObject = class(TInterfacedObject, IDispatch)
      private
        FOnEvent: TObjectProcedure;
        FDocument: IHTMLDocument2;
      protected
        function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
        function GetTypeInfo(Index, LocaleID: Integer;
          out TypeInfo): HResult; stdcall;
        function GetIDsOfNames(const IID: TGUID; Names: Pointer;
          NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
        function Invoke(DispID: Integer; const IID: TGUID;
          LocaleID: Integer; Flags: Word; var Params; VarResult,
          ExcepInfo, ArgErr: Pointer): HResult; stdcall;
      public
        constructor Create(AOnEvent: TObjectProcedure;
          ADocument: IHTMLDocument2);
        property OnEvent: TObjectProcedure read FOnEvent write FOnEvent;
      end;{ TEventObject }constructor TEventObject.Create(AOnEvent: TObjectProcedure;
      ADocument: IHTMLDocument2);
    begin
      inherited Create;
      FDocument := ADocument;
      FOnEvent := AOnEvent;
    end;function TEventObject.GetIDsOfNames(const IID: TGUID; Names: Pointer;
      NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TEventObject.GetTypeInfo(Index, LocaleID: Integer;
      out TypeInfo): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TEventObject.GetTypeInfoCount(out Count: Integer): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TEventObject.Invoke(DispID: Integer; const IID: TGUID;
      LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
      ArgErr: Pointer): HResult;
    begin
      if (DispID = DISPID_VALUE) then
      begin
        if Assigned(FOnEvent) then FOnEvent(FDocument);
        Result := S_OK;
      end else Result := E_NOTIMPL;
    end;procedure TForm1.Document_OnMouseOver(ADocument: IHTMLDocument2);
    begin
      ShowMessage('Zswang 路过!' + ADocument.url);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://www.baidu.com');
      WebBrowser2.Navigate('http://www.google.cn');
    end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
      vDocument: IHTMLDocument2;
    begin
      vDocument := TWebBrowser(Sender).Document as IHTMLDocument2;
      if not Assigned(vDocument) then Exit;
      vDocument.onmouseover :=
        TEventObject.Create(Document_OnMouseOver, vDocument) as IDispatch;
    end;end.
      

  2.   

    那另1个呢 我有2个WebBrowser  只有1个会跳出来
      

  3.   


    哈哈!楼主是怎么让第一个跳的?那就依样做一次不就跳了?  WebBrowser2.OnDocumentComplete := Self.WebBrowser1DocumentComplete;
      

  4.   

    试了试不行 无法辨别到地是WebBrowser1 还是 WebBrowser2
      

  5.   

    哥们你不会举一反三啊?type
      //TObjectProcedure = procedure(ADocument: IHTMLDocument2) of object;
      TObjectProcedure = procedure(ABrowser: TWebBrowser) of object; // 参考改改[code=MSIL]  vDocument.onmouseover :=
        TEventObject.Create(Document_OnMouseOver, TWebBrowser(Sender)) as IDispatch;[/code]
      

  6.   

    没理解不好意思 我这方面的程序没写过 能提供完整的代码吗?
    procedure TForm1.Document_OnMouseOver(ADocument: IHTMLDocument2);
    begin
      {如果是WebBrowser1 showmesaage('1')}
      {如果是WebBrowser2 showmesaage('2')}
    end;
      

  7.   

    -_-!!! TEventObject是一个自定义的类型,其中的字段是自己加上的,你要判断什么就把什么记录下来。
    唉,啥也不说了:
    uses ActiveX;type
      TObjectProcedure = procedure(ABrowser: TWebBrowser) of object;  TEventObject = class(TInterfacedObject, IDispatch)
      private
        FOnEvent: TObjectProcedure;
        FBrowser: TWebBrowser;
      protected
        function GetTypeInfoCount(out Count: Integer): HResult; stdcall;
        function GetTypeInfo(Index, LocaleID: Integer;
          out TypeInfo): HResult; stdcall;
        function GetIDsOfNames(const IID: TGUID; Names: Pointer;
          NameCount, LocaleID: Integer; DispIDs: Pointer): HResult; stdcall;
        function Invoke(DispID: Integer; const IID: TGUID;
          LocaleID: Integer; Flags: Word; var Params; VarResult,
          ExcepInfo, ArgErr: Pointer): HResult; stdcall;
      public
        constructor Create(AOnEvent: TObjectProcedure;
          AWebBrowser: TWebBrowser);
        property OnEvent: TObjectProcedure read FOnEvent write FOnEvent;
      end;{ TEventObject }constructor TEventObject.Create(AOnEvent: TObjectProcedure;
      AWebBrowser: TWebBrowser);
    begin
      inherited Create;
      FBrowser := AWebBrowser;
      FOnEvent := AOnEvent;
    end;function TEventObject.GetIDsOfNames(const IID: TGUID; Names: Pointer;
      NameCount, LocaleID: Integer; DispIDs: Pointer): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TEventObject.GetTypeInfo(Index, LocaleID: Integer;
      out TypeInfo): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TEventObject.GetTypeInfoCount(out Count: Integer): HResult;
    begin
      Result := E_NOTIMPL;
    end;function TEventObject.Invoke(DispID: Integer; const IID: TGUID;
      LocaleID: Integer; Flags: Word; var Params; VarResult, ExcepInfo,
      ArgErr: Pointer): HResult;
    begin
      if (DispID = DISPID_VALUE) then
      begin
        if Assigned(FOnEvent) then FOnEvent(FBrowser);
        Result := S_OK;
      end else Result := E_NOTIMPL;
    end;procedure TForm1.Document_OnMouseOver(ABrowser: TWebBrowser);
    begin
      if ABrowser = WebBrowser1 then
        ShowMessage('WebBrowser1')
      else if ABrowser = WebBrowser2 then
         ShowMessage('WebBrowser2');
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://www.baidu.com');
      WebBrowser2.Navigate('http://www.google.cn');
    end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    var
      vDocument: IHTMLDocument2;
    begin
      vDocument := TWebBrowser(Sender).Document as IHTMLDocument2;
      if not Assigned(vDocument) then Exit;
      vDocument.onmouseover :=
        TEventObject.Create(Document_OnMouseOver, TWebBrowser(Sender)) as IDispatch;
    end;