4

私は以下のコードを使用します:

const
  HTML_DOC =
    '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">' +
    '<BODY><P id="p1" style="width: 440px; height: 344px; margin: 3px 2px; float: left;">test</P></BODY>' +
    '</HTML>';

procedure TForm1.Button1Click(Sender: TObject);
var
  HTMLTxtRange: IHTMLTxtRange;
  HTMLDocument: IHTMLDocument2;
  HTMLElement: IHTMLElement;
  HTMLStyle: IHTMLStyle;
begin
  WebBrowser1.Navigate('about:blank');
  while WebBrowser1.ReadyState < READYSTATE_COMPLETE do
    Application.ProcessMessages;

  HTMLDocument := WebBrowser1.Document as IHTMLDocument2;
  HTMLTxtRange := (HTMLDocument.body as IHTMLBodyElement).createTextRange;
  HTMLTxtRange.PasteHTML(HTML_DOC);    

  HTMLElement := (HTMLDocument as IHTMLDocument3).getElementById('p1');
  if Assigned(HTMLElement) then
  begin
    HTMLStyle := HTMLElement.style {as IHTMLStyle2};
    Memo1.Lines.Add(HTMLStyle.cssText);  // MARGIN: 3px 2px; WIDTH: 440px; FLOAT: left; HEIGHT: 344px
    Memo1.Lines.Add(HTMLStyle.getAttribute('margin', 0)); // 3px 2px
  end;    
end;

私の質問は、手動で解析せずにDOMコレクションを使用して使用可能なスタイル属性のリストを取得するにはどうすればよいですか。HTMLStyle.cssTextつまり、期待される出力です。

MARGIN
WIDTH
FLOAT
HEIGHT
4

2 に答える 2

1

IHTMLStyle(またはその子孫)は、その種の機能を公開しません。ただし、はインターフェイスをIHTMLStyle実装しているため、を使用してスタイルオブジェクトを説明するインターフェイスを取得し、使用可能なプロパティを反復処理して、検出した各プロパティの値を読み取ることができます。ただし、が実行可能なものを返さない場合は、運が悪いため、代わりに解析する必要があります。IDispatchIDispatch.GetTypeInfo()ITypeInfoIDispatch.Invoke()GetTypeInfo()ITypeInfoIHTMLStyle.cssText

于 2013-01-07T18:18:46.003 に答える
0
var win7: ihtmlwindow7;
     css: ihtmlcssstyledeclaration;
begin
  Win7:= (webbrowser1.document as ihtmldocument2).parentwindow as ihtmlwindow7;
  css:= win7.getcomputedstyle(htmlelement as ihtmldomnode);

  for... css.length
   css.item
于 2017-10-04T00:50:53.480 に答える