老 老金 Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-24 #1 我在进行统计过程中,需要根据用户的要求来把结果放到一个StringGrid中,然后打印,由于StringGrid的长和宽都是不定的,也就是列数和行数每一次都不一样,而用户又要能打印出报表,请哪位高手指教一下。
我在进行统计过程中,需要根据用户的要求来把结果放到一个StringGrid中,然后打印,由于StringGrid的长和宽都是不定的,也就是列数和行数每一次都不一样,而用户又要能打印出报表,请哪位高手指教一下。
A Another_eYes Unregistered / Unconfirmed GUEST, unregistred user! 1999-11-24 #3 stringgrid.paintto(printer.canvas.handle, 0,0)
张 张国龙 Unregistered / Unconfirmed GUEST, unregistred user! 2000-01-14 #4 我也遇到了这个问题,我用 stringgrid.paintto(printer.canvas.handle, 0,0) 打印一个stringgrid, 但是打出来的表格只有3厘米宽 如何调整? 如何设置 pagewidth和pageheight? 是不是可以把canvas中的图像放大?
我也遇到了这个问题,我用 stringgrid.paintto(printer.canvas.handle, 0,0) 打印一个stringgrid, 但是打出来的表格只有3厘米宽 如何调整? 如何设置 pagewidth和pageheight? 是不是可以把canvas中的图像放大?
张 张国龙 Unregistered / Unconfirmed GUEST, unregistred user! 2000-01-15 #5 我用如下的程序打印, 把位图放大到纸张大小, 但是, 图像很粗糙, 如果要求不高, 可以凑合着用 procedure TForm1.SpeedButton8Click(Sender: TObject); var bitmap:Tbitmap; rect:Trect; begin bitmap:=Tbitmap.create; bitmap.width:=stringgrid1.Width; bitmap.height:=stringgrid1.height; stringgrid1.paintto(bitmap.canvas.handle,0,0); rect.top:=150; rect.left:=150; rect.right:=printer.pagewidth-150; rect.bottom:=bitmap.height*printer.pagewidth div bitmap.Width+50; printer.begin doc; printer.canvas.stretchdraw(rect, bitmap); printer.enddoc; end; 线性差值法 我可不会, 后没有比较简单的方法可以打印出 较好的质量, 实在不行, 只好从表格中读数据, 自己画标, 一个一个写到 printer.canvas理了.
我用如下的程序打印, 把位图放大到纸张大小, 但是, 图像很粗糙, 如果要求不高, 可以凑合着用 procedure TForm1.SpeedButton8Click(Sender: TObject); var bitmap:Tbitmap; rect:Trect; begin bitmap:=Tbitmap.create; bitmap.width:=stringgrid1.Width; bitmap.height:=stringgrid1.height; stringgrid1.paintto(bitmap.canvas.handle,0,0); rect.top:=150; rect.left:=150; rect.right:=printer.pagewidth-150; rect.bottom:=bitmap.height*printer.pagewidth div bitmap.Width+50; printer.begin doc; printer.canvas.stretchdraw(rect, bitmap); printer.enddoc; end; 线性差值法 我可不会, 后没有比较简单的方法可以打印出 较好的质量, 实在不行, 只好从表格中读数据, 自己画标, 一个一个写到 printer.canvas理了.
P pyramid Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-22 #8 你可以试一试Ehlib,一个扩展的DbGrid控件,自带打印,超宽自动分页打印,很方便。
D dop Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-22 #9 自己做一个打印控件吧! 做一个这样的控件也不是很复杂呀!其实也就是在Print.Canvas上画出你的图形罢了. 至于如何画,参考一下TCusotmGrid中的Paint函数,一般而言,你可以将其中的Canvas换成 你的Printer.Canvas就行了,不过,如果要WYSIWYG(所见即所得)的话,你就需要一些特殊的 操作,具体而言,也就是将其中的像素值通过 GetDeviceCaps之类的函数转换成在两个Canvas中看上去一样的长度! 再有具体一点,就是提供一个属性,我的做法是做一个PrinterInfo属性,里面的长度单位都 是cm的,然后,设置了之后,也就可以啦
自己做一个打印控件吧! 做一个这样的控件也不是很复杂呀!其实也就是在Print.Canvas上画出你的图形罢了. 至于如何画,参考一下TCusotmGrid中的Paint函数,一般而言,你可以将其中的Canvas换成 你的Printer.Canvas就行了,不过,如果要WYSIWYG(所见即所得)的话,你就需要一些特殊的 操作,具体而言,也就是将其中的像素值通过 GetDeviceCaps之类的函数转换成在两个Canvas中看上去一样的长度! 再有具体一点,就是提供一个属性,我的做法是做一个PrinterInfo属性,里面的长度单位都 是cm的,然后,设置了之后,也就可以啦
A ArJianzeng Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-22 #10 为什么不用TAdvStringGrid呢?去下一个吧,需要的话我可以E-Mail给你,只要你肯给我份久可以了
李 李清峰 Unregistered / Unconfirmed GUEST, unregistred user! 2000-07-26 #11 我是在c++ Builder 环境下实现的: 定义一 TlistView PList; 将 StringGrid 下的内容按每个网个单元,逐行写入 PList; 调用下面的函数打印: void TViewParaFrm::RawPrintQEvent() { char szTemp[200]; char szDriver[80]; char szDevice[80]; char szPort[80]; int hDevMode; SYSTEMTIME st; GetLocalTime(&st); //设置打印标题 sprintf(szTemp," %s打印 ( %d年%02d月%02d日 %02d:%02d:%02d )", ComboBox1->Items->Strings[ComboBox1->ItemIndex].c_str(),st.wYear,st.wMonth,st.wDay, st.wHour,st.wMinute,st.wSecond); RawPrinter1->Title = +"打印"; TPrinter *Printer1; Printer1 = Printer(); hDevMode = 0; Printer1->GetPrinter(szDevice,szDriver,szPort,hDevMode); RawPrinter1->DriverName = AnsiString(szDriver); RawPrinter1->PortName = AnsiString(szPort); RawPrinter1->DeviceName = AnsiString(szDevice); RawPrinter1->startraw(); RawPrinter1->write(szTemp); RawPrinter1->writeln(); //逐行打印 for(int i=0;i<pList->Count;i++) { sprintf(szTemp," %s",pList->Strings.c_str()); RawPrinter1->write(szTemp); RawPrinter1->writeln(); } RawPrinter1->endraw(); } C++ Builder 与 Delphi 用法相似, 只是语法不同。
我是在c++ Builder 环境下实现的: 定义一 TlistView PList; 将 StringGrid 下的内容按每个网个单元,逐行写入 PList; 调用下面的函数打印: void TViewParaFrm::RawPrintQEvent() { char szTemp[200]; char szDriver[80]; char szDevice[80]; char szPort[80]; int hDevMode; SYSTEMTIME st; GetLocalTime(&st); //设置打印标题 sprintf(szTemp," %s打印 ( %d年%02d月%02d日 %02d:%02d:%02d )", ComboBox1->Items->Strings[ComboBox1->ItemIndex].c_str(),st.wYear,st.wMonth,st.wDay, st.wHour,st.wMinute,st.wSecond); RawPrinter1->Title = +"打印"; TPrinter *Printer1; Printer1 = Printer(); hDevMode = 0; Printer1->GetPrinter(szDevice,szDriver,szPort,hDevMode); RawPrinter1->DriverName = AnsiString(szDriver); RawPrinter1->PortName = AnsiString(szPort); RawPrinter1->DeviceName = AnsiString(szDevice); RawPrinter1->startraw(); RawPrinter1->write(szTemp); RawPrinter1->writeln(); //逐行打印 for(int i=0;i<pList->Count;i++) { sprintf(szTemp," %s",pList->Strings.c_str()); RawPrinter1->write(szTemp); RawPrinter1->writeln(); } RawPrinter1->endraw(); } C++ Builder 与 Delphi 用法相似, 只是语法不同。
C Chenxy Unregistered / Unconfirmed GUEST, unregistred user! 2000-08-30 #16 本人也碰到这种问题,TStringGrid内容的打印,要求TStringGrid的列,行,以及列的顺序都可以 任意调整,后来专门写了一控件TLdGridReport ,可轻松解决上述TStringGrid打印问题, 如果需要可以E_Mail to You !
本人也碰到这种问题,TStringGrid内容的打印,要求TStringGrid的列,行,以及列的顺序都可以 任意调整,后来专门写了一控件TLdGridReport ,可轻松解决上述TStringGrid打印问题, 如果需要可以E_Mail to You !
Z ZQFILE Unregistered / Unconfirmed GUEST, unregistred user! 2002-03-11 #18 To Chenxy 可以E_Mail To Me? Yourfriendq@sina.com
B Boblee Unregistered / Unconfirmed GUEST, unregistred user! 2002-07-26 #19 To Chenxy 可以E_Mail To Me? nmks2000@sina.com
L lwgygz Unregistered / Unconfirmed GUEST, unregistred user! 2002-08-21 #20 To Chenxy 可以E_Mail To Me? lwgygz@sina.com