关于打印机自定义纸张的处理问题
关键字:打印机自定义纸张
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