1

IHTMLElementCollection を反復処理する方法はありますか?

そのような

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

_newEnum という名前のプロパティがあることは知っていますが、理解できる限り Delphi ではサポートされていません。

更新: どうやらリンクは IHTMLElement であり、IHTMLLinkElement ではありません

4

2 に答える 2

6
for I := 0 to Pred(elementCollection.length) do
begin
  e := elementCollection.item(I, EmptyParam) as IHTMLElement;
  //...
end;
于 2011-10-10T12:13:27.890 に答える
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;
于 2011-10-10T13:57:05.030 に答える