代码创建打印机纸张问题

guess8888 2012-09-07 08:12:27
大家好,我写的代码,目的是创建打印机纸张,但不能实现,不知错在哪里.请帮忙给看看

var
Form1: TForm1;
Prthwnd:thandle;
//为较好兼容,自声明的API
function OpenPrinterA(pPrintername:string;phPrinter:THandle;pDefault:integer):boolean;stdcall;external 'winspool.drv';
function AddFormA(hPrinter:THandle;Level:dword;pForm:pbyte):boolean;stdcall;external 'winspool.drv';
function ClosePrinter(hPrinter:THandle):boolean;stdcall;external 'winspool.drv';

procedure TForm1.Button1Click(Sender: TObject);//创建纸张
begin
AddForms('EPSON LQ-1600KIII','hello2012',860,2100);
end;

function tform1.AddForms(prtname,frmname:string;fsizecx,fsizecy:integer):boolean;
var forminfo:tforminfo1;papersize:tsize;paperrect:trectl;
begin
prthwnd:=0;
IF OpenPrinterA(prtname,prthwnd,0) THEN BEGIN
forminfo.flags:=0;//form_user;
forminfo.pname:=pchar(frmname);
papersize.cx:=fsizecx;
papersize.cy:=fsizecy;
paperrect.left:=0;
paperrect.top:=0;
paperrect.right:=fsizecx;
paperrect.bottom:=fsizecy;
forminfo.Size:=papersize;
forminfo.imageablearea:=paperrect;

showmessage(booltostr(AddFormA(prthwnd,1,@forminfo)));
ClosePrinter(prthwnd);
result:=true;
end
else showmessage('++++++++++无法打开打印机');
end;

请大家看看我的代码错在那,谢谢了

我用的是lazarus,之中有些和Delphi不一样,getprinter没有.dp的那些代码也看过了,也改过,依然不行.因为如此,API函数是自己声明的,这样LAZ和DP间可以通用.

谢谢

...全文
127 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
勿为 2012-09-10
  • 打赏
  • 举报
回复
下面是我以前用过的,不知道现在行不行,你试试:
//增加规格自定义纸张
//PaperName: 自定义纸张名称
//PaperWidth: 纸张的宽度,以0.1mm为单位
//PaperLength: 纸张的高度,以0.1mm为单位
procedure TDM.AddCustomPaper(const PaperName: string; PaperWidth, PaperLength:integer);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
FormInfo : TFormInfo1;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('联接打印机失败!');

with FormInfo do
begin
Flags := FORM_USER;
pName := PChar(PaperName);
Size.cx := PaperWidth*100;
Size.cy := PaperLength*100;
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Right := PaperWidth*100;
ImageableArea.Bottom := PaperLength*100;
end;

//修改纸型,如果没有就新增
if not SetForm(hPrinter, PChar(PaperName), 1, @FormInfo) then
AddForm(hPrinter, 1, @FormInfo);

ClosePrinter(hPrinter);
end;

