系统:winxp,D7
打印机:LQ 300在CSDN上找到 zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) 的一段代码
procedure UpdatePrint(Awidth,Aheight:integer);
const CustomFormName = 'ZJ Defined'; function Win95SetForm(PDevMode: PDeviceMode): Boolean;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERSIZE;
PDevMode.dmPaperSize := 256;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERWIDTH;
PDevMode.dmPaperWidth := AWidth;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERLENGTH;
PDevMode.dmPaperLength := AHeight;
Printer.PrinterIndex := Printer.PrinterIndex;
Result := True;
end; function WinNTSetForm(PDevMode: PDeviceMode;
Device: PChar; Port: PChar): Boolean;
var
hPrinter: THandle;
pForm: Pointer;
cbNeeded: DWORD;
cReturned: DWORD;
FormInfo1: TFormInfo1;
begin
Result := False;
if OpenPrinter(Device, hPrinter, nil) then
begin
pForm := nil;
EnumForms(hPrinter, 1, pForm, 0, cbNeeded, cReturned);
GetMem(pForm, cbNeeded); //取pForm的大小并分配内存
try
if EnumForms(hPrinter, 1, pForm, cbNeeded, cbNeeded, cReturned) then
begin
if DeleteForm(hPrinter, PChar(CustomFormName)) then
Dec(cReturned); //删除旧的Form
with FormInfo1 do
begin
Flags := 0;
pName := PChar(CustomFormName);
Size.cx := AWidth * 100;
Size.cy := AHeight * 100;
with ImageAbleArea do
begin
Left := 0;
Top := 0;
Right := Size.cx;
Bottom := Size.cy;
end;
end;
if AddForm(hPrinter, 1, @FormInfo1) then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERSIZE;
PDevMode.dmPaperSize := cReturned + 1;
Printer.PrinterIndex := Printer.PrinterIndex;
Result := True;
end;
end;
finally
FreeMem(pForm);
end;
end;
end;
var
Device, Driver, Port: array[0..127] of char;
hDevMode: THandle;
PDevMode: PDeviceMode;
begin
Printer.GetPrinter(Device, Driver, Port, hDevMode);
if hDevMode <> 0 then
begin
PDevMode := GlobalLock(hDevMode);
try
if (Win32Platform = VER_PLATFORM_WIN32s) or
(Win32Platform = VER_PLATFORM_WIN32_WINDOWS) then
Win95SetForm(PDevMode)
else if Win32Platform = VER_PLATFORM_WIN32_NT then
WinNTSetForm(PDevMode, Device, Port);
finally
GlobalUnlock(hDevMode);
end;
end
end;然后这样调用
procedure TForm1.Button1Click(Sender: TObject);
var
Printer:TPrinter;
begin
printer:=TPrinter.Create;
UpdatePrint(1210,960);
printer.BeginDoc;
printer.Canvas.TextOut(1,1,'我在做打印测试,谢谢');
printer.NewPage;
printer.Canvas.TextOut(1,1,'我在做打印测试,谢谢');
printer.EndDoc;
end;结果出错了,走纸还是跑了一张A4纸那么长。
是不是我调用错了呢?(我在打印机的服务器属性里有看到加进的纸张 JZ design 12.1cm*9.6cm)
打印机:LQ 300在CSDN上找到 zjqyb(风清扬*任它溺水三千,我只取一瓢饮*) 的一段代码
procedure UpdatePrint(Awidth,Aheight:integer);
const CustomFormName = 'ZJ Defined'; function Win95SetForm(PDevMode: PDeviceMode): Boolean;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERSIZE;
PDevMode.dmPaperSize := 256;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERWIDTH;
PDevMode.dmPaperWidth := AWidth;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERLENGTH;
PDevMode.dmPaperLength := AHeight;
Printer.PrinterIndex := Printer.PrinterIndex;
Result := True;
end; function WinNTSetForm(PDevMode: PDeviceMode;
Device: PChar; Port: PChar): Boolean;
var
hPrinter: THandle;
pForm: Pointer;
cbNeeded: DWORD;
cReturned: DWORD;
FormInfo1: TFormInfo1;
begin
Result := False;
if OpenPrinter(Device, hPrinter, nil) then
begin
pForm := nil;
EnumForms(hPrinter, 1, pForm, 0, cbNeeded, cReturned);
GetMem(pForm, cbNeeded); //取pForm的大小并分配内存
try
if EnumForms(hPrinter, 1, pForm, cbNeeded, cbNeeded, cReturned) then
begin
if DeleteForm(hPrinter, PChar(CustomFormName)) then
Dec(cReturned); //删除旧的Form
with FormInfo1 do
begin
Flags := 0;
pName := PChar(CustomFormName);
Size.cx := AWidth * 100;
Size.cy := AHeight * 100;
with ImageAbleArea do
begin
Left := 0;
Top := 0;
Right := Size.cx;
Bottom := Size.cy;
end;
end;
if AddForm(hPrinter, 1, @FormInfo1) then
begin
Printer.PrinterIndex := Printer.PrinterIndex;
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERSIZE;
PDevMode.dmPaperSize := cReturned + 1;
Printer.PrinterIndex := Printer.PrinterIndex;
Result := True;
end;
end;
finally
FreeMem(pForm);
end;
end;
end;
var
Device, Driver, Port: array[0..127] of char;
hDevMode: THandle;
PDevMode: PDeviceMode;
begin
Printer.GetPrinter(Device, Driver, Port, hDevMode);
if hDevMode <> 0 then
begin
PDevMode := GlobalLock(hDevMode);
try
if (Win32Platform = VER_PLATFORM_WIN32s) or
(Win32Platform = VER_PLATFORM_WIN32_WINDOWS) then
Win95SetForm(PDevMode)
else if Win32Platform = VER_PLATFORM_WIN32_NT then
WinNTSetForm(PDevMode, Device, Port);
finally
GlobalUnlock(hDevMode);
end;
end
end;然后这样调用
procedure TForm1.Button1Click(Sender: TObject);
var
Printer:TPrinter;
begin
printer:=TPrinter.Create;
UpdatePrint(1210,960);
printer.BeginDoc;
printer.Canvas.TextOut(1,1,'我在做打印测试,谢谢');
printer.NewPage;
printer.Canvas.TextOut(1,1,'我在做打印测试,谢谢');
printer.EndDoc;
end;结果出错了,走纸还是跑了一张A4纸那么长。
是不是我调用错了呢?(我在打印机的服务器属性里有看到加进的纸张 JZ design 12.1cm*9.6cm)
解决方案 »
- DTS问题(很少有人做过吧)
- 哪有日期控件的个性化显示实例
- fastreport对偶来说停有难度的银行报表
- 我的系统怎啦
- 我用WISE INSTALLATION SYSTEM V9.02打包DELPHI程序。可是我做了两次,都失败了。
- 如何安装DCOM驱动
- 如何把数据库的memo字段读到stringlist中,或读到listbox中也行.因为要使用数组形式访问memo中的每一行做为标识!急啊,帮忙.
- 急!!!!!!!!!!!!!!!!!!!在线!!!!!
- 着急,请帮忙...皮肤无法使用.
- 请问哪里有好的制作安装的软件下载!
- 如何向sql数据库中已经存在的表中导入excel表?
- 只想找一个能做出中文界面的安装程序,找了几个星期都找不到。 在线等,马上给分
Printer.PrinterIndex := Printer.PrinterIndex; //这句
PDevMode.dmFields := PDevMode.dmFields or DM_PAPERSIZE;
PDevMode.dmPaperSize := cReturned + 1;
Printer.PrinterIndex := Printer.PrinterIndex; //还有上面那句,都相同的,作用是什么呢。
var
FormInfo1: TFormInfo1;
pFormInfo: PFormInfo1;
hPrinter : THandle;
begin
Result := False;
if OpenPrinter(PChar(PrinterName),hPrinter,NIL) then
begin
with FormInfo1 do
begin
Flags := 0;
pName := PAnsiChar(Name);
Size.cx := Trunc(Width*1000);
Size.cy := Trunc(Height*1000);
ImageableArea.Left := 0;
ImageableArea.Top := 0;
ImageableArea.Bottom := Size.cy;
ImageableArea.Right := Size.cx;
end;
pFormInfo := @FormInfo1;
Result := AddForm(hPrinter,1,pFormInfo);
ClosePrinter(hPrinter);
end;
end;