delphi里面怎么打印?

bhut 2003-08-30 11:08:37
一个stringgrid,有滚动条,窗口上只能显示一部分数据
想把整个表的数据打印出来,该怎么处理?
能否整个表格作为一个整体打印?(stringgrid类好像没有print方法)
...全文
51 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yk_xiong 2003-08-30
  • 打赏
  • 举报
回复
当年用BCB写的,看看
void TFQuickRep::ShowForm(TStringGrid* StringGrid)
{
TList *ShapeList ;
TList *ShapeList2 ;
TList *LabelList ;
TList *QRTextList ;
TQRShape *NewShape ;
TQRShape *OneShape ;
TQRLabel *NewLabel ;
TQRDBText *NewQRText;
int iTemp1,iTemp2 ;
AnsiString sSQL;

ShapeList = new TList ;
ShapeList2 = new TList;
LabelList = new TList ;
QRTextList = new TList;

QRTitleShape->Width = StringGrid->ColWidths[0] ;
QRDetailShape->Width = StringGrid->ColWidths[0];
QRTitleLabel->Caption = StringGrid->Cells[0][0];

for(int m=0;m<StringGrid->FixedRows;m++)
{
ShapeList->Clear();
LabelList->Clear();
LabelList->Add(QRTitleLabel) ;
ShapeList->Add(QRTitleShape) ;
if(m>0)
{
QRBand1->Height = QRBand1->Height+QRTitleShape->Height;
NewShape = new TQRShape(this);
NewShape->Parent = QRBand1;
NewShape->Height = QRTitleShape->Height;
NewShape->Width = StringGrid->ColWidths[0];

NewShape->Left = QRTitleShape->Left;
NewShape->Top=QRTitleShape->Top+m*(NewShape->Height);
NewLabel = new TQRLabel(this);
NewLabel->Parent = QRBand1;
NewLabel->Caption = StringGrid->Cells[0][m];
NewLabel->Left = iTemp1+5;
NewLabel->Top=NewShape->Top + 3;
NewLabel->AutoSize = true;
NewLabel->BringToFront();
}
for(int i=1;i<StringGrid->ColCount;i++)
{

iTemp1 = QRTitleShape->Left;
NewShape = new TQRShape(this);
NewShape->Parent = QRBand1;
NewShape->Height = QRTitleShape->Height;
NewShape->Width = StringGrid->ColWidths[i];
for(int j=0;j<ShapeList->Count;j++)
{
iTemp1 = iTemp1+((TQRShape *)(ShapeList->Items[j]))->Width-1;
}
NewShape->Left = iTemp1;
NewShape->Top=QRTitleShape->Top+m*(NewShape->Height);
ShapeList->Add(NewShape);

NewLabel = new TQRLabel(this);
NewLabel->Parent = QRBand1;
NewLabel->Caption = StringGrid->Cells[i][m];
NewLabel->Left = iTemp1+5;
NewLabel->Top=NewShape->Top + 3;
NewLabel->AutoSize = true;
NewLabel->BringToFront();
}
}

ShapeList2->Add(QRDetailShape);
QRTextList->Add(QRDBDetailText);
for(int i=1;i<StringGrid->ColCount;i++)
{
iTemp1 = QRDetailShape->Left;
OneShape = new TQRShape(this);
OneShape->Parent = QRBand2;
OneShape->Height = QRDetailShape->Height;
OneShape->Width = StringGrid->ColWidths[i];
for(int j=0;j<ShapeList2->Count;j++)
{
iTemp1 = iTemp1+((TQRShape *)(ShapeList2->Items[j]))->Width-1;
}
OneShape->Left = iTemp1;
OneShape->Top=QRDetailShape->Top;
ShapeList2->Add(OneShape);

NewQRText = new TQRDBText(this);
NewQRText->Parent = QRBand2;
NewQRText->Left = iTemp1+5;
NewQRText->Top=QRDBDetailText->Top;
NewQRText->AutoSize = true;
NewQRText->BringToFront();
QRTextList->Add(NewQRText);
}
sSQL = "select * from tReport_tmp";
if(OpenSQL(DMMain->qryCall,sSQL))
{
for(int i=0;i<QRTextList->Count;i++)
{
((TQRDBText *)(QRTextList->Items[i]))->DataSet=DMMain->qryCall;
((TQRDBText *)(QRTextList->Items[i]))->DataField="F"+IntToStr(i);
}
}
QuickRep1->Preview();
}
雨后阳光2000 2003-08-30
  • 打赏
  • 举报
回复
数据库里有和stringgrid中数据结构相同下表吗,有直接用表相连在quickrep中实现;
没有就用临时表把stringgrid中的数据存进去,再在stringgrid中实现。
wooden954 2003-08-30
  • 打赏
  • 举报
回复
要么自己写,要么用QuickRep控件,要么第三方
popnew 2003-08-30
  • 打赏
  • 举报
回复
用QUICKREP控件
bhut 2003-08-30
  • 打赏
  • 举报
