📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,WinSpool, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
hPrinter: THandle;
implementation
{$R *.dfm}
Function GetDefaultPrinterName():PChar; //得到默认的打印机名称
var
sIniFile, sSection, sKeyName,p,q: PChar;
begin
sIniFile := 'win.ini';
sSection := 'Windows';
sKeyName := 'device';
p:=StrAlloc(80);
q:=StrAlloc(80);
GetPrivateProfileString(sSection,sKeyName,nil,p,80,sIniFile);
StrLCopy(q,p,(strscan(p,',')-p));
Result := q;
end;
Function addpage():Boolean; //添加一打印纸张类型名称为300k
var
FormInfo: TFormInfo1;
PaperSize: TSize;
PaperRect: TRect;
begin
FormInfo.Flags := FORM_USER;
FormInfo.pName := PChar('300k');
PaperSize.cx := 100000;
PaperSize.cy := 100000; //300k纸张的默认大小 1000mm*1000mm
PaperRect.Left := 1;
PaperRect.Top := 1;
PaperRect.Right := 100000;
PaperRect.Bottom := 100000; //纸张的边距
FormInfo.Size := PaperSize;
FormInfo.ImageableArea := PaperRect;
AddForm(hPrinter, 1, @FormInfo);
Result := True;
end;
Function changepape(p:string):Boolean; //改变当前的打印纸张设置
var
FormInfos : Array [1..1024] of Form_Info_1;
cbNeeded, cReturned ,neededsize: DWORD;
i,j:integer;
ppo:PRINTER_INFO_2;
dev :PDeviceMode;
begin
EnumForms(hPrinter, 1, Nil, 0, cbNeeded, cReturned);
EnumForms(hPrinter, 1, @FormInfos, cbNeeded, cbNeeded, cReturned );
j := 0;
for i:= 1 to cReturned do //通过轮寻找到300k的纸张的纸张类型排序号
if FormInfos[i].pName = p then j:=i;
if j=0 then
begin
addpage();
j := cReturned + 1;
end; //如无300k纸张则添加
GetPrinter(hPrinter,2,Nil, 0, @NeededSize);
GetPrinter(hPrinter, 2, @ppo, NeededSize, @NeededSize);
dev := ppo.pDevMode;
dev.dmPaperSize := j;
ppo.pDevMode := dev;
SetPrinter(hPrinter,2,@ppo,0); //定义打印机列表并选择300k纸张
Result := True;
end;
Function MySetPrtInfo(P:string;W:Integer;L:Integer):Boolean;stdcall;
//设置打印机的纸张类型为300k,并动态修改300k的大小和边距
var
FormInfo: TFormInfo1;
PaperSize: TSize;
PaperRect: TRect;
begin
OpenPrinter(GetDefaultPrinterName, hPrinter, nil);
changepape(p); //改变纸张类型定义
FormInfo.Flags := FORM_USER;
FormInfo.pName :=pchar(p);
PaperSize.cx := W*100;
PaperSize.cy := L*100;
PaperRect.Left := 0;
PaperRect.Top := 0;
PaperRect.Right := W*100;
PaperRect.Bottom := L*100;
FormInfo.Size := PaperSize;
FormInfo.ImageableArea := PaperRect;
SetForm(hPrinter,pchar(p),1,@FormInfo); //设置纸张大小
ClosePrinter(hPrinter);
Result := True;
end;
exports
MySetPrtInfo;
procedure TForm1.Button1Click(Sender: TObject);
begin
MySetPrtInfo('300k',2000,900);
MySetPrtInfo('A4',2100,2970);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -