15

Webブラウザコントロールを使用せずに特定のHTML要素コンテンツをキャンバスに描画する方法はありますか?

このコードを使用して、要素をフォームのキャンバスにレンダリングしています(例として)。
それでも動作しますが、このコードは良い習慣ではありません-以下を参照してください、なぜ...

uses
  SHDocVw, MSHTML;

procedure TForm1.Button1Click(Sender: TObject);
var
  WebBrowser: TWebBrowser;
  HTMLElement: IHTMLElement;
  HTMLRenderer: IHTMLElementRender;
begin
  WebBrowser := TWebBrowser.Create(nil);
  try
    WebBrowser.ParentWindow := Application.Handle;
    WebBrowser.Navigate('https://stackoverflow.com/questions/2975586/good-delphi-blogs');

    while WebBrowser.ReadyState < READYSTATE_COMPLETE do
      Application.ProcessMessages;

    HTMLElement := (WebBrowser.Document as IHTMLDocument3).getElementById('question');
    HTMLRenderer := (HTMLElement as IHTMLElementRender);
    HTMLRenderer.DrawToDC(Canvas.Handle);

  finally
    HTMLElement := nil;
    HTMLRenderer := nil;
    WebBrowser.Free;
  end;
end;

悪いので

  • 非表示のTWebBrowserコントロールを使用しますが、 IHTMLDocumentインターフェイスを介してHTMLドキュメントを直接ロードし、特定の要素を自分のキャンバスにレンダリングしたいと思います。
  • IHTMLDocumentを手動で作成してロードする場合、たとえばこのようにすると、レンダラーメソッドIHTMLElementRender.DrawToDCは何もペイントしません(ドキュメントをレンダリングするためのキャンバスがないためかもしれません)。
  • さらに悪いことに、現時点ではIHTMLElementRender.DrawToDCが非推奨になっているため、自分のキャンバスに要素をレンダリングするための代替メソッドを探しています。

MSHTMLを使用してこれを解決するクリーンな方法はありますか?

4

3 に答える 3

3

DrawToDCとIViewObjectはどちらも、ドキュメントを実際にターゲットDCにレンダリングするためにTWebBrowserコントロールを必要とします。

于 2011-12-17T17:55:41.870 に答える
1

たぶんあなたはTHtmlViewerを試すことができますか? http://code.google.com/p/thtmlviewer/

于 2011-11-29T14:50:28.570 に答える
1

tms-softwareのTHTMLabelを参照し てください

于 2011-11-29T15:49:58.400 に答える