2011-10-10 5 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 IHTMLAnchorElement에 내부 루프의 as IHTMLElement 부분 (그리고 ELEM 값 유형)를 변경할 수

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; 
(IHTMLLinkElement는 완전히 다른 무언가를 것으로 보인다)
+1

+1 이것은 매우 쉽게 델파이 열거 자로 포장 될 수 있습니다. –

+0

아마도 그것이 무엇입니까? 나는 가장 최근의 델파이 버전이 enumeration 인터페이스를 사용할 수있는 foreach 문을 가지고 있다고 들었다. IEnumVariant를 포함 할까? (아직 델파이 최신 버전이 없기 때문에 확인할 수 없습니다) –