读书人

请指点怎么在C++ Builder中打印整个窗

发布时间: 2012-03-09 16:54:57 作者: rapoo

请各位高手指点如何在C++ Builder中打印整个窗体?(初学者,见笑了)
由于课题关系,用到了c++builder,刚学了一点知识,本身对于软件、语言就不是很精通,学起来比较吃力。关于打印这个问题,师兄师姐都没有做过,在这里谢谢各位高手指点,不胜感激!
对于编完程序,运行出来的那个*.exe文件,老师说想让我把这个程序作成:当用户输入完之后,出一个结果,做一个打印的按钮,点击就可以把整个出结果的这个界面打印出来。
我看过以前有人发文问过,当时有人回答是写上:print();这个方法我试过了,是比较好使的,但是存在一个问题,就是打印出来的窗体,凡是Edit输入框内的内容都可以显示,但是ComboBox中选择的内容都显示不出来,也就是打印出来之后ComboBox中显示的是空白,是不是怎么改一下就好使啊?
还有一个人说的一种方法是:“建立一个BITMAP,复制整个背景,作为位图打印就行了。”可是我的师兄师姐都没有用过打印这方面的,我自己又不精通,我想知道这一步怎么实现啊?我看过一本书上有打印位图的示例程序,但是我不知道怎样建立一个BITMAP,复制整个背景。这是我把那个示例写下来了,但是TBitamap *bmp是不是应该怎么定义一下?请指点!
事例如下:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Graphics::TBitamap *bmp;
TRect rc;
int dpix,dpiy;
TPinter *prn;

if(!OpenPictureDialog1-> Execute())return; //如果未选择图形文件,返回

bmp = new Graphics::TBitmap(); //分配临时位图
prn = Printer(); //分配打印机
prn-> Title= "采暖散热器计算结果 "; //打印标题

try
{
bmp-> LoadFormFile(OpenPictureDialog1-> FileName); //读取位图文件
prn-> BeginDoc(); //开始打印
dpix=GetDeviceCaps(prn-> Handle,LOGPIXELSX); //获取横向分辨率
dpiy=GetDeviceCaps(prn-> Handle,LOGPIXELSY); //获取纵向分辨率
rc.left=2*dpix/2.54; //初始边距计算,厘米转化为像素
rc.top=2*dpiy/2.54;
rc.Right=rc.left+bmp-> Width*dpix/96; //宽度比例
rc.Bottom=rc.left+bmp-> Height*dpiy/96; //高度比例
prn-> Canvas-> StretchDraw(rc,bmp); //输出至打印画布上
prn-> EndDoc(); //结束打印
}
catch(...)
{
ShowMessage( "读取位图不正确! ");
}
delete bmp;
}

我的只需要打印窗体就可以了,应该不属于很难的,可我就是不会,请各位指点,再次感激!


[解决办法]
我觉得位图打印出来不咱们清除
你的combobox怎么打不出来呢,以前我也做过你的这个课题,
打印edt时取edit-> Text
打印combobox时取cmb-> Text 就可以了啊,我当时就时这么做的,可以打出来
[解决办法]
用getformimage获得位图,然后draw到print上的canvas上,我记得以前看到的好像是这样,函数不知道有没有记错,你看看帮助里面就有了,form自带的函数来的
[解决办法]
有现成的控件,DevExpress的Printing System

读书人网 >C++ Builder

热点推荐