使用COM控制IE遇到的问题(调用IE的问题)!(300分)

  • 主题发起人 主题发起人 Activer
  • 开始时间 开始时间
A

Activer

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在使用Delphi控制IE时,用的IHTMLDocument2接口,
该接口中有一事件 :onmousedown。
我想使用该事件,比如在 onmousedown的时候 跳出一个对话框 显示“你好!”
于是,我写了一个 procedure ShowMe;
但是,不知道该如何赋值给 onmousedown.
相关代码:
...
if SUCCEEDED(DOC1.QueryInterface(IHTMLDocument2,Doc2)) then
begin
....
Doc2.body.onmousedown := @ShowMe; //这一句该怎么写呀?
...
end;
...
 
这个可能是COM的连接点类的事件,应该可以转换以后和VCL的事件融合,
你看看DELPHI生成的TLB文件,看看他的声名,应该是有办法的。
 
to 张无忌:
>>你看看DELPHI生成的TLB文件,看看他的声名,应该是有办法的。

??这里使用了MSHTML.pas,没有什么TLB呀。
 
你试试 MethodAddress(String):Pointer 方法
如: Form1.MethodAddress('FormCreate')
 
to lofa :
好像不对呀,我看了一下Help ,MethodAddress是用于流中,试了一下不行。
 
那你就看看MSHTML.pas里的对应事件的声名,看能不能转换!
 
to 张无忌:

这类东西我不太懂,帮忙看看:
onmousedown 的声明:
property onmousedown: OleVariant read Get_onmousedown write Set_onmousedown;
其中:
procedure Set_onmousedown(p: OleVariant); safecall;
function Get_onmousedown: OleVariant; safecall;
这样,我该怎么调用呢?
 
其实方法是可以直接用 @方法名 得到方法指针的,但是方法指针现在如何付给这个
onmousedown 这个OleVariant类型呢?我觉得现在是这个问题,大家有没有这个的解决
方法?就是从Pointer 到 OleVariant的解决方法,
var
P:POleVariant;
begin
P:=@Test;
I.body.onmouosedown:=P^;

这样不知道行不行?我没有试过
 
to lofa:
ShowMe 过程的代码如下:
....
procedure ShowMe;safecall;
begin
ShowMessage('Just a Test');
end;
.....

...
var
P:POleVariant;
begin
P:=@ShowMe;
I.body.onmouosedown:=P^;
...

编译能通过,但是运行的时候提示 : “不正确的变量类型”

各路大侠 快出手呀!
 
DELPHI5开发人员指南中有关于自动化事件的介绍.不能简单地理解为DELPHI事件.
 
to wolaixue:
手头没有该书,能否指点一下?
 
不好意思,我没有做过这样的程序,也没有经验,建议你还是看看书上说的吧,没书找找电子档.
 
要用到EventSink的方法,建立一个OnMouseDown的回调函数
然后利用dcom中的advise方法
具体的方法请参阅我以前发表的文章
 
好人做到底,我帮你挖出来了[:)]
[blue]http://www.delphibbs.com/delphibbs/dispq.asp?lid=1137521[/blue]
 
我试过 可以啦,谢谢。
 
多人接受答案了。
 
后退
顶部