如何实现 当我鼠标移动到WebBrowser1 上 显示SHOWMESSAGE(‘1‘) 移动到WebBrowser2上 显示SHOWMESSAGE(‘2)
解决方案 »
- 关于treeview
- 高手请留步,一定要帮小弟一把,满分相送,关于xml文件解析的问题,万分感激!!!
- 谁有DELPHI的例子
- 各位在面试时都遇到过什么样的考题
- 在adoquery中如何设置bit类型的数据显示格式?
- 关于Combobox的索引问题
- 在線等候.答者有分(一個很簡單的問題)可我不懂.
- 加壳的程序能Hook吗?
- 如何创建一个无焦点的Form?类似模拟键盘。另外,谁知道WebBrowser控件如何把显示的网页另存为本地文件,类似IE里面的文件另存为功能。
- 各大高手,请帮帮新手小妹解决有关query的sql格式转换问题!万分感谢!!!
- readfile 无法赋值动态二维数组????
- dephi 自带数据库
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.
哈哈!楼主是怎么让第一个跳的?那就依样做一次不就跳了? WebBrowser2.OnDocumentComplete := Self.WebBrowser1DocumentComplete;
//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]
procedure TForm1.Document_OnMouseOver(ADocument: IHTMLDocument2);
begin
{如果是WebBrowser1 showmesaage('1')}
{如果是WebBrowser2 showmesaage('2')}
end;
唉,啥也不说了:
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;