- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下单元通过显示在非模式对话框中的 TWebBrowser 来显示和打印 HTML 代码。在我的生产程序中,以下代码在 Windows-XP 下工作,但在 Windows-7 下失败(错误消息总是外部异常 C015D00F)。为了隔离问题,我编写了一个简单的测试程序,它还有一个包含 TWebBrowser 的非模态对话框;就其本身而言,这个测试程序可以在 Windows-7 上正常工作,但是当我将测试程序中的非模态对话框插入到生产程序中时,我得到了外部异常。
这大概表明调用程序有问题,而不是被调用单元有问题,但我看不出是什么问题。 HTML 代码是手工制作的,但显示正确。
可能是什么问题?打印代码来自Embarcadero site
unit Test4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, OleCtrls, SHDocVw, MSHTML;
type
THTMLPreview = class(TForm)
web: TWebBrowser;
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure webDocumentComplete(Sender: TObject; const pDisp: IDispatch;
var URL: OleVariant);
private
options: word;
fn: string;
procedure DoPrint;
public
Constructor Create (const afn, acapt: string; opts: word);
end;
implementation
{$R *.dfm}
constructor THTMLPreview.Create (const afn, acapt: string; opts: word);
begin
inherited create (nil);
caption:= acapt;
fn:= afn;
options:= opts;
web.Navigate (fn);
end;
procedure THTMLPreview.webDocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
DoPrint
end;
procedure THTMLPreview.DoPrint;
var
HTMLDoc: IHTMLDocument2;
HTMLWnd: IHTMLWindow2;
HTMLWindow3: IHTMLWindow3;
begin
if options and 4 = 4 then
begin
HTMLDoc:= web.Document as IHTMLDocument2;
if HTMLDoc <> nil then
begin
HTMLWnd:= HTMLDoc.parentWindow;
HTMLWindow3:= HTMLWnd as IHTMLWindow3;
HTMLWindow3.print;
end
end
end;
procedure THTMLPreview.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if options and 1 = 1 then deletefile (fn);
action:= caFree
end;
end.
Web.ControlInterface.ExecWB (OLECMDID_PRINT, OLECMDEXECOPT_PROMPTUSER,
vaIn, vaOut)
给出相同的错误。
最佳答案
如果我没记错的话,IHTMLWindow3.print 方法会弹出默认的“发送到打印机”系统对话框。你想要这个吗?对于一个应用程序,我曾经搜索过一种避免这种情况的方法,然后找到了这段代码。
var
r:TRect;
sh,ph:HDC;
begin
OleInitialize(nil);
WebBrowser1.Navigate('file://'+HtmlFilePath);
while WebBrowser1.ReadyState<>READYSTATE_COMPLETE do Application.HandleMessage;
//Printer.PrinterIndex:=//set selected printer here
Printer.BeginDoc;
try
Printer.Canvas.Lock;
try
sh:=GetDC(0);
ph:=Printer.Canvas.Handle;
//TODO: make rect a bit smaller for a page margin
//TODO: get page size from printer settings, assume A4 here (210x297mm)
r.Left:=0;
r.Top:=0;
r.Right:=2100 * GetDeviceCaps(sh,LOGPIXELSX) div 254;
r.Bottom:=2970 * GetDeviceCaps(sh,LOGPIXELSY) div 254;
WebBrowser1.BoundsRect:=r;
SetMapMode(ph,MM_ISOTROPIC);
SetWindowExtEx(ph,r.Right,r.Bottom,nil);
SetViewportExtEx(ph,r.Right,r.Bottom,nil);
r.Right:=GetDeviceCaps(ph,HORZRES)-1;
r.Bottom:=GetDeviceCaps(ph,VERTRES)-1;
(WebBrowser1.ControlInterface as IViewObject).Draw(
DVASPECT_CONTENT,
1,
nil,nil,0,ph,@r,nil,nil,0);
finally
Printer.Canvas.Unlock;
end;
Printer.EndDoc;
except
Printer.Abort;
raise;
end;
关于delphi - 从 TWebBrowser 打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15702976/
我的应用程序使用加载网页的 TWebBrowser。问题是,关闭包含 TWebBrowser 的表单后,使用的内存没有释放。如果我打开和关闭表单,内存只会不断增加。 看到一些关于调用 SetProce
有没有人成功地让 StreetView 显示在 TWebBrowser 控件中? 我想以编程方式构建一个 Url 并让它以简单的 Delphi 形式显示。 到目前为止,这是我对该表格的了解: unit
我正在尝试在控制台/服务类型的应用程序(没有任何窗口)中使用 TWebBrowser。 Navigate 确实在做一些事情,但它从不调用 onDocumentComplete。还有其他方法可以访问某个
我有 TWebBrowser 组件(Delphi 7),并且我从内存流加载了 HTML。页面的 HTML 代码加载良好,页面显示正确。但是,当我尝试单击任何带有地址(href 属性值)的超链接(例如“
两个简单的问题 如何将焦点设置到 TWebBrowser?这样鼠标滚轮就可以滚动显示,而不必先在 TWebBrwoser 显示区域内单击。它有一个不执行任何操作(或似乎不执行任何操作)的 setfoc
我们有 HTML: 当点击链接时 OnNewWindow2被解雇: procedure TForm1.WebBrowser1NewWindow2(Sender: TObject; var ppD
我在更改 twebbrowser 中文本框的值时遇到一些困难。我已经尝试过WebBrowser1.OleObject.Document.getElementById('verification_con
我在 Delphi 应用程序中使用 TWebbrowser 组件,我以编程方式加载其内容: (aWebBrowser.Document as IPersistStreamInit).
我使用 TWebBrowser 来显示 Google map 。问题是它在加载 map 时阻塞了主 ui 线程。是否可以在单独的线程中更新 map ? 编辑: RRUZ你是对的,TWebBrowser
使用 TWebBrower 如何获取撤消或重做状态(CanUndo、Can Redo)? 这总是错误的? Undo1.Enabled := HTMLDocument2Ifc.queryComman
我使用 TWebBrowser 作为用户的编辑器 GUI。我希望能够将 Web 控件插入到文档中。一个简单的例子是复选框。 (如果需要的话我可以详细说明原因)。当我第一次组装 HTML 文档(及其 S
我在 Delphi 10.2 中使用 TWebBrowser 组件,该组件是从 SHDocVW_TLB 类型库导入的。 我想使用此网络浏览器浏览本地文件和受信任环境中的文件。但我注意到,由于安全限制,
来自这个答案 CoInternetIsFeatureEnabled in Delphi2010 有谁知道如何停止滴答声。当我将它放入单独的 pas 文件时,这在 Delphi XE 中似乎不起作用。有
我有一个框架,其中包含一个 TWebBrowser 组件并被我的一些应用程序使用,我需要禁用 TWebBrowser 的默认弹出菜单。 我通过使用 TApplicationEvents 组件及其 On
我正在将 HTML 本地文件加载到 TWebBrowser如下: procedure TForm1.FormCreate(Sender: TObject); begin WebBrowser1.N
如何在 firemonkey 中读取 TWebBrowser 中打开页面的源代码(RadStudio XE7 - Firemonkey for Android) 在 VCL我只是用了WebBrowse
如何知道TWebBrowser是否已经完成页面下载?我的问题是:我不知道我的页面何时完全下载以便可以显示。 我向网络浏览器请求一页,并且我只想在该页面完全下载后才显示响应。 最佳答案 您可以尝试处理
我有一个表单可以接受要拖放的文件,还有一个 TWebBrowser 控件放置在同一个表单上的 TPanel 控件上。 最主要的是,当我在窗体上放置一个文件时,它的路径被添加到一个 TEdit 控件中。
我正在使用以下单元通过显示在非模式对话框中的 TWebBrowser 来显示和打印 HTML 代码。在我的生产程序中,以下代码在 Windows-XP 下工作,但在 Windows-7 下失败(错误消
场景: 带有两个 TTabSheets 的 TPageControl 不可见标签页上的 TWebBrowser WebBrowser->在表单创建期间调用的导航 如果用户只是运行表单并退出,则在应用程
我是一名优秀的程序员,十分优秀!