有没有办法在不使用任何 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 解决这个问题?