关于打印机自定义纸张的处理问题
关键字:打印机自定义纸张
2003-12-14 22:12:43 haoqh 点击: 2919 [原创文档]
int i,x,j=0,length,times;
char *ADevice, *ADriver, *APort;
THandle DeviceMode;
PDeviceMode DevMode; ADevice =new char[100];
ADriver =new char[100];
APort =new char[100]; //获取打印机
if(Printer()->Printers->Count<1)return; //没有安装打印机
Printer()->PrinterIndex=-1; //设置打印在默认打印机 //获取PDevMode结构
Printer()->GetPrinter(ADevice, ADriver, APort,DeviceMode);
DevMode =(_devicemodeA*) GlobalLock((void *)DeviceMode);
//设定可以修改的值
DevMode->dmFields = DevMode->dmFields|DM_PAPERSIZE;
DevMode->dmFields = DevMode->dmFields|DM_PAPERLENGTH;
DevMode->dmFields = DevMode->dmFields|DM_PAPERWIDTH;
//设定要修改的值
Printer()->SetPrinter(ADevice, ADriver, APort,DeviceMode);
DevMode->dmPaperSize=DMPAPER_USER; //设为自定义纸张
DevMode->dmPaperWidth=2410; //设定自定义纸张的尺寸单位为0.1毫米 Printer()->Canvas->Font=Memo1->Font;
x=Printer()->Canvas->TextHeight("S"); //取得字体的高度
length=x*Memo1->Lines->Count*1.46+240; //取得MEMO的打印范围的长度
if(length<=5000) //一般打印机自定义纸张的长度上限
DevMode->dmPaperLength=length;
else {
times=length/5000+1;
DevMode->dmPaperLength=length/times+x; //长度过长,需做分页处理
} Printer()->BeginDoc();
for(i=0;i<Memo1->Lines->Count;i++)
{
if(length>5000){
if((x*j+x)>length/times/1.42+x){
Printer()->NewPage();
j=0;
}}
Printer()->Canvas->TextOut(1,x*j,Memo1->Lines->Strings[i]);
j++;
}
Printer()->EndDoc();
delete ADevice;
delete ADriver;
delete APort;
看看这个:
http://www.chinabcb.com/article/article.php?aid=43
http://www.yesky.com/20030326/1659255.shtml
关键字:打印机自定义纸张
2003-12-14 22:12:43 haoqh 点击: 2919 [原创文档]
int i,x,j=0,length,times;
char *ADevice, *ADriver, *APort;
THandle DeviceMode;
PDeviceMode DevMode; ADevice =new char[100];
ADriver =new char[100];
APort =new char[100]; //获取打印机
if(Printer()->Printers->Count<1)return; //没有安装打印机
Printer()->PrinterIndex=-1; //设置打印在默认打印机 //获取PDevMode结构
Printer()->GetPrinter(ADevice, ADriver, APort,DeviceMode);
DevMode =(_devicemodeA*) GlobalLock((void *)DeviceMode);
//设定可以修改的值
DevMode->dmFields = DevMode->dmFields|DM_PAPERSIZE;
DevMode->dmFields = DevMode->dmFields|DM_PAPERLENGTH;
DevMode->dmFields = DevMode->dmFields|DM_PAPERWIDTH;
//设定要修改的值
Printer()->SetPrinter(ADevice, ADriver, APort,DeviceMode);
DevMode->dmPaperSize=DMPAPER_USER; //设为自定义纸张
DevMode->dmPaperWidth=2410; //设定自定义纸张的尺寸单位为0.1毫米 Printer()->Canvas->Font=Memo1->Font;
x=Printer()->Canvas->TextHeight("S"); //取得字体的高度
length=x*Memo1->Lines->Count*1.46+240; //取得MEMO的打印范围的长度
if(length<=5000) //一般打印机自定义纸张的长度上限
DevMode->dmPaperLength=length;
else {
times=length/5000+1;
DevMode->dmPaperLength=length/times+x; //长度过长,需做分页处理
} Printer()->BeginDoc();
for(i=0;i<Memo1->Lines->Count;i++)
{
if(length>5000){
if((x*j+x)>length/times/1.42+x){
Printer()->NewPage();
j=0;
}}
Printer()->Canvas->TextOut(1,x*j,Memo1->Lines->Strings[i]);
j++;
}
Printer()->EndDoc();
delete ADevice;
delete ADriver;
delete APort;
看看这个:
http://www.chinabcb.com/article/article.php?aid=43
http://www.yesky.com/20030326/1659255.shtml
除了语法!