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を使用してこれを解決するクリーンな方法はありますか?