如何設定印表機邊界 |
尚未結案
|
jyhshin
一般會員 ![]() ![]() 發表:1 回覆:0 積分:0 註冊:2007-11-08 發送簡訊給我 |
|
ufjjc
一般會員 ![]() ![]() 發表:18 回覆:47 積分:23 註冊:2002-05-21 發送簡訊給我 |
以下是參考自大陸網友,如有大德能改寫成 DELPHI 小弟不勝感激 ︿︿
============================================== Borland C++ Builder是基于C++语言的可视化编程环境,它提供了可重用组件库和一系列RAD设计工具,使得编程者只需用少量的手工代码就可以创建出高效的Windows应用程序,尤其是复杂的数据库访问应用程序,因此深受软件开发人员的喜爱。 在开发数据库访问应用程序时,会经常涉及到报表的打印问题。C++ Builder中提供了Quick Report(快速报表)组件供编程人员设计报表。Quick Report是挪威的QuSoft AS公司专门为C++ Builder设计的用于制作报表的一组控件,在C++ Builder中关于Quick Report的帮助文档不是很详细。另外它与C++ Builder的其他控件的风格也不太一致。直接使用Quick Report的报表预览功能总是不能达到令人满意的效果,因此有必要自定义快速报表的预览窗口。 设置预览窗口 新建工程,在Form1窗体上添加一个ToolBar控件,并在其上添加以下按钮:“打印”、“打印设置”、 “上一页” 、“下一页”、“放大”、“缩小”和“关闭”。 在Form1窗体上添加一个Panel控件,对齐方式设为alBottom,再在此Panel控件上添加一个ProgressBar控件(对齐方式设为alLeft)和一个Panel控件(Name 为Panel2,对齐方式设为alRight,BevelOuter设为bvLowered),这两个控件分别用来显示报表装载进度和其他提示信息。在Form1窗体上添加一个QRPreview控件,对齐方式设为alClient。Form1窗体的外观如图1所示: 图1 自定义快速报表的预览窗口 再新建一个窗体,设其Name为Form2, 在该窗体上添加TQuickRep控件,设其Name为QuickRep1,其PrinterSetting中的Units属性设为mm(以毫米为计量单位),然后建立报表。 编程实现 1.在Form2上选择QuickRep1,在其事件中选择OnPreview,输入以下代码: Form1->QRPreview1->QRPrinter=Form2->QuickRep1->QRPrinter; 2.在Form1的头文件中找到对象TForm1的定义,在其中添加以下的代码: int OldPaperSize; int OldOrientation; int OldTop; int OldBottom; int OldLeft; int OldRight; void RefreshPanel(); 3.选择Form1的Activate事件,输入以下代码: //初始化 OldPaperSize=Form2->QuickRep1->Page->PaperSize; OldOrientation=Form2->QuickRep1->Page->Orientation+1; OldLeft=Form2->QuickRep1->Page->LeftMargin*100; OldRight=Form2->QuickRep1->Page-> RightMargin*100; OldTop=Form2->QuickRep1->Page->Top Margin*100; OldBottom=Form2->QuickRep1->Page-> BottomMargin*100; Form2->QuickRep1->Prepare(); RefreshPanel(); Form2->QuickRep1->Preview(); 4.在Form1中添加更新提示代码: void TForm1::RefreshPanel() { //更新提示信息 Panel2->Caption=“第”+IntToStr(Form1->QRPreview1->PageNumber)+“页”+“共” + IntToStr(Form2->QuickRep1->PageNumber)+“页”; } 5.从Form1中选择QRPreview1,在其事件中选择OnProgressUpdate,输入以下代码: //显示报表装载进度 ProgressBar1->Position=Progress; RefreshPanel(); 6.打印: Form2->QuickRep1->Print(); 7.打印设置: DEVMODE *pDev; LPPAGESETUPDLG mylp=new PAGESETUPDLG; memset((void *)mylp,0,sizeof (PAGESETUPDLG)); mylp->lStructSize=sizeof(PAGESETUPDLG); mylp->hwndOwner=this->Handle; mylp->Flags=PSD_RETURNDEFAULT; PageSetupDlg( mylp ); if (mylp->hDevMode!=NULL){ pDev=(DEVMODE *)GlobalLock(mylp->hDevMode); pDev->dmPaperSize =OldPaperSize; pDev->dmOrientation =OldOrientation; mylp->rtMargin.left =OldLeft; mylp->rtMargin.right =OldRight; mylp->rtMargin.top =OldTop; mylp->rtMargin.bottom=OldBottom; GlobalUnlock(mylp->hDevMode); mylp->Flags=PSD_MARGINS| PSD_INHUNDREDTHSOFMILLIMETERS; if(PageSetupDlg(mylp)){ pDev=(DEVMODE *)GlobalLock (mylp->hDevMode); OldPaperSize =pDev->dmPaperSize; if(OldPaperSize>28)OldPaperSize=9;//A4 OldOrientation=pDev->dmOrientation; OldLeft =mylp->rtMargin.left; OldRight =mylp->rtMargin.right; OldTop =mylp->rtMargin.top; OldBottom =mylp->rtMargin.bottom; Form2->QuickRep1->Page->Orientation =OldOrientation-1; Form2->QuickRep1->Page->PaperSize =OldPaperSize; Form2->QuickRep1->Page->LeftMargin =OldLeft/100; Form2->QuickRep1->Page->RightMargin =OldRight/100; Form2->QuickRep1->Page->TopMargin =OldTop/100; Form2->QuickRep1->Page->Bottom Margin=OldBottom/100; GlobalUnlock(mylp->hDevMode); } GlobalFree(mylp->hDevMode); } delete mylp; QRPreview1->PageNumber=1; Form2->QuickRep1->Prepare(); Form2->QuickRep1->Preview(); 8.向上翻页: //上一页 if(QRPreview1->PageNumber > 1) QRPreview1->PageNumber--; RefreshPanel(); 9.向下翻页: //下一页 if(QRPreview1->PageNumber < Form2-> QuickRep1->PageNumber) QRPreview1->PageNumber++; RefreshPanel(); 10.放大处理: //放大 if(QRPreview1->Zoom< 200) QRPreview1->Zoom+=5; 11.缩小处理: //缩小 if(QRPreview1->Zoom>5) QRPreview1->Zoom-=5; 小 结 该方法的核心是使用了Win32 API函数PageSetupDlg(),利用该函数可以获取页面设置的缺省值,包括纸张大小、打印方向以及上下左右空白边的大小等,也可以弹出页面设置对话框来修改这些值。
編輯記錄
ufjjc 重新編輯於 2008-03-27 22:21:48, 註解 無‧
|
aryoung
一般會員 ![]() ![]() 發表:6 回覆:13 積分:8 註冊:2007-12-19 發送簡訊給我 |
大大您好,
以下連結應該有您要找的答案 http://delphi.ktop.com.tw/board.php?cid=168&fid=923&tid=98160 掫取裡面的一段 // 版面設定 Range=Worksheet.OlePropertyGet("PageSetup"); // 設定邊界 , 單位為 point , 一 point = 1 / 72 inches Range.OlePropertySet("LeftMargin",15); Range.OlePropertySet("RightMargin",15); Range.OlePropertySet("TopMargin",15); Range.OlePropertySet("BottomMargin",15); Range.OlePropertySet("HeaderMargin",15); Range.OlePropertySet("FooterMargin",15);
編輯記錄
aryoung 重新編輯於 2010-01-18 13:28:23, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |