перебрать IHTMLElementCollection - PullRequest
       18

перебрать IHTMLElementCollection

1 голос
/ 10 октября 2011

есть ли способ перебрать IHTMLElementCollection?

, например

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

Я знаю, что есть свойство с именем _newEnum, однако оно не поддерживается в Delphi так, как я могпонять.

обновление: дополнительные ссылки являются IHTMLElement, а не IHTMLLinkElement

Ответы [ 2 ]

6 голосов
/ 10 октября 2011
for I := 0 to Pred(elementCollection.length) do
begin
  e := elementCollection.item(I, EmptyParam) as IHTMLElement;
  //...
end;
2 голосов
/ 10 октября 2011

Код для использования _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;
...