StringGrid模块(操作函数).docx.pdf

上传人:tbuqq 文档编号:5616347 上传时间:2020-07-02 格式:PDF 页数:24 大小:461.75KB
返回 下载 相关 举报
StringGrid模块(操作函数).docx.pdf_第1页
第1页 / 共24页
StringGrid模块(操作函数).docx.pdf_第2页
第2页 / 共24页
StringGrid模块(操作函数).docx.pdf_第3页
第3页 / 共24页
StringGrid模块(操作函数).docx.pdf_第4页
第4页 / 共24页
StringGrid模块(操作函数).docx.pdf_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《StringGrid模块(操作函数).docx.pdf》由会员分享,可在线阅读,更多相关《StringGrid模块(操作函数).docx.pdf(24页珍藏版)》请在三一文库上搜索。

1、unit SGridFunction; interface uses Windows, Messages, SysUtiIs, Variants, Classes, Graphics, Controls, Forms, SConncct, Dialogs, Global, Grids, DBGrids, DB, DBClicnt, WinSkinData, StdCtrls, Buttons, ExtCtrls, ComCtrls, ComObj, Clipbrd, ADODB; 成功提示框 /AMsg:成功提示信息 procedure SucccssMsgbox (AMsg: St ring

2、); / 错谋提示框 /AMsg:错谋提示信息 procedure ErrorMsgbox (AMsg: St ring); / 询问提示框 /strMsg:询问信息 function AskMsgbox(AMsg: String): Boolean; / 信息提示框 /AMsg:提示信息 procedure InfoMsgbox(AMsg: String); / 导出数据到Excel /ASGrid:需要导出的StringGrid /ExcclModalPath:报表模版全路径,为空则新建工作簿 /ExcclFileName: Excel文件的默认文件名 /AGridStartCol, AG

3、ridStartRow: StringGrid 的起始列和行,从0 开始 /AExcclStartCol, AExcclStartRow: Excel 的起始列和行,从1 开始 procedure ExportToExccl (ASGrid: TStringGrid; ExcclModalPath, ExcclFileName: String; AGridStartCol, AGridStartRow, AExcclStartCol, AExcclStartRow:Integer); / 取得某一列数据的最大长度 /ASgrid: 口标StringGrid /ACol: 口标列,从0开始 /A

4、StartRow:起始行 , 从0开始 function GctColMaxDataLcngth(ASGrid: TStringGrid; ACol, AStartRow:Integer): Integer; / 根据数据长度自动设置指定列的列宽 /ASgrid: 口标StringGrid /ACol: 口标列,从0开始 procedure SctOncColWidth(ASGrid: TStringGrid; ACol: Integer); 根据数据长度自动设置全部列的列宽 /ASgrid: 口标StringGrid procedure SctAllColWidth(ASGrid: TStr

5、ingGrid); / 显示ClientDataSet屮的数据 /ASgrid: 口标StringGrid /ACDSct:包含数据的ClientDataSet /AGridStartCol, AGridStartRow: StringGrid 的起始列和行,从0 开始 procedure ShowClientDataSetData(ASGrid: TStringGrid; ACDSct: TClicntDataSct; AGridStartCol, AGridStartRow: Integer); / 显示ADOQuery小的数据 /ASgrid: 口标StringGrid /AQuery:

6、包含数据的ADOQuery /AGridStartCol, AGridStartRow: StringGrid 的起始列和行,从0 开始 procedure ShowQueryData(ASGrid: TStringGrid; AQuery: TADOQuery; AGridStartCol, AGridStartRow: Integer); 判断是否含有数据 /true:包含数据 /false:不包含数据 /ASgrid: 口标StringGrid /AStartCol, AStartRow:起始列和彳亍,从0开始 function HaveData(ASGrid: TStringGrid;

7、 AStartCol, AStartRow: Integer):Boolcan; 取得9位以内整数位数 /=1 : 该整型数的长度 /0:空值 /-I:长度超过9位 /ANumber:需要判断位数的整型数 function GctlntcgcrNumbcrLcngth(ANumbcr: Intcgcr): Intcgcr; / 为指定的序 号列赋值 序号编号从1开始 /ASGrid: 口标StringGrid /ACol: 口标列,从0开始 /AStartRow:起始行 , 从0开始 procedure SctNumbcrFiclds (ASGrid: TStringGrid; ACol, A

8、StartRow:Integer); / 设置指定的列的对齐方式为右对齐 实现方式为在数据左边补空格,所以取数据时应注意去掉空格/ASGrid: 口 标StringGrid /ACol: 口标列,从0开始 /AStartRow:起始行 , 从0开始 procedure SctColAlignRight (ASGrid: TStringGrid; ACol, AStartRow:Integer); / 设置指定行的左边距 /ASGrid: 口标StringGrid /ARow: 口标彳亍,从0开始 procedure SctRowLcftSpacc (ASGrid: TStringGrid; A

9、Row, SpaccLength:Integer); 设置指定行的最小右边距 /ASGrid: 口标StringGrid /ARow: 口标彳亍,从0开始 procedure SctRowMinRightSpacc (ASGrid: TStringGrid; ARow, SpaccLength:Integer); 设置指定行的最小边距 /ASGrid: 口标StringGrid /ARow: 口标彳亍,从0开始 procedure SctRowMinSpaccWidth (ASGrid: TStringGrid; ARow, SpaccLength:Integer); 获得当前X坐标所在的列