//删除自定义规格纸张
//PaperName: 自定义纸张名称
procedure TDM.DeleteCustomPaper(const PaperName: string);
var
PrintDevice, PrintDriver, PrintPort : array[0..255] of Char;
hDMode : THandle;
hPrinter : THandle;
begin
Printer.GetPrinter(PrintDevice, PrintDriver, PrintPort, hDMode);
OpenPrinter(PrintDevice, hPrinter, nil);
if hPrinter = 0 then
raise Exception.Create('联接打印机失败!');
DeleteForm(hPrinter, PChar(PaperName));
ClosePrinter(hPrinter);
end;
第6章 代码标准文档 130 6.1 一般的源代码格式规则 130 6.1.1 缩进 130 6.1.2 边距 130 6.1.3 begin...end 130 6.2 Object Pascal 131 6.2.1 括号 131 6.2.2 保留字和关键字 131 6.2.3 过程和函数 131 6.2.4 变量 132 6.2.5 类型 133 6.2.6 构造类型 133 6.2.7 语句 134 6.2.8 结构化异常处理 134 6.2.9 类 135 6.3 文件 136 6.3.1 项目文件 136 6.3.2 窗体文件 136 6.3.3 数据模块文件 137 6.3.4 远程数据模块文件 137 6.3.5 单元文件 137 6.3.6 文件头 138 6.4 窗体与数据模块 138 6.4.1 窗体 138 6.4.2 数据模块 139 6.5 包 139 6.5.1 运行期包与设计期包 139 6.5.2 文件命名标准 140 6.6 组件 140 6.6.1 自定义组件 140 6.6.2 组件实例的命名规则 140 6.7 代码标准文档升级 141 第7章 使用ActiveX控件 142 7.1 什么是ActiveX控件 142 7.2 何时使用ActiveX控件 142 7.3 把ActiveX控件加到组件面板上 143 7.4 Delphi组件外套 144 7.4.1 外套文件是从哪来的 152 7.4.2 枚举 152 7.4.3 控件接口 152 7.4.4 TOleControl的派生类 152 7.4.5 方法 152 7.4.6 属性 153 7.5 在应用程序中使用ActiveX控件 153 7.6 发布带有ActiveX控件的应用程序 154 7.7 注册ActiveX控件 155 7.8 BlackJack:一个OCX示范程序 155 7.8.1 纸牌 155 7.8.2 游戏 157 7.8.3 调用ActiveX控件的方法 165 7.9 总结 166 第二部分 高级技术 第8章 使用GDI和字体的图像编程 167 8.1 TImage:Delphi的图像显示 167 8.2 存储图像 168 8.3 使用TCanvas的属性 169 8.3.1 画笔 170 8.3.2 使用TCanvas.Pixels属性 175 8.3.3 使用刷子 175 8.3.4 使用字体 180 8.3.5 使用CopyMode属性 181 8.3.6 其他属性 184 8.4 使用TCanvas的方法 184 8.4.1 用TCanvas画线 184 8.4.2 用TCanvas画几何形状 185 8.4.3 画图的示范程序 185 8.4.4 用TCanvas输出文字 189 8.5 坐标系统和映射模式 193 8.5.1 设备坐标系 193 8.5.2 逻辑坐标系 194 8.5.3 屏幕坐标系 194 8.5.4 窗体坐标系 194 8.5.5 坐标映射 195 8.5.6 设置映射模式 196 8.5.7 设置窗口/视区范围 196 8.5.8 关于映射模式的示范程序 197 8.6 创建一个绘画程序 202 8.7 编写动画程序 215 8.8 高级字体 221 8.8.1 Win32字体类型 222 8.8.2 基本字体元素 222 8.8.3 GDI字体分类 223 8.8.4 显示不同字体 223 8.9 实际创建一种字体 224 8.9.1 这个程序是如何工作的 224 8.9.2 显示字体的有关信息 230 8.10 总结 233 第9章 动态链接库 234 9.1 究竟什么是DLL 234 9.2 静态链接与动态链接 235 9.3 为什么要使用DLL 236 9.3.1 共享代码、资源和数据 236 9.3.2 隐藏实现的细节 237 9.3.3 自定义控件 237 9.4 创建和使用DLL 237 9.4.1 数美分:一个简单的DLL 237 9.4.2 显示DLL中的模式窗体 239 9.5 显示DLL中的无模式窗体 241 9.6 在Delphi应用程序中使用DLL 242 9.7 DLL的入口函数和出口函数 246 9.7.1 进程/线程初始化和终止例程 246 9.7.2 DLL入口/出口示例 246 9.8 DLL中的异常 250 9.8.1 在16位Delphi中捕捉异常 250 9.8.2 异常和Safecall指示符 250 9.9 回调函数 250 9.9.1 使用回调函数 253 9.9.2 拥有者绘制的列表框 253 9.10 从DLL中调用回调函数 253 9.11 在不同的进程间共享DLL数据 256 9.11.1 一个可以被共享数据的DLL 256 9.11.2 访问DLL中的共享数据 259 9.12 引出DLL中的对象 261 9.13 总结 265 第10章 Delphi 5的打印 266 10.1 TPrinter对象 266 10.2 TPrinter.Canvas 267 10.3 简单打印 267 10.3.1 打印TMemo组件中的内容 267 10.3.2 打印位图 268 10.3.3 打印RTF格式的文本 269 10.4 打印窗体 269 10.5 高级打印 270 10.5.1 打印分栏报表 270 10.5.2 放弃打印进程 275 10.5.3 打印信封 275 10.5.4 抽象打印 276 10.5.5 一个简单的打印预览程序 285 10.6 其他打印任务 286 10.6.1 TDeviceMode结构 286 10.6.2 设置打印份数 288 10.6.3 设置打印方向 288 10.6.4 设置纸张尺寸 288 10.6.5 设置纸张的长度 289 10.6.6 设置页的宽度 289 10.6.7 设置打印比例 289 10.6.8 设置打印颜色 289 10.6.9 设置打印质量 289 10.6.10 设置双面打印 290 10.6.11 指定默认打印机 290 10.7 获取打印机信息 291 10.7.1 GetDeviceCaps()和DeviceCapa- bilities() 292 10.7.2 获取打印机信息的示范程序 292 10.8 总结 303
福昕阅读器3.1.2.1013 功能更新 ====================================================================================================================== Bug修复: 修复了内存泄露的问题,避免出现对PDF文件进行操作时内存不正常的持续上升 福昕阅读器3.1.1.0925 功能更新 ====================================================================================================================== 下面的列表里包括了福昕阅读器3.1的新增功能和增强功能。 1. 常用工具栏 2. 因特网搜索 3. 注释面板 4. 小结注释 5. 文档限制摘要 6. 支持MSAA 7. 全新的用户界面 Bug修复: 1、修复了在日语操作系统下标签首部Cyrillic图标显示错误的问题。 2、修复了多页打印时打印机出现缓冲过大,自动分页和双页打印的问题。 3、修复了在浏览框中打开含有交互式表单的PDF文件时无法插入FDF文件的问题。 4、修复了双监视器设置的全屏下只能在主屏幕操作PDF阅读器的问题。 福昕阅读器V3.0 Build 1817 功能更新 ============================================================================================================================================================ 已修复的漏洞包括: 1. 负的数据偏移量(恶意JPEG2000数据流)可能引起程序从正常范围外读取数据。为此,我们增加了安全代码来解决该问题。 2. 解码JPEG2000数据头时出现一个无法捕获的错误,该错误可能引起一个随后的无效地址访问。为此,我们增加了错误处理代码终结此解码过程。 福昕阅读器V3.0 Build 1506 功能更新 ============================================================================================================================================================ 已修复的漏洞包括: 1.修复基于堆栈的缓存溢出问题 福昕软件对PDF文件的各种操作会跟不同的触发器相关联。诸如打开或执行文档、打开网络链接等操作使用了一个过长的文件名,在触发器条件允许的情况下,将会引发一个基于堆栈的缓存溢出问题。 2.修复安全授权旁路问题 诸如打开或执行文档、打开网络链接等操作,在触发器条件满足的情形下,福昕阅读器将执行文档创建者的指令,而不弹出一个对话框供用户确认是否执行,而有些文档创建者的执行指令存在风险。 3.修复JBIG2符号字典处理过程中一个未初始化问题 当解码JBIG2符号字典段时,一个已分配的和导出符号个数(SDNUMEXSYMS)相等的32-bit元素数组在新符号个数(SDNUMNEWSYMS)为0的情况下未初始化. 该数组随后被访问, 其未初始化的值随后作为指针来读取内存并进行调用. 福昕阅读器V3.0 Build 1301功能更新 ============================================================================================================================================================ 下面的列表里包括了福昕阅读器3.0的新增功能和增强功能。 新增功能: 1.多媒体设计 2.附件列表面板 3.页面缩略图面板 4.层面板 5. 公制单位的支持 6.鼠标中键自动滚屏 7.福昕在线内容管理系统 8.支持Firefox浏览器 增强的功能: 1.改进的文本选择工具 2.更加完善的打印设置 3.更加完美的标注控制 4.全新的工具栏体验 5.改进的权限控制 6.改进的更新模式 7.全新的Pop-up窗口体验 8.改进的快捷键设置 9.可移植的偏好设置 10.BUG修复: A.修复了当旋转页面时,打字机工具标注也会随之旋转的问题。 B.解决了安装firefox安装不成功时会提示“Mozilla firefox is not installed"的问题。 C.解决了在vista Home版上有时打开文件卡住的问题。 D.允许用户去掉广告条。 E.解决了某些情况下使用Auto-Rotate功能时没有效果的问题。 F.解决了打印机属性设置无效的问题。 G.该版本在使用命令行打印时,会根据打印对话框的默认设置来决定是用actual size模式还是fit to paper模式打印。 H.解决了当打印机设置为双面打印的时候,页面打印不准确的问题。 已知问题 ============================================================================================================================================================ 1.无法打开文件名含有Unicode的文件。 2.目前福昕阅读器不支持网页中嵌入的PDF文件。 3.无法正确填写响应Adobe Designer创建的表单。 4. PostScript打印兼容问题:有时候会打印出空白页或打印出来的纸张页码出现错误。 下载最新版本 ============================================================================================================================================================ 您可以从我们的中文网站www.fuxinsoftware.com.cn下载最新版本 联系我们 ============================================================================================================================================================ 如果您在使用福昕阅读器过程中有任何疑问或者建议,请联系我们: 福昕软件(北京)开发有限公司: 地址: 北京市海淀区知春路56号中海实业大厦9层909 邮编: 100086 电话: 010-82111557 82125923 传真: 010-82128727 福昕软件(福州)开发有限公司 地址: 福州市铜盘路软件大道89号D区23座 邮编: 350003 电话: 0591-87883901 传真: 0591-87883902 福昕软件(台湾)开发有限公司 地址: 台北市士林區大東路92巷2號1F 邮编: 11162 电话: 886-981-153-504 电子邮件 销售 - sales@foxitsoftware.com 技术 - support@foxitsoftware.com 网站 - webmaster@foxitsoftware.com 市场 - marketing@foxitsoftware.com

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