打印机设置的问题

xjhwc 2004-11-19 05:05:18
我的应用程序中有打印机设置项,想调用WINDOWS系统的PrinterSetupDialog1得到纸张类型(A3)和纸张方向(横放),把结果保存到config.ini文件中,在应用程序创建时把WINDOWS系统默认的纸张类型(A4)和纸张方向(竖放)改成应用程序中打印机的设置(A3,横放),应用程序退出后再改为WINDOWS系统默认值(A4,竖放)。这种方法是否可行?PrinterSetupDialog1的“确定”后如何得到纸张类型和纸张方向。我用BCB6开发。
...全文
150 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
雷振林 2004-11-20
  • 打赏
  • 举报
回复
是的,通过程序设置的打印机纸张、方向等参数,系统不会保留。不用恢复。
bluebear88 2004-11-19
  • 打赏
  • 举报
回复
你在程序中的打印设置退出程序后系统不会保存,所以不用恢复
crysword 2004-11-19
  • 打赏
  • 举报
回复
没有做过,不过转贴一段代码希望对你有用

关于打印机自定义纸张的处理问题
关键字:打印机自定义纸张
(www.chinabcb.com)
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;

13,873

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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