代码创建打印机纸张问题

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间可以通用.

谢谢

...全文
139 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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;

1,183

社区成员

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

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