2011-10-10 76 views
1

是否有迭代IHTMLElementCollection的方法?遍历IHTMLElementCollection

var 
    e : IHTMLLinkElement; 
elementCollection:IHTMLElementCollection; 
begin 
    for e in elementCollection do 
     showmessage(e.caption); 
end; 

我知道有一个名为_NewEnum属性,但它不是在德尔福的支持,就像我能理解。

更新: apperently链接IHTMLElement而不是IHTMLLinkElement

+0

我把它写成“IHTMLElementCollection的愤怒”,并认为“它不能那么糟!” :-) –

回答

6
for I := 0 to Pred(elementCollection.length) do 
begin 
    e := elementCollection.item(I, EmptyParam) as IHTMLElement; 
    //... 
end; 
2

使用_NewEnum看起来像这样的代码。如果你确定你只在收集了链接元素的项目,你可以在内环的as IHTMLElement部分(与ELEM值类型)更改为as IHTMLAnchorElement(IHTMLLinkElement似乎是完全不同的东西)

uses MSHTML, ActiveX; 

var 
    collection:IHTMLElementCollection; 
    enum:IEnumVariant; 
    v:OleVariant; 
    u:IUnknown; 
    element:IHTMLElement; 
begin 
    //... 
    enum:=collection._newEnum as IEnumVariant; 
    while enum.Next(1,v,u)=S_OK do 
    begin 
    elem:=u as IHTMLElement; 
    //... 
    end; 
+1

+1这可以很容易地被包装成一个德尔福的枚举。 –

+0

也许是?我听说最近的Delphi版本有foreach语句,如果有可用的话,它使用枚举接口,也许这包括IEnumVariant? (我无法检查,因为我没有最新的Delphi版本) –