如何在不使用Web浏览器的情况下呈现HTML元素?

前端之家收集整理的这篇文章主要介绍了如何在不使用Web浏览器的情况下呈现HTML元素?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有没有办法在画布上绘制特定的 HTML元素内容,而不使用任何Web浏览器控件?

使用这个代码,我将元素渲染到窗体的画布上(就像一个例子).
它的作品虽然,但这个代码不是一个好的做法 – 见下文,为什么…

  1. uses
  2. SHDocVw,MSHTML;
  3.  
  4. procedure TForm1.Button1Click(Sender: TObject);
  5. var
  6. WebBrowser: TWebBrowser;
  7. HTMLElement: IHTMLElement;
  8. HTMLRenderer: IHTMLElementRender;
  9. begin
  10. WebBrowser := TWebBrowser.Create(nil);
  11. try
  12. WebBrowser.ParentWindow := Application.Handle;
  13. WebBrowser.Navigate('https://stackoverflow.com/questions/2975586/good-delphi-blogs');
  14.  
  15. while WebBrowser.ReadyState < READYSTATE_COMPLETE do
  16. Application.ProcessMessages;
  17.  
  18. HTMLElement := (WebBrowser.Document as IHTMLDocument3).getElementById('question');
  19. HTMLRenderer := (HTMLElement as IHTMLElementRender);
  20. HTMLRenderer.DrawToDC(Canvas.Handle);
  21.  
  22. finally
  23. HTMLElement := nil;
  24. HTMLRenderer := nil;
  25. WebBrowser.Free;
  26. end;
  27. end;

这是坏的,因为

>它使用隐藏的TWebBrowser控件,但我想直接通过IHTMLDocument界面加载HTML文档,并在我自己的画布上渲染某些元素
>如果我创建并手动加载IHTMLDocument this way那么渲染器方法IHTMLElementRender.DrawToDC不会绘制任何东西(也许是因为没有用于渲染文档的画布)
>更糟糕的是,IHTMLElementRender.DrawToDC在这个时候被弃用,所以我正在寻找一种替代方法来渲染我自己的画布上的元素

有没有一个干净的方式来解决这个使用MSHTML?

解决方法

DrawToDC和 IViewObject都要求TWebBrowser控件实际将文档呈现到目标DC中.

猜你在找的HTML相关文章