有没有办法在画布上绘制特定的
HTML元素内容,而不使用任何Web浏览器控件?
使用这个代码,我将元素渲染到窗体的画布上(就像一个例子).
它的作品虽然,但这个代码不是一个好的做法 – 见下文,为什么…
- 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 this way那么渲染器方法IHTMLElementRender.DrawToDC不会绘制任何东西(也许是因为没有用于渲染文档的画布)
>更糟糕的是,IHTMLElementRender.DrawToDC在这个时候被弃用,所以我正在寻找一种替代方法来渲染我自己的画布上的元素
有没有一个干净的方式来解决这个使用MSHTML?
解决方法
DrawToDC和
IViewObject都要求TWebBrowser控件实际将文档呈现到目标DC中.