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;

这很糟糕,因为

有没有一种干净的方法可以使用 MSHTML 解决这个问题?

4

3 回答 3

3

DrawToDC 和IViewObject都需要 TWebBrowser 控件才能将文档实际呈现到目标 DC。

于 2011-12-17T17:55:41.870 回答
1

参见 tms-software 中的THTMLabel

于 2011-11-29T15:49:58.400 回答
1

也许你可以试试 THtmlViewer? http://code.google.com/p/thtmlviewer/

于 2011-11-29T14:50:28.570 回答