用PRINTER打印DBGRID

C++Builder 6实战精解:经典RAD工具在现代开发中的价值与应用 快速应用程序开发(RAD)是一种通过可视化设计和组件复用提升开发效率的编程范式,其核心原理在于将界面元素封装为可拖拽的控件,并通过事件驱动模型响应用户交互。这种技术价值在于能大幅缩短GUI应用的开发周期,降低界面编码的复杂度。在桌面工具、数据采集和工业控制等对执行效率和Windows原生集成度要求较高的应用场景中,RAD工具依然具有独特优势。C++Builder 6作为经典的RAD环境,其VCL框架和可视化设计器深刻体现了这一理念。通过剖析其数据感知控件和消息机制,开发者不仅能维护遗留系统,更能理解模块化设 阅读详情

BCB

 

//打印DBGrid
//==============================================================================
void __fastcall TForm_gpxx::DBGridPrint1(TDBGrid *DBGrid, String Title)
{
//  PrintDialog: TPrintDialog;
  int RowHeight, Temp_X, Temp_Y, PageEdgeX, PageEdgeY, PixelsPerInchX, PixelsPerInchY;
  String TempStr;
  double Scale;
  TRect Rect;
  int j;

  TPrinter *print = Printer();

  //0.取当前打印机X,Y方向每英寸像素*******************************************
  PixelsPerInchX = GetDeviceCaps(print->Handle, LOGPIXELSX);
  PixelsPerInchY = GetDeviceCaps(print->Handle, LOGPIXELSY);

  //1.变量初始化**************************************************************
  PageEdgeX = PixelsPerInchX / 6 - 10;
  PageEdgeY = PixelsPerInchY / 5 * 4 ;
  RowHeight = 1.5 * 9 * PixelsPerInchY / 72;
  Scale = PixelsPerInchX / Screen->PixelsPerInch;

    //1.输出标题********************************************************************
  Rect = Bounds(0,0,print->PageWidth,PageEdgeY);
  print->Canvas->Font->Name = "楷体_GB2312";
  print->Canvas->Font->Style << fsBold;
  print->Canvas->Font->Size = 12;
  DrawText(print->Canvas->Handle,Title.c_str(),Title.Length(),&Rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);

  DBGrid->DataSource->DataSet->First();
  while(!DBGrid->DataSource->DataSet->Eof)
  {
    //2.输出列头********************************************************************
    print->Canvas->Font->Name = "黑体";
    print->Canvas->Font->Size = 9;
    Temp_X = PageEdgeX;
    Temp_Y = PageEdgeY;
    //========================================================================

    for(j=0;j < DBGrid->Columns->Count;j++)
    {
        if(!DBGrid->Columns->operator [](j)->Visible) continue;
        //======================================================================
        TempStr = DBGrid->Columns->operator [](j)->Title->Caption;
        Rect = Bounds(Temp_X, Temp_Y, DBGrid->Columns->operator [](j)->Width*Scale + 10, RowHeight);
        print->Canvas->Rectangle(Rect);
        Rect = Bounds(Temp_X+5, Temp_Y, DBGrid->Columns->operator [](j)->Width*Scale - 5, RowHeight);
        DrawText(print->Canvas->Handle,TempStr.c_str(),TempStr.Length(),&Rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
        Temp_X = Temp_X + DBGrid->Columns->operator [](j)->Width*Scale;
    }
    Temp_Y = Temp_Y + RowHeight;

    //3.输出DBGrid内容**************************************************************
    print->Canvas->Font->Name = "宋体";
    print->Canvas->Font->Style >> fsBold;

    while(Temp_Y < print->PageHeight-PageEdgeY)
    {
       Temp_X = PageEdgeX;
       for(j=0;j < DBGrid->Columns->Count;j++)
       {
         if(!DBGrid->Columns->operator [](j)->Visible) continue;
         Rect = Bounds(Temp_X, Temp_Y, DBGrid->Columns->operator [](j)->Width*Scale + 10, RowHeight);
         print->Canvas->Rectangle(Rect);
         Rect = Bounds(Temp_X+5, Temp_Y, (DBGrid->Columns->operator [](j)->Width*Scale)-5, RowHeight);

         if(DBGrid->Columns->operator [](j)->Field->DataType == ftCurrency ||     //TCurrencyField or
            DBGrid->Columns->operator [](j)->Field->DataType == ftLargeint || //TLargeIntField) or
            DBGrid->Columns->operator [](j)->Field->DataType == ftSmallint || //TSmallIntField) or
            DBGrid->Columns->operator [](j)->Field->DataType == ftInteger ||  //TIntegerField)  or
            DBGrid->Columns->operator [](j)->Field->DataType == ftFloat ||    //TFloatField)   or
            DBGrid->Columns->operator [](j)->Field->DataType == ftWord)      //TWordField)
  //       TempStr = FormatFloat(',##0.00',DBGrid->Columns->operator [](j-1)->Field.AsFloat)
           TempStr = FormatFloat("#",DBGrid->Columns->operator [](j)->Field->AsFloat);  // 数值型
         else
           TempStr = DBGrid->Columns->operator [](j)->Field->AsString;                  // 字符型

         switch (DBGrid->Columns->operator [](j)->Field->Alignment)
         {
           case taLeftJustify: //居左
                DrawText(print->Canvas->Handle,TempStr.c_str(),TempStr.Length(),&Rect,DT_LEFT | DT_VCENTER | DT_SINGLELINE);
                break;
           case taCenter:     //居中
                DrawText(print->Canvas->Handle,TempStr.c_str(),TempStr.Length(),&Rect,DT_CENTER | DT_VCENTER | DT_SINGLELINE);
                break;
           case taRightJustify: //居右
                DrawText(print->Canvas->Handle,TempStr.c_str(),TempStr.Length(),&Rect,DT_RIGHT | DT_VCENTER | DT_SINGLELINE);
                break;
         }
         Temp_X = Temp_X + DBGrid->Columns->operator [](j)->Width*Scale;
       }
       Temp_Y = Temp_Y + RowHeight;
       DBGrid->DataSource->DataSet->Next();
       if(DBGrid->DataSource->DataSet->Eof) break;
    }
  }
  //4.输出页脚********************************************************************
  Temp_Y = print->PageHeight - PageEdgeY + RowHeight;
  //4.0.输出横线************************************************************
  print->Canvas->Rectangle(PageEdgeX, Temp_Y, print->PageWidth - PageEdgeX, Temp_Y + 1);
  //4.1.输出日期************************************************************
  Rect = Bounds(PageEdgeX + 200, Temp_Y, print->PageWidth-PageEdgeX, RowHeight);
  DrawText(print->Canvas->Handle,DateTimeToStr(Now()).c_str(),DateTimeToStr(Now()).Length(),&Rect,DT_LEFT | DT_VCENTER | DT_SINGLELINE);
  //4.2.输出页号************************************************************
  Rect = Bounds(PageEdgeX - 200, Temp_Y, print->PageWidth-PageEdgeX*2, RowHeight);
  DrawText(print->Canvas->Handle,("#" + IntToStr(print->PageNumber)).c_str(),("#" + IntToStr(print->PageNumber)).Length(),&Rect,DT_RIGHT | DT_VCENTER | DT_SINGLELINE);
  if(!DBGrid->DataSource->DataSet->Eof) print->NewPage();
}
//---------------------------------------------------------------------------

 

 

DELPHI

 

//---------------------------------------------------------------------------
unit DBGrid_print;

interface

uses
  Windows, SysUtils, Classes, Graphics, Controls, Forms,DB, ADODB, Grids, DBGrids, Printers;

  procedure DBGridPrint(DBGrid: TDBGrid; Title: string);

implementation

//==============================================================================
//打印DBGrid
//==============================================================================
procedure DBGridPrint(DBGrid: TDBGrid; Title: string);
  var
//  PrintDialog: TPrintDialog;
  RowHeight, Temp_X, Temp_Y, PageEdgeX, PageEdgeY, PixelsPerInchX, PixelsPerInchY: integer;
  TempStr: string;
  Scale: Double;
  Rect: TRect;
  var j: integer;

  begin
    //==========================================================================
    //0.取当前打印机X,Y方向每英寸像素*******************************************
    //==========================================================================
    PixelsPerInchX := GetDeviceCaps(Printer.Handle, LOGPIXELSX);
    PixelsPerInchY := GetDeviceCaps(Printer.Handle, LOGPIXELSY);
    //==========================================================================
    //1.变量初始化**************************************************************
    //==========================================================================
    PageEdgeX := PixelsPerInchX div 6 - 10;
    PageEdgeY := PixelsPerInchY div 5 * 4 ;
    RowHeight := Trunc(1.5 * 9 * PixelsPerInchY / 72);
    Scale :=   PixelsPerInchX / Screen.PixelsPerInch;
    //==============================================================================
    //1.输出标题********************************************************************
    //==============================================================================
    Rect := Bounds(0,0,Printer.PageWidth,PageEdgeY);
    Printer.Canvas.Font.Name := '楷体_GB2312';
    Printer.Canvas.Font.Style := Printer.Canvas.Font.Style + [fsBold];
    Printer.Canvas.Font.Size := 12;
    DrawText(Printer.Canvas.Handle,PChar(Title),Length(Title),Rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE);

    DBGrid.DataSource.DataSet.First;
    while not DBGrid.DataSource.DataSet.Eof do
    begin
      //==============================================================================
      //2.输出列头********************************************************************
      //==============================================================================
      Printer.Canvas.Font.Name := '黑体';
      Printer.Canvas.Font.Size := 9;
      Temp_X := PageEdgeX;
      Temp_Y := PageEdgeY;
      //========================================================================

      for j:=1 to DBGrid.Columns.Count do
      begin
        if not DBGrid.Columns[j-1].Visible then Continue;
        //======================================================================
        TempStr := DBGrid.Columns[j-1].Title.Caption;
        Rect := Bounds(Temp_X, Temp_Y, Trunc(DBGrid.Columns[j-1].Width*Scale)+10, RowHeight);
        Printer.Canvas.Rectangle(Rect);
        Rect := Bounds(Temp_X+5, Temp_Y, Trunc(DBGrid.Columns[j-1].Width*Scale)-5, RowHeight);
        DrawText(Printer.Canvas.Handle,PChar(TempStr),Length(TempStr),Rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE);
        Temp_X := Temp_X + Trunc(DBGrid.Columns[j-1].Width*Scale);
      end;

      Temp_Y := Temp_Y + RowHeight;
      //==============================================================================
      //3.输出DBGrid内容**************************************************************
      //==============================================================================
      Printer.Canvas.Font.Name := '宋体';
      Printer.Canvas.Font.Style := Printer.Canvas.Font.Style - [fsBold];

      while Temp_Y<Printer.PageHeight-PageEdgeY do
      begin
       Temp_X := PageEdgeX;
       for j:=1 to DBGrid.Columns.Count do
       begin
         if not DBGrid.Columns[j-1].Visible then Continue;
         Rect := Bounds(Temp_X, Temp_Y, Trunc(DBGrid.Columns[j-1].Width*Scale)+10, RowHeight);
         Printer.Canvas.Rectangle(Rect);
         Rect := Bounds(Temp_X+5, Temp_Y, Trunc(DBGrid.Columns[j-1].Width*Scale)-5, RowHeight);
         if (DBGrid.Columns[j-1].Field is TCurrencyField)
         or (DBGrid.Columns[j-1].Field is TLargeIntField)
         or (DBGrid.Columns[j-1].Field is TSmallIntField)
         or (DBGrid.Columns[j-1].Field is TIntegerField)
         or (DBGrid.Columns[j-1].Field is TFloatField)
         or (DBGrid.Columns[j-1].Field is TWordField)
  //       then TempStr := FormatFloat(',##0.00',DBGrid.Columns[j-1].Field.AsFloat)
         then TempStr := FormatFloat(',#',DBGrid.Columns[j-1].Field.AsFloat)
         else TempStr := DBGrid.Columns[j-1].Field.AsString;
         //====================================================================
         case DBGrid.Columns[j-1].Field.Alignment of
           //case.1.居中*******************************************************
           taCenter: DrawText(Printer.Canvas.Handle,PChar(TempStr),Length(TempStr),Rect,DT_CENTER or DT_VCENTER or DT_SINGLELINE);
           //case.2.居左*******************************************************
           taLeftJustify: DrawText(Printer.Canvas.Handle,PChar(TempStr),Length(TempStr),Rect,DT_LEFT or DT_VCENTER or DT_SINGLELINE);
           //case.3.居右*******************************************************
           taRightJustify: DrawText(Printer.Canvas.Handle,PChar(TempStr),Length(TempStr),Rect,DT_RIGHT or DT_VCENTER or DT_SINGLELINE);
         end;
         Temp_X := Temp_X + Trunc(DBGrid.Columns[j-1].Width*Scale);
       end;
       Temp_Y := Temp_Y + RowHeight;
       DBGrid.DataSource.DataSet.Next;
       if DBGrid.DataSource.DataSet.Eof then break;
     end;
    end;
    //4.输出页脚********************************************************************
    Temp_Y := Printer.PageHeight - PageEdgeY + RowHeight;
    //4.0.输出横线************************************************************
    Printer.Canvas.Rectangle(PageEdgeX, Temp_Y, Printer.PageWidth - PageEdgeX, Temp_Y + 1);
    //4.1.输出日期************************************************************
    Rect := Bounds(PageEdgeX, Temp_Y, Printer.PageWidth-PageEdgeX, RowHeight);
    DrawText(Printer.Canvas.Handle,PChar(DateTimeToStr(Now)),Length(DateTimeToStr(Now)),Rect,DT_LEFT or DT_VCENTER or DT_SINGLELINE);
    //4.2.输出页号************************************************************
    Rect := Bounds(PageEdgeX-1000, Temp_Y, Printer.PageWidth-PageEdgeX*2, RowHeight);
    DrawText(Printer.Canvas.Handle,PChar('#'+IntToStr(Printer.PageNumber)),Length('#'+IntToStr(Printer.PageNumber)),Rect,DT_RIGHT or DT_VCENTER or DT_SINGLELINE);
    if not DBGrid.DataSource.DataSet.Eof then Printer.NewPage;
  end;
end.

//---------------------------------------------------------------------------
 

Delphi打印DBGrids数据实战指南 Delphi 是一种流行的快速应用开发工具,它提供了一个功能强大的 DBGrid 控件,专为数据库数据展示而设计。在 Delphi 中,DBGrid 控件充当了在表格中显示数据库内容的桥梁,它能够展现表格数据、编辑数据、并进行数据排序等操作。DBGrid 控件的优势在于其与数据库的紧密集成,使得开发者可以轻松地对数据进行操作,无需编写过多的代码。DBGrid 提供了许多用于定制和管理网格的属性和方法,例如字段宽度调整、单元格颜色变化、事件处理等,进一步增强了其在复杂应用程序中的使用灵活性。 阅读详情

相关推荐

打印DBGrid表格里的数据

打印DBGrid里的内容数据。 DBGrid语法的使用。 。。。。

使用PrintDBGridEh进行打印

   if not ADOQuery1.Active then exit;  if ADOQuery1.RecordCount     PrintDBGridEh1.PageHeader.CenterText.Clear;  PrintDBGridEh1.PageHeader.CenterText.Add(trim(edTiTle1.Text));  PrintDBGridEh1.PageHead

Steven_xg的专栏 4287

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3611

在DELPHI中实现打印的预览

在DELPHI中实现打印的预览 PCPOP.COM 2005年10月18日 类型:转载 作者:《电脑报》 编辑:王琛   --------------------------------------------------------------------------------    在很多应用程序中,都需要程序具有打印预览功能,以避免用户由于选择不当出现打印错误。预览实现方式为通过创

erge的专栏 3213

BrainVision Recorder 和 BrainVision Analyzer 2.2 安装

本篇为《EEG处理》系列博客的第二篇,该系列博客主要记录EEG信号处理的学习过程中的软件安装和学习过程,方便以后查阅。本篇为BrainVision Recorder 和 BrainVision Analyzer 2.2 的安装过程。 BrainVision Recorder 和 BrainVision Analyzer 2.2 安装安装前奏Brain Vision Analyzer分析软件 安装Brain Vision Recorder记录软件 安装推荐几款个人使用的科研软件 安装前奏 Brain V

梁小憨憨的博客 5064

编码约定的自由度:重新思考Hamming码在实际工程中的灵活应用

本文探讨Hamming码在实际工程中的灵活应用,突破标准实现的思维定式。通过分析不同编码约定的优缺点和资源受限环境下的设计权衡,展示如何根据嵌入式系统、通信协议等具体需求定制汉明码实现,优化编解码效率并降低硬件开销。

perl8的博客 178

在C#里实现DATAGRID的打印预览和打印

http://dotnet.chinaitlab.com/CSharp/721460.html很多人都在论坛里问,如何实现DATAGRID的打印预览和打印,现在我就把这方面的源代码告诉大家。这段代码也花费了我1个晚上的时间,呵呵!数据库是基于sql server2000自带的northwind。源代码如下:using System; using System.Drawing; ...

weixin_30474613的博客 172

基于深度学习的图像去雨(Opencv,Pytorch,Cnn)

最近做了一个图像去雨项目,使用的语言为Python,深度学习框架为Pytorch。去雨效果不错,具体请看效果视频!图像去雨(GAN,Opencv,Pytorch)

Czqqwer的博客 2613

vb升级java 解决方案_如何让VB6.0升级到VB.NET的过程变得更简单?

我以前都是用C#来写,这次搞这个VB.NET项目,有点突然。还好语言都是相通的。1.虽说以前的Microsoft Visual Basic和.NET都是微软自己的东西,可有很多功能的实现方式还不一样,特别是那些控件。2.每个程序都会有自己的业务逻辑,有些可能会很复杂,甚至读别人的代码时你可能对业务逻辑那部分会完全一头雾水。开始也打算在.NET环境下重做,可在做了一些尝试后发现根本没法了解那个VB6...

weixin_42305041的博客 483

ARM架构下Horizon Client安装全攻略:从依赖检查到环境变量配置

本文详细介绍了在ARM架构设备上安装VMware Horizon Client的全过程,包括依赖检查、软件包获取、系统部署和环境变量配置。特别针对华为鲲鹏等ARM平台,提供了从基础准备到性能优化的完整指南,帮助用户高效完成虚拟桌面客户端的部署与调优。

github5actions的博客 556

从零开始:用Python搭建你的第一个加密货币量化交易机器人(附完整代码)

本文详细介绍了如何使用Python从零开始搭建一个加密货币量化交易机器人,涵盖环境准备、交易所API连接、基础交易策略实现、回测系统构建以及实盘部署等关键步骤。通过完整的代码示例,帮助读者快速掌握数字货币量化交易的核心技术,适合有一定编程基础的投资者入门。

weixin_30415113的博客 465

DBGrid、DBGrideh专题总结(来自delphi园地)

一、打印dbgrid数据://==============================================================================//打印DBGrid中的所有数据********************************************************//=================================...

weixin_30342209的博客 205

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

DBGrid使用全书(二)

打印 TDBGrid内容----方法1procedure PrintDbGrid(DataSet:TDataSet;DbGrid:TDbGrid;Title:String);varPointX,PointY:integer; ScreenX:integer; i,lx,ly:integer; px1,py1,px2,py2:integer; RowPerPage,RowPrinted:intege

zhlwyy的专栏 1160

疾风气象大模型4.0白皮书

《疾风气象大模型白皮书摘要》 疾风气象大模型(J-AFM)是国内首个基于3D建模的气象智能平台,突破传统二维气象分析的局限,采用体素化技术构建"x-y-z-t"四维统一模型,实现从分钟级短临到30天跨时效的连续预测。核心技术包括:1)多源数据三维同化,融合雷达、卫星、风廓线等异构数据;2)物理约束AI解码器,嵌入能量守恒、湍流封闭等气象原理;3)行业适配插件,服务风电、光伏、航空等领域,如山地风场尾流校正、云影短临预测。平台支持批流一体推理与边缘部署,提供概率化输出和误差溯源能力,显著降

专注AI大模型,软件混淆,授权 542

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

用最简单的办法,实现最好的打印(用BCB调用记事本的打印功能)

以下代码出自http://blog.youkuaiyun.com/hellogv/,引用请注明出处!C++ Builder调用记事本打印文本 AnsiString FileName="xxxxxxxx";//把这里的xxxxxxxx改为将要打印的文本的文件名ShellExecute(Application->Handle,"print",FileName.c_str(),"","",SW_SHOW

hellogv的专栏 4807

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Delphi中的DBGrid控件

在Delphi中,DBGrid控件是一个开发数据库软件不能不使用的控件,其功能非常强大,可以配合SQL语句实现几乎所有数据报表的显示,操作也非常简单,属性、过程、事件等都非常直观,但是使用中,有时侯还是需要一些其他功能,例如打印、斑马纹显示、将DBGrid中的数据转存到Excel97中等等。这就需要我们定制DBGrid,以更好的适应我们的实际需要。本人根据使用Delphi的体会,定制了DBGrid

feng12301的专栏 3486

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 使用C++进行Unicode编程
下一篇: vs2010 自带的 SQLEXPRESS2008 的几个问题
Persistent8813
博客等级 码龄23年 7粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值