10、/ASGrid: 口标StringGrid /AX:坐标的X值 function GctColByCX(ASGrid: TStringGrid; AX: Intcgcr): Intcgcr; / 获得当前Y坐标所在的行 /ASGrid: 口标StringGrid /AY:坐标的Y值 function GctRowByCY(ASGrid: TStringGrid; AY: Intcgcr): Intcgcr; 获得当前坐标所处的单元格的行列值 /ASGrid: 口标StringGrid /AX, AY:坐标的X, Y值 /ACol, ARow:单元格的列,行索引 , 从0开始 procedure

11、 GctCcllByCoordinatc(ASGrid: TStringGrid; AX, AY: Integer; out ACol, ARow: Integer); 填充空的单元格为指定值 /ASGrid: 口标StringGrid /AStartCol, AStartRow:开始列和彳亍,从0开始 /AEndCol, AEndRow:结束列和彳亍 /AValue:填充值 procedure SctSpaccCclls (ASGrid: TStringGrid; AStartCol, AStartRow, AEndCol, AEndRow: Integer; AValuc:String);

12、 implementation / - - / / 成功提示框 / - - / / procedure SucccssMsgbox (AMsg: St ring); begin Application. MessagcBox (Pchar (AMsg), 完成 ,MB I CON INFORMAT I ON + MB OK); end; / - - / 错谋提示框 / - - - / procedure ErrorMsgbox (AMsg: St ring); begin Application. McssageBox (Pchar (AMsg), 错误 ,MB ICONSTOP + MB_O

13、K); end; / - - - / 询问提示框 / - - - / function AskMsgbox(AMsg: String): Boolean; begin if Application. McssageBox (Pchar (AMsg), 确认 , MB ICONQUESTION + MB YESNO) = IDYES then begin resuIt : 二true; end else begin resuIt : 二false; end; end; / - - - / 消息提示框 / - - - / procedure InfoMsgbox(AMsg: String); be

14、gin Application. McssageBox (Pchar (AMsg), 提示 ,MB I CON INFORMATI ON + MB OK); end; / - - / / / 导出数据到Excel / - - / / procedure ExportToExccl (ASGrid: TStringGrid; ExcclModalPath, ExcclFileName:String; AGridStartCol, AGridStartRow, AExcclStartCol, AExcclStartRow:Integer); var ExcclApp: Variant; ColIn

15、dex, Rowindex: Integer; OneRowData: String; / 单行数据 DataList: TStringList; / 所有数据 SavcDlg: TSavcDialog; / 保存对话框 SavcExcclFi 1 ePath: String; /Excel 文件的保存路径 begin try / 没有数据时直接退出 if not HavcData (ASGrid, AGridStartCol, AGridStartRow) then begin InfoMsgBoxC没有数据需要导出。); exit; end; / 选择保存路径 try SavcDlg :=

16、 TSavcDialog. Create(ASGrid) ; / 创建保存窗口对象 SaveDlg. InitialDir := ExtractFilcPath(Application. ExcNamc); / 文件 保存在当前口录 SaveDlg. Filter := Excel Files(*. xls) | *? xls ; / 文件类型过滤 SaveDlg. FileName := ExcclFileName + VarToStr (date) ; / 定义默认文 件名 if SaveDlg. Execute then begin SavcExcclFilePath := SaveDl

