{ImportantnoteaboutDLLmemorymanagement:ShareMemmustbethe
firstunitinyourlibrary'sUSESclauseANDyourproject's(select
Project-ViewSource)USESclauseifyourDLLexportsanyproceduresor
functionsthatpassstringsasparametersorfunctionresults.This
appliestoallstringspassedtoandfromyourDLL--eventhosethat
arenestedinrecordsandclasses.ShareMemistheinterfaceunitto
theBORLNDMM.DLLsharedmemorymanager,whichmustbedeployedalong
withyourDLL.ToavoidusingBORLNDMM.DLL,passstringinformation
usingPCharorShortStringparameters.}
uses
SysUtils,
WinSpool,
Windows,
Messages,
Classes;
var
hPrinter:THandle;
{$R*.res}
FunctionGetDefaultPrinterName():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;
Functionaddpage():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;
Functionchangepape():Boolean;//改变当前的打印纸张设置
var
FormInfos:Array[1..1024]ofForm_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;
fori:=1tocReturneddo通过轮寻找到300k的纸张的纸张类型排序号
ifFormInfos[i].pName='300k'thenj:=i;
ifj=0then
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;
FunctionMySetPrtInfo(P:Pchar;W:Integer;L:Integer):Boolean;stdcall;
//设置打印机的纸张类型为300k,并动态修改300k的大小和边距
var
FormInfo:TFormInfo1;
PaperSize:TSize;
PaperRect:TRect;
begin
OpenPrinter(GetDefaultPrinterName,hPrinter,nil);
changepape();//改变纸张类型定义
FormInfo.Flags:=FORM_USER;
FormInfo.pName:='300K';
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,'300k',1,@FormInfo);//设置纸张大小
ClosePrinter(hPrinter);
Result:=True;
end;
exports
MySetPrtInfo;
begin
end.
联系客服