IHtmlElement的事件(100分)

  • 主题发起人 主题发起人 coolbaby
  • 开始时间 开始时间
真是奇怪了,<A>标记根本获得不了IHTMLLinkElement接口
但用IHtmlElement接口可以获得IConnectionPointContainer
把你的,源代码发给我,我怎么用连接点就做不到呢?
 
真是奇怪了,标记根本获得不了IHTMLLinkElement接口
但用IHtmlElement接口可以获得IConnectionPointContainer
把你的,源代码发给我,我怎么用连接点就做不到呢?
mail: lichaohui@old.371.net


 
IHTMLLinkElement我其实也没试过,不过应该可以
IHTMLImgElement是可以的。不过,IHTMLElement不行
我一会儿给你发个EventSink导出的组建,只要直接connect一个
那个element的IUnknown接口就可以了
有说明问题,回我邮件
 
我已经把组件和一个例子程序发给你了,
那个事件Sink导入的工具真是太厉害了,
我导入了4个事件,竟然产生了2万多行代码,
乖乖,简直是希望工程
 
LiChaoHui,
你的组件不是用的连接点呀
连个QueryConnectPointContainer都没看见?
你用的attachEvent我在我的msdn上都查不到
你有它的相关资料么?
谢谢.
你的那个demo程序倒是可以运行,不过,你现在触发的是一个
自己已经标记了id的元素,如果是一个普通的元素呢?
能触发么?
 
另外,你试试eventsink的ielementevent的事件,好不好使
谢谢
 
MSDN上是有的,我就是查了MSDN,才能够完善了这个组件的
我试了一下,换成一个普通的元素是可以的,
但是,事件会触发多次,所以要求程序最好能根据事件源丢弃多余的事件
(打算由组件来自动完成,但是还没有好的方法),
譬如,表格中嵌套表格,在一个TD中的点击事件同样也属于他外层的TD对象,
那么这个事件会触发多次,

下面是用此组件捕获标准的标记的代码,他根据用户的点击
显示所点击的对象的TagName,组件的属性如下设置:
ObjectList := '';
StandardTags := 'td'; //也可以写多个,用;号隔开
EventsToFire := 'onclick;ondblclick'; //可以触发多种事件,事件名字用";"隔开
如果要限制能够触发的页面,则需要设置 PagesToRecv
如果为空,则对所有的页面都进行处理

procedure TForm1.Button1Click(Sender: TObject);
begin
WebBrowser1.Navigate(
ExtractFilePath(Application.ExeName) + 'events.htm');
end;

procedure TForm1.WebEvent1Event(Sender: TWebBrowser);
var
vDoc: OleVariant;
vEle: OleVariant;

begin
vDoc := Sender.Document;
if Assigned(IDispatch(vDoc)) then
begin
vEle := vDoc.parentWindow.event.srcElement;
ShowMessage('The event come from: ' + vEle.tagName);
end;
end;

procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
WebEvent1.AttachEvents;
end;

麻烦老兄提点意见,另外,对我做的这一套组件感不感兴趣,
(准备作为商业组件,并面向国外)
一个人做的可没意思,想找一个合伙人,
组件的编写大致已经完成,剩下的就是测试,完善和改进了

想知道,你捕获网页的事件,做什么用途啊,不知道和我的用途是否一样
 
我只有晚上回去才能再帮你测一下
支不支持网页上的object对象元素呢?
 
这个我还没有试过,你试一下吧
 
LiChaoHui
这两天比较忙
所以,昨天也没时间
非常抱歉,等我熬过这两天吧
 
老兄还有什么高见
 
呵呵,发分吧
 
后退
顶部