横向打印问题?

lwluser 2006-06-20 10:21:22
//---------------------------------------------------------------------------
__fastcall TForm12::prnx(TPrinter *prn)
{
return GetDeviceCaps(prn->Handle,LOGPIXELSX);
}

//---------------------------------------------------------------------------
__fastcall TForm12::prny(TPrinter *prn)
{
return GetDeviceCaps(prn->Handle,LOGPIXELSY);
}

//---------------------------------------------------------------------------
void __fastcall TForm12::Button2Click(TObject *Sender)
{
float x,y;
__int32 xn,yn;
this->PageSetupDialog1->Execute(Handle);

x=this->PageSetupDialog1->MarginLeft/100;
y=this->PageSetupDialog1->MarginTop/100;
x=x/25.4;
y=y/25.4;
TPrinter *tp=new TPrinter();
tp->PrinterIndex=0;
x=x*this->prnx(tp);
y=y*this->prny(tp);
xn=x;
yn=y;
tp->BeginDoc();
tp->Canvas->Font=this->Font;
tp->Canvas->TextOutA(xn,yn,Edit1->Text);
tp->EndDoc();
tp->Free();
}

在页面设置里,不管我选择纵向还是横向,
总是以纵向打印文本,有什么办法可以实现横向打印?
谢谢了
...全文
273 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
duchuan 2006-06-20
  • 打赏
  • 举报
回复
在pDeviceMode对象中加一个方向即可。
duchuan 2006-06-20
  • 打赏
  • 举报
回复
你这种方式实际上绕过了Windows打印管理功能,所以设置方向无效,还是自己弄个对话框来控制吧,具体方法不难,可参考代码:
void __fastcall TfrmSetPrn::btApplyClick(TObject *Sender)
{
char MyDevice[50];
char MyDriver[50];
char MyPort[50];

THandle MyDeviceMode;
TDevMode *pDeviceMode;
Printer()->GetPrinter(MyDevice,MyDriver,MyPort,MyDeviceMode);
if(MyDeviceMode!=0)
{
pDeviceMode=(TDevMode *)GlobalLock((void *)MyDeviceMode);
if(pDeviceMode!=NULL)
{
pDeviceMode->dmPaperSize=DMPAPER_USER; //short dmPaperSiz
try{
pDeviceMode->dmPaperLength=StrToInt(Trim(medLength->Text));//1140;// short dmPaperLength;
pDeviceMode->dmPaperWidth=StrToInt(Trim(medWidth->Text));//1900;// short dmPaperWidth;
switch(cbPrintQlty->ItemIndex)
{
case 0:
pDeviceMode->dmPrintQuality=180;
pDeviceMode->dmYResolution=180;
break;
case 1:
pDeviceMode->dmPrintQuality=120;
pDeviceMode->dmYResolution=180;
break;
case 2:
pDeviceMode->dmPrintQuality=360;
pDeviceMode->dmYResolution=360;
break;
default:
;
}
pDeviceMode->dmFields=pDeviceMode->dmFields|DM_PAPERSIZE;
pDeviceMode->dmFields=pDeviceMode->dmFields|DM_PAPERLENGTH;
pDeviceMode->dmFields=pDeviceMode->dmFields|DM_PAPERWIDTH;
pDeviceMode->dmFields=pDeviceMode->dmFields|DM_PRINTQUALITY;// short dmPrintQuality;
pDeviceMode->dmFields=pDeviceMode->dmFields|DM_YRESOLUTION;// short dmYResolution;
ResetDC(Printer()->Handle,pDeviceMode);
GlobalUnlock((void *)MyDeviceMode);
flag=2;
btViewSetClick(btViewSet); //显示新设置

}
catch(...){
ShowMessage("输入不能为零。");
GlobalUnlock((void *)MyDeviceMode);
}
}
}
}
//---------------------------------------------------------------------------
wxch 2006-06-20
  • 打赏
  • 举报
回复
学习
海嵌 2006-06-20
  • 打赏
  • 举报
回复
tp->Orientation = poLandscape;

Printer()->Orientation = poPortrait; //The job prints vertically on the page.
Printer()->Orientation = poLandscape; //The job prints horizontally on the page.

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