回复
跟数据库没有关系,就是一个stringgrid控件显示一些数据
不是数据库的表
不需Excel也可讀寫xls檔的Delphi控件 用来读取Excel,Access的控件 读写任何单元值 数字型、字符型、布尔型以及错误型。但是你了解日期和时间型单元吗?在Excel中没有这样的单元。Excel是和Delphi一样的方式来存储日期和时间的,即浮点型。那是什么制造了日期或时间值啦,是格式化。 完全支持公式。你可以使用和Excel一样的函数,也支持对外部工作簿引用的公式,你甚至可以从外部引用读取结果。 与操作Delphi的TStringGrid一样的方式操作单元格,或则通过给单元格命名,比如:”D7” 根据单元格的规则以字符串格式读取单元值 根据你的需求格式化单元 格式化很简单。通过获取单元格,你就可以操作单元的格式属性。例如:XLSReadWriteII.Sheet[n].Cell[Col,Row].FontSize := 12; 你也可以对域进行格式化,比如设置边框。 支持所有的Excel格式选项 合并单元格 操作所有的打印选项 选择页面大小,设置边距 设置标题和页脚,包括格式码。 定义打印区域 设置分页符 XLSReadWriteII完全支持Unicode 所有的字符型都是宽字符型。你完全不必担心非英语字符。 控件 你可以插入控件以及定义他们的源和目的单元 绘图 插入所有种类的绘图,从简单的线条到AutoShapes 多行文本和文本框 创建和编辑文本框以及多行文本 图表 创建和Excel中一样选项的图表 复制/移动/删除 可以以Excel一样的行为复制、移动和删除单元 行列也可以像单元一样复制和移动 支持工作簿之间的复制和移动 可以复制整个工作簿 使用命名的域/单元 你可以在你想要的任何地方命名 通过命名访问单元格,例如:XLS.NameAsFloat['MyCell'] := 202.5; 支持指定、内置的名称 支持所有超链接类型 网页和E-mail地址 本地文件 服务器文件 工作薄引用 加密文档 你可以读写加密文件。条件是你需要知道文件的密码。 计算 可计算单元以及整个工作薄 计算引擎将依据单元进行计算。 可读取引用的外部工作薄。这通过一个特殊的快速查询程序进行执行 Rich Text单元 为了轻松地创建多字体格式的单元,单元可以以RTF格式读写 VBA宏 可以读写文件中的宏,使用XLSReadWriteII可以为控件比如:按钮、组合框等添加宏 导入及导出 从下列导入数据… Open Office Calc文档 CSV文件以及其他可以自动识别分隔符、小数分隔符和文本引用字符的文本文件 HTML表格(标签) 数据库 导出数据为… CSV文件 HTML文件 其他 自动过滤 单元验证 有条件的格式 合并单元 PaintCell方法:将单元内容渲染到TCanvas对象的 XLSReadWriteII包还包含下列组件: 从任何数据库中导入数据到工作薄 工作薄导出为HTML文件
没有分的请发邮件给我:jacdfb@163.com,qq:505689211 一直也没接触到什么复杂的报表,都是一些简单的报表,在DelphI下使用QuickReport一般也就能满足需要了,由于公司现在需求的变化,对条码扫描提出了新的要求,主要是扫码要包含更多地内容,以前的一维码显然不能完全满足,再说二维码也是一种趋势,故而需要解决二维码的问题,网上搜了一下,方式有多种多样,我花了3天时间找了很多,也尝试了很多。也经历了很多失败!总结一下在Delphi下实现二维码主要有三种方法: 1、使用PtImageRW.dll和PtQREncode.dll动态连接库,使用uQRCode生成二维码图像,如此就可以在报表中予以打印了,具体如何用uQRCode实现绘制二维码,本人水平太低,无法参透;结合QuikReport就可以实现打印二维码了,但此种有一个问题就是不支持中文,如source1(整合到FastReport中也无法实现对中文的支持); 2、还有一种就是生成控件,利用ZINT制作的控件,如source2;此种有个问题就是无法在报表中使用(也许是我不会用),只可在窗体上显示,当然理论上说能在窗体上使用就完全可以用于打印报表了,可问题时我不会,哎,还是技术水平太低。还有一种叫Han-sof 2D Barcodes的控件,我可以安装,但却无法使用,无法生成二维码到图片。可上网搜索一下下载这个控件安装一下,有搞定的与我共享一下。 3、用ZINT整合到FastReport中,也是下面我要叙述的形式:source3。完全可以满足我的需求。 例子实现了对采购入库数据的分组批量打印,加入了二维码的使用,当然实际工作当中制作入库单基本上用不到批量打印的,一般都是一单一打,但在我这里没办法,必须设计这样的功能,历史遗留问题吧,这里也牢骚一下吧! 如做一些延伸,很多的打印都和这个有很多的类似之处,我说的是并不太复杂的应用,至于什么更复杂得我想FS也能搞的定,这里做一个总结是希望对和我一样水平的人提供一些帮助吧,也许现在很多人根本不用Delphi了,权且当作自己的一个笔记吧! *********压缩文件内容如下********************************* 1、fastreport for 2010是我用的,可以正常使用也是例子里用到的4.9版本 2、fastreport5 for delphi7,已经好久不用7了,故也没测试,这是下载到的!测试成功的告诉我一下! 3、fastreport5 for xe8,我朋友测试通过的,也是他发给我的,但在我的xe8下就是不行,可以看到控件,但一运行,就报错,还没时间研究,我记得在装XE8的时候是自带了fastreport5的,但并没有二维码的选项,我是卸载了自带的,然后再安装的,然后出现了一系列的问题,实在没时间,因为大部分程序是在2010下的,还没时间向XE8切换,不知道是不在安装的时候不能安装自带的FS5,我朋友在第一次安装的时候就没有选择,然后手动安装的,效果很好! 有知道fastreport5如何在2010下用的,麻烦指教一下! 4、source1-3,前面有说过了,主要是一些例子,我所总结的三种方法,也不知道对不对! 5、zinBarcode文件里也是一个例子,也是用fastreport,可以比较完美的显示中文fastreport,但二维码不能显示中文,设置成中文即报错。

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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