如何在不使用web浏览器的情况下呈现HTML元素?
有没有一种方法可以在画布上绘制特定的HTML元素内容而不使用任何web浏览器控件 使用这段代码,我将元素呈现到表单的画布上(仅作为示例)。如何在不使用web浏览器的情况下呈现HTML元素?,html,delphi,mshtml,ihtmldocument,Html,Delphi,Mshtml,Ihtmldocument,有没有一种方法可以在画布上绘制特定的HTML元素内容而不使用任何web浏览器控件 使用这段代码,我将元素呈现到表单的画布上(仅作为示例)。 虽然它可以工作,但是这段代码不是一个好的实践-请参见下文,为什么 uses SHDocVw, MSHTML; procedure TForm1.Button1Click(Sender: TObject); var WebBrowser: TWebBrowser; HTMLElement: IHTMLElement; HTMLRenderer
虽然它可以工作,但是这段代码不是一个好的实践-请参见下文,为什么
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;
使用
SHDocVw,MSHTML;
程序TForm1.按钮1单击(发送方:TObject);
变量
网络浏览器:TWebBrowser;
HTMLElement:IHTMLElement;
HTMLender:IHTMLELELEMENTRENDER;
开始
WebBrowser:=TWebBrowser.Create(无);
尝试
WebBrowser.ParentWindow:=应用程序.句柄;
WebBrowser.Navigate('https://stackoverflow.com/questions/2975586/good-delphi-blogs');
当WebBrowser.ReadyState
这很糟糕,因为
- 它使用隐藏控件,但我希望通过接口直接加载HTML文档,并在自己的画布上呈现某些元素
- 如果我手动创建并加载渲染器,例如,渲染器方法不会绘制任何内容(可能是因为没有用于渲染文档的画布)
- 更糟糕的是,现在已经不推荐使用这种方法,所以我正在寻找一种在自己的画布上呈现元素的替代方法
有没有一种干净的方法可以用MSHTML解决这个问题?也许你可以试试THtmlViewer?
请参见tms软件中的DrawToDC,两者都要求TWebBrowser控件将文档实际呈现到目标DC中。您是否尝试嵌入chromium:,有一个屏幕外呈现组件。同意,请尝试DelphiChromiumBedded。它甚至包括一个屏幕外渲染演示。感谢您的回复,但我想避免使用任何第三方控件(即使它们可能更好)。我想使用纯MS接口解决方案。很遗憾,
IHTMLElement
不支持IViewObject
。什么是“严重隐藏”呢?为什么不直接使用TWebBrowser?如果chromium支持在画布上绘图,为什么不呢?@Marcus,我的意思是它将ParentWindow
设置为应用程序。Handle
,在我看来不太好。至于第二个问题,因为我想避免使用TWebBrowser;我想直接使用IHTMLDocument
。为什么不是铬?就因为我正在寻找MS HTML解决方案:)我知道它比旧的IWebBrowser2包装器更好;)一瞬间被狙击!这些确实有效,但可能会在大多数现代ajax-y页面上窒息。谢谢,但我真的在寻找MS的替代方案(如果有)。我感谢你的回答,但不幸的是THTMLabel
没有源代码和付费,我打赌它有自己的解析和渲染系统。我真的很关注MS界面。正如我承诺的,包括+1:)无论如何,有趣的音乐制作,我听过你的一些曲目,我喜欢。这听起来很像depche模式。