17、g. FileName; / 保存文件路径 end else begin exit; / 放弃导出 end; finally SaveDlg. Free; / 释放对彖 end; / 创建Excel对彖 try ExcelApp := CrcateOlcObjcct ( Excel. Application ) ; / 创建新 Excel对彖 except ErrorMsgBox C请确认您的机器已经安装Microsoft Excel。); Exit; end; try / 打开Excel工作簿 try / 打开报表模版 辻(cxcclModalPath MaxColLength then b

18、egin MaxColLength:= length (CellsACol, Rowindex); end; end; end; resuIt : 二MaxColLength; end; / - - / / / 根据数据长度自动设置指定列的列宽 / - - / / procedure SctOncColWidth(ASGrid: TStringGrid; ACol: Integer); var OncCharPixcl: Integer; / 一个字符所占的像素数 RightSpaccWidth: Integer; / 右边距空隙 begin RightSpaccWidth := 3; / 设

19、置为3达到和左边距一致的效果 OncCharPixcl := 6; /6对应9号字* 此处最好写成一个根据字号获得像素值的 函数* ASGrid. ColWidthsACol := GetColMaxDataLcngth(ASGrid, ACol, 0) * OncCharPixcl + RightSpaccWidth; end; / - - / / / 根据数据长度自动设置全部列的列宽 / - - / / procedure SctAllColWidth(ASGrid: TStringGrid); var Col Index: Integer; / 需耍设置的列 begin for Coll

20、ndcx := 0 to ASGrid. ColCount - 1 do begin SctOncColWidth(ASGrid, Collndcx); end; end; / / / 显示ClicntDataSct中的数据 / - - / / procedure ShowClicntDataSctData(ASGrid: TStringGrid; ACDSct: TClicntDataSct; AGridStartCol, AGridStartRow: Integer); var ColIndex: Integer; Rowindex: Integer; begin try with ASG

21、rid do begin / 没有记录时,清空StringGrid并返回 if ACDSct. RccordCount then begin resuIt : 二true; exit; end; end; end; end; 没有数据,返回false resuIt : 二false; end; / - - / / 取得9位以内整数位数 / / function GctlntcgcrNumbcrLcngth(ANumbcr: Intcgcr): Intcgcr; var IsNcgativeNumbcr: Boolean; / 参数的正负 , 负数为true Loopindex: Integer

22、; / 循环变量 ComporeNumber: Integer; / 用于比较的数 NumbcrLength: Integer; / 返凹值,长度大于10返回 T begin if ANumbcr = null then begin result : 二0; / 空值返回0 exit; end; / 判断参数的 ?正负 if ANumbcr Othen begin 得到长度 if ComporcNumbcr = ANumbcr then NumbcrLcngth := Loopindex + 1 else NumbcrLcngth := Loopindex; / 如果是负数,则长度加1,即包含

23、负号 if IsNcgativcNumbcr then resuIt:二NumbcrLcngth + 1 else result := NumbcrLcngth; exit; end; 增大1位继续比较 ComporcNumbcr := ComporcNumbcr * 10; continue; end; result : 二-1; / 长度大于9,返回 T end; / - - / / / 为指定的序号列赋值 / - - / / procedure SctNumbcrFic 1 ds(ASGrid: TStringGrid; ACol, AStartRow:Integer); var Row

24、index: Integer; / 当前序号 begin with ASGrid do begin for Rowindex := 1 to RowCount - AStartRow do begin 添加序号 CellsACol, AStartRow + Rowindex - 1 := VarToStr(Rowindex); end; end; end; / - - / / / 设置指定的列的对齐方式为右对齐 / - - / / procedure SctColAlignRight (ASGrid: TStringGrid; ACol, AStartRow:Integer); var Row

25、index: Integer; MaxDataLength: Integer; / 该列最大的数据长度 begin MaxDataLength := GctColMaxDataLength(ASGrid, ACol, 0) ; / 取得该列最 大的数据长度 with ASGrid do begin for Rowindex := AStartRow to RowCount - 1 do begin while length (Co11sACo1, Rowindex) Right then continuc; /X坐标在当前列的范围内 辻(AX = CurCcllRect. Left) and

26、(AX CurCcllRect. Top) and (AY CurCcllRect. Bottom) then begin result := Rowindex; exit; end; end; result : 二RowCount - 1; / 返回最后一行的索引 end; end; / - - / 获得当前坐标所处的单元格的行列值 / - - / procedure GctCellByCoordinatc(ASGrid: TStringGrid; AX, AY: Integer; out ACol, ARow: Integer); begin ACol := GetColByCX(ASGr

27、id, AX) ; / 取得列索引 ARow := GetRowByCY(ASGrid, AY) ; / 取得行索引 / / 填充空的单元格为指定值 / - - / procedure SetSpaccCclls (ASGrid: TStringGrid; AStartCol, AStartRow, AEndCol, AEndRow: Integer; AValue:String); var ColIndex, Rowindex: Integer; begin with ASGrid do begin for Collndcx := AStartCol to AEndCol do begin for Rowindex := AStartRow to AEndRow do begin / 单兀格为空 (不含空格 ) 时填充 if Trim(CcllsColIndcx, Rowindex) = then begin CellsCollndcx, Rowindex := AValue; end; end; end; end; end; end.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1