StringGrid模塊(操作函數(shù)).docx_第1頁
StringGrid模塊(操作函數(shù)).docx_第2頁
StringGrid模塊(操作函數(shù)).docx_第3頁
StringGrid模塊(操作函數(shù)).docx_第4頁
StringGrid模塊(操作函數(shù)).docx_第5頁
已閱讀5頁,還剩29頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、unit SGridFunction;interface usesWindows, Messages, SysUtils, 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);/錯(cuò)謀提示框/

2、AMsg:錯(cuò)謀提示信息procedure ErrorMsgbox (AMsg: St ring);/詢問提示框/strMsg: 詢問信息function AskMsgbox(AMsg: String): Boolean;/信息提示框/AMsg:提示信息procedure InfoMsgbox(AMsg: String);/導(dǎo)出數(shù)據(jù)到Excel/ASGrid:需要導(dǎo)出的 StringGrid/ExcclModalPath:報(bào)表模版全路徑,為空則新建工作簿/ExcclFileName: Excel文件的默認(rèn)文件名/AGridStartCol, AGridStartRow: StringGrid的起

3、始列和行,從 0 開始/AExcclStartCol, AExcclStartRow: Excel的起始列和行)從 1 開始procedure ExportToExccl (ASGrid: TStringGrid; ExcclModalPath, ExcclFileName: String;AGridStartCol, AGridStartRow, AExcclStartCol,AExcclStartRow:Integer);/取得某一列數(shù)據(jù)的最大長度/ASgrid:口標(biāo) StringGrid/ACol:口標(biāo)列,從0開始/AStartRow:起始行,從0開始function GctColMax

4、DataLcngth(ASGrid: TStringGrid; ACol, AStartRow:Integer): Integer;/根據(jù)數(shù)據(jù)長度自動(dòng)設(shè)置指定列的列寬/ASgrid:口標(biāo) StringGrid/ACol: 口標(biāo)列,從0開始procedure SctOncColWidth(ASGrid: TStringGrid; ACol: Integer);根據(jù)數(shù)據(jù)長度自動(dòng)設(shè)置全部列的列寬/ASgrid:口標(biāo) StringGridprocedure SctAllColWidth(ASGrid: TStringGrid);/顯示ClientDataSet 中的數(shù)據(jù)/ASgrid:口標(biāo) Strin

5、gGrid/ACDSct:包含數(shù)據(jù)的 ClientDataSet/AGridStartCol, AGridStartRow: StringGrid的起始列和行,從 0 開始procedure ShowClientDataSetData(ASGrid: TStringGrid; ACDSct: TClicntDataSct;AGridStartCol, AGridStartRow: Integer);/顯示 ADOQueryJ、的數(shù)據(jù)/ASgrid:口標(biāo) StringGrid/AQuery:包含數(shù)據(jù)的 ADOQuery/AGridStartCol, AGridStartRow: StringGr

6、id的起始列和行,從 0 開始procedure ShowQueryData(ASGrid: TStringGrid; AQuery: TADOQuery;AGridStartCol, AGridStartRow: Integer);判斷是否含有數(shù)據(jù)/true:包含數(shù)據(jù)/false:不包含數(shù)據(jù)/ASgrid:口標(biāo) StringGrid/AStartCol, AStartRow:起始列和彳亍,從 0開始function HaveData(ASGrid: TStringGrid; AStartCol, AStartRow: Integer):Boolcan;取得9位以內(nèi)整數(shù)位數(shù)/>=1 :該

7、整型數(shù)的長度/0:空值-1 :長度超過9位/ANumber:需要判斷位數(shù)的整型數(shù)/為指定的序/ASGrid: 口function GctlntcgcrNumbcrLcngth(ANumbcr: Integer): Integer;號列賦值序號編號從1開始/ASGrid: 口標(biāo) StringGrid/ACol: 口標(biāo)列,從0開始/AStartRow:起始行,從0開始procedure SctNumberFields (ASGrid: TStringGrid; ACol, AStartRow:Integer);/設(shè)置指定的列的對齊方式為右對齊實(shí)現(xiàn)方式為在數(shù)據(jù)左邊補(bǔ)空格,所以取數(shù)據(jù)時(shí)應(yīng)注意去掉空格標(biāo)

8、 StringGrid/ACol: 口標(biāo)列,從0開始/AStartRow:起始行,從0開始procedure SetColAlignRight (ASGrid: TStringGrid; ACol, AStartRow:Integer);/設(shè)置指定行的左邊距/ASGrid: 口標(biāo) StringGrid/ARow: 口標(biāo)彳亍,從0開始procedure SctRowLcftSpacc (ASGrid: TStringGrid; ARow, SpaccLength:Integer);設(shè)置指定行的最小右邊距/ASGrid: 口標(biāo) StringGrid/ARow: 口標(biāo)彳亍,從0開始procedure

9、 SctRowMinRightSpacc (ASGrid: TStringGrid; ARow, SpaccLength:Integer);設(shè)置指定行的最小邊距/ASGrid: 口標(biāo) StringGrid/ARow: 口標(biāo)彳亍,從 0開始procedure SctRowMinSpaccWidth (ASGrid: TStringGrid; ARow, SpaccLength:Integer);獲得當(dāng)前X坐標(biāo)所在的列ASGrid:口標(biāo) StringGrid/AX:坐標(biāo)的X值function GctColByCX(ASGrid: TStringGrid; AX: Integer): Integer

10、;/獲得當(dāng)前丫坐標(biāo)所在的行/ASGrid: 標(biāo) StringGrid/AY:坐標(biāo)的Y值function GctRowByCY(ASGrid: TStringGrid; AY: Integer): Integer;獲得當(dāng)前坐標(biāo)所處的單元格的行列值/ASGrid: 標(biāo) StringGrid/AX, AY:坐標(biāo)的X, Y 值/ACol, ARow:單元格的列,行索引,從0開始procedure GetCellByCoordinate(ASGrid: TStringGrid; AX,AY: Integer;out ACol, ARow: Integer);填充空的單元格為指定值/ASGrid: 口標(biāo)

11、StringGrid/AStartCol, AStartRow:開始列和彳亍,從 0開始/AEndCol, AEndRow:結(jié)束列和彳亍/AValue:填充值procedure SetSpaeeCells (ASGrid: TStringGrid; AStartCol, AStartRow, AEndCol, AEndRow: Integer; AValue:String);implementation/ / /成功提示框/ / /procedure SueeessMsgbox (AMsg: St ring);beginApplication. MessageBox (Pehar (AMsg)

12、, '完成',MB I CON INFORMAT I ON + MB OK);end;/錯(cuò)謀提示框/ /procedure ErrorMsgbox (AMsg: St ring);beginApplication. McssageBox (Pchar (AMsg), '錯(cuò)誤',MB ICONSTOP + MB_OK); end;/ /詢問提示框/ /function AskMsgbox(AMsg: String): Boolean;beginif Application. McssageBox (Pchar (AMsg), '確認(rèn)')MB ICO

13、NQUESTION + MB YESNO) = IDYES thenbeginresuIt :二 true;endelse beginresuIt :二 false;end;end;/ /消息提示框/ /procedure InfoMsgbox(AMsg: String);beginApplication. McssageBox (Pchar (AMsg), '提示')MB I CON INFORMATI ON +MB OK);end;/ / /導(dǎo)出數(shù)據(jù)到Excel/ / /procedure ExportToExccl (ASGrid: TStringGrid; ExcclM

14、odalPath,ExcclFileName:String;,AGridStartCol, AGridStartRow, AExcclStartCol, AExcclStartRow:Integer); varExcclApp: Variant;ColIndex, Rowindex: Integer;OneRowData: String; / 單行數(shù)據(jù)DataList: TStringList; / 所有數(shù)據(jù)SavcDlg: TSavcDialog; / 保存對話框SavcExcclFi 1 ePath: String; /Excel文件的保存路徑begin try/沒有數(shù)據(jù)時(shí)直接退出if n

15、ot HavcData (ASGrid, AGridStartCol, AGridStartRow) then beginInfoMsgBoxC沒有數(shù)據(jù)需要導(dǎo)出。); exit;end;/選擇保存路徑trySavcDlg := TSavcDialog. Create(ASGrid) ;/ 創(chuàng)建保存窗口對象SaveDlg. InitialDir := ExtractFilcPath(Application. ExcNamc); /文件保存在當(dāng)前口錄SaveDlg. Filter := 'Excel Files(*. xls) | *? xls' ;/ 文件類型過濾SaveDlg.

16、 FileName := ExcclFileName + VarToStr (date) ;/ 定義默認(rèn)文件名if SaveDlg. Execute then beginSavcExcclFilePath := SaveDlg. FileName; / 保存文件路徑 end else beginexit; /放棄導(dǎo)出end;finallySaveDlg. Free; / 釋放對彖end;/創(chuàng)建Excel對彖tryExcelApp := CrcateOlcObjcct ( ' Excel. Application' ) ;/ 創(chuàng)建新Excel對彖exceptErrorMsgBox

17、 C請確認(rèn)您的機(jī)器已經(jīng)安裝Microsoft Excel 。);Exit;end;try/打開Excel工作簿try/打開報(bào)表模版ii(cxcclModalPath <> null) and (cxcclModalPath ? '') then beginExcelApp. WorkB00ks. Open(ExcclModalPath); end /添加新工作簿 else beginExcelApp. WorkBooks. Add;設(shè)置列寬for Collndcx := 0 to ASGrid. ColCount - AGridStartCol - 1 dobegi

18、n/ 此處不能使用 ASGrid. ColWidths AGridStartCol + ColIndex;ExcclApp.ActivcShcct ? ColumnsAExcclStartCol +ColIndex. ColumnWidthkGctColMaxDataLcngth(ASGrid, AGridStartCol + Collndcx, AGridStartRow);end;/ 數(shù)字 NumberFormatLocal = 0? 00 "/ 日期 NumberFormatLocal = yyyy-ni-d / 日寸間 NumberFormatLocal = $- F400h

19、:mni: ss AM/PM"/ 文本 NumberFormatLocal =ExcclApp. Cells. NumberFormatLocal := ' / 設(shè)置單元格為文本格式end;ExcclApp. Worksheets1. Activate; /設(shè)置第1個(gè)工作表為活動(dòng)工作表ExcclApp. Cells ? ItcmAExcclStartRow,AExcclStartCol. Select; / 設(shè)定 Excel 起始單元格exceptErrorMsgBox (' 無法打開報(bào)表模版:+ #13 + ExcclModalPath) ; /#13為回車換行ex

20、it;end;try/通過剪切板導(dǎo)出數(shù)據(jù)try/ 初始化 DataListDataList :二 TStringList. Crcatc;DataList ? Clear;/將數(shù)據(jù)保存到DataListwith ASGrid dobegin行for Rowindex := AGridStartRow to RowCount - 1 dobegin OncRowData :=;/列 for Collndcx := AGridStartCol to ColCount -Ido beginOncRowData := OncRowData + Trim (CelIsColIndex,Rowindex)

21、 + #9; /#9為制表符end;DataList. Add(OncRowData) ;/將該彳亍數(shù)據(jù)添加到DataList end;end;ClipBoard. AsText := DataList. Text;/ 將 DataList 中的數(shù)據(jù)拷貝到剪切板ExcclApp. ActivcShect. Paste; /將剪切板中的數(shù)據(jù)拷貝至UExcelfinallyDataList. Free; / 釋放 DataListClipBoard. Clear; / 清空剪切板 end;保存Excel文件ExcclApp. ActivcWorkbook. SaveAs (SavcExcclFil

22、ePath) ;/ 另存為到指定口錄SuccessMsgBox('成功將文件保存到:'+ #13 +SavcExcclF 訂 ePath) ;/ 保存成功finallyExcclApp. DisplayAlcrts := false;/ 不彈出保存提示對話框ExcclApp. WorkBooks. Close; / 關(guān)閉工作簿 end;finallyExcclApp. Quit; / 關(guān)閉 Excel 進(jìn)程ExcelApp:= Unassigned; / 釋放 ExcclAppexceptOn c: Exception dobeginErrorMsgbox(c. Message

23、);end;end;end;/ / /取得某一列數(shù)據(jù)的最大長度/ / /function GctColMaxDataLcngth(ASGrid: TStringGrid; ACol, AStartRow:Integer): Integer; varCollndcx, Rowindex: Integer;MaxColLength: Integer; /列數(shù)據(jù)的最大長度beginMaxColLength := 0;with ASGrid dobegin取得列數(shù)據(jù)的最大長度for Rowindex := AStartRow to RowCount 一 1 dobeginif length (Cell

24、sACol, Rowindex) > MaxColLength then beginMaxColLengthk length (CellsACol, Rowindex); end;end;result :二 MaxColLength;end;/ / /根據(jù)數(shù)據(jù)長度自動(dòng)設(shè)置指定列的列寬/ / /procedure SctOncColWidth(ASGrid: TStringGrid; ACol: Integer); varOncCharPixcl: Integer; / 一個(gè)字符所占的像素?cái)?shù)RightSpaccWidth: Integer; / 右邊距空隙beginRightSpaccWi

25、dth := 3;/設(shè)置為3達(dá)到和左邊距一致的效果OncCharPixcl := 6; /6 對應(yīng)9號字此處最好寫成一個(gè)根據(jù)字號獲得像素值的函數(shù)*ASGrid. ColWidthsACol := GetColMaxDataLcngth(ASGrid, ACol, 0) * OncCharPixcl+ RightSpaccWidth;end;/ / /根據(jù)數(shù)據(jù)長度自動(dòng)設(shè)置全部列的列寬/ / /procedure SctAllColWidth(ASGrid: TStringGrid); varCol Index: Integer; / 需耍設(shè)置的列beginfor Collndcx := 0 to

26、 ASGrid. ColCount - 1 dobeginSctOncColWidth(ASGrid, Collndcx);end;end;/顯示ClicntDataSct 中的數(shù)據(jù)/ / / procedure ShowClicntDataSctData(ASGrid: TStringGrid; ACDSct: TClicntDataSct;AGridStartCol, AGridStartRow: Integer);varColIndex: Integer;Rowindex: Integer;begintrywith ASGrid dobegin/沒有記錄時(shí),清空StringGrid 并返

27、回if ACDSct. RccordCount <= 0 thenbeginRowCount := 2;for Collndcx := Oto ColCount - 1 dobeginCellsColIndcx, 1:二;end;exit;end;RowCount := AGridStartRow + ACDSct. RccordCount; /StringGridColCount := AGridStartCol + ACDSct. FieldCount; /StringGridRowindex := AGridStartRow; / 當(dāng)前彳亍為起始行while not ACDSct.

28、 Eof do顯示數(shù)據(jù)for Collndcx := AGridStartCol to ColCount -IdobeginCellsCollndcx, RowindexkACDSet. Fields. FieldsCollndcx -AGridStartCol. AsStringend;轉(zhuǎn)到下一行Rowindex := Rowindex + 1;ACDSet. Next;end;end;exceptOn c: Exception dobeginErrorMsgBox(c. Message);end;end;end;/ /顯示ADOQuery、的數(shù)據(jù)/ /procedure ShowQuery

29、Data(ASGrid: TStringGrid; AQuery: TADOQuery; AGridStartCol, AGridStartRow: Integer);varCollndcx: Integer;Rowindex: Integer;begintry/沒有記錄時(shí))清空StringGrid 并返回if AQucry- RccordCount <= 0 thenbeginRowCount := 2;for Collndcx := Oto ColCount -ldobeginCellsColIndcx, 1:二;end; Iexit;end;RowCount := AGridSta

30、rtRow + AQuery. RccordCount; /StringGrid彳亍數(shù)ColCount := AGridStartCol + AQuery. FieldCount; /StringGrid歹U 數(shù)Rowindex := AGridStartRow; / 當(dāng)前彳亍為起始行while not AQuery. Eof dobegin顯示數(shù)據(jù)for Collndcx := AGridStartCol to ColCo unt - ldo beginCellsCollndcx, RowindexkAQuery.Fields. FieldsColIndcx -AGridStartCol.

31、AsStringend;/轉(zhuǎn)到下一行Rowindex := Rowindex + 1;AQuery. Next;end;end;exceptOn c: Exception dowith ASGrid dobeginErrorMsgBox(c. Message);end;end;end;/ / /判斷是否含有數(shù)據(jù)/ / /function HavcData(ASGrid: TStringGrid; AStartCol, AStartRow: Integer):Boolean;varCollndcx, Rowindex: Integer;beginwith ASgrid dobeginfor Co

32、llndcx := AStartCol to ColCount -ldobeginfor Rowindex := AStartRow to RowCount 一 1 do begin /包含數(shù)據(jù),返回trueif CcllsEColIndcx, Rowindex <> '' then begin resuIt :二 true;exit;end;end;end;end;沒有數(shù)據(jù),返回falseresuIt :二 false;end;取得9位以內(nèi)整數(shù)位數(shù)/function GctlntcgcrNumbcrLcngth(ANumbcr: Integer): Integer

33、; varIsNcgativeNumbcr: Boolean; / 參數(shù)的正負(fù),負(fù)數(shù)為 true Loopindex: Integer;/循環(huán)變量ComporeNumber: Integer; / 用于比較的數(shù)NumbcrLength: Integer; /返凹值)長度大于 10返回Tbeginif ANumbcr = null thenbeginresult :二 0; / 空值返回 0exit;end;/判斷參數(shù)的?正負(fù)if ANumbcr < 0 thenbeginANumbcr := 0 - ANumbcr; /轉(zhuǎn)換成正數(shù)用于計(jì)算長度IsNegativeNumbcr : = tr

34、ue; / 是負(fù)數(shù)endelse beginif ANumbcr = 0 thenbeginresult := 1; 是0,直接返回1exit;end;IsNcgativcNumber := false; / 是正數(shù)end;/開始比較ComporeNumber:= 10;for Loopindex := It o 9 dobegin/長度符合要求if (ComporcNumbcr div ANumbcr) > Othenbegin得到長度if ComporcNumbcr = ANumbcr then NumbcrLcngth := Loopindex + 1 else NumbcrLcn

35、gth := Loopindex;/如果是負(fù)數(shù),則長度加1,即包含負(fù)號if IsNcgativcNumbcr then resuIt:二 NumbcrLcngth + 1else result := NumbcrLcngth;exit;end;增大1位繼續(xù)比較ComporcNumbcr := ComporcNumbcr * 10;continue;end;result :二-1; 長度大于9,返回Tend;/ / /為指定的序號列賦值/ / /procedure SctNumbcrFic 1 ds(ASGrid: TStringGrid; ACol, AStartRow:Integer);va

36、rRowindex: Integer; / 當(dāng)前序號beginwith ASGrid dobeginfor Rowindex := 1 to RowCount - AStartRow dobegin添加序號CellsACol, AStartRow + Rowindex - 1 := VarToStr(Rowindex);end;end;end;/ / /設(shè)置指定的列的對齊方式為右對齊/ / /procedure SctColAlignRight (ASGrid: TStringGrid; ACol, AStartRow:Integer); varRowindex: Integer;MaxDat

37、aLength: Integer; /該列最大的數(shù)據(jù)長度beginMaxDataLength := GctColMaxDataLength(ASGrid, ACol, 0) ;/ 取得該列最大的數(shù)據(jù)長度with ASGrid dobeginfor Rowindex := AStartRow to RowCount - 1 dobeginwhile length (Co11sACo1, Rowindex) < MaxDataLength do beginCellsACol, Rowindex:二”+CellsACol, Rowindex; / 在前面補(bǔ)空格end;end;end;end;/

38、設(shè)置指定行的左邊距/ / procedure SctRowLcftSpacc (ASGrid: TStringGrid; ARow, SpaccLcmgth:Integer);varColIndex, Loopindex: Integer;beginwith ASGrid dobeginfor Collndcx := Oto ColCount -ldobegin/去掉左/在左邊補(bǔ)CellsColIndcx, ARow := TrimLcft(CellsCollndcx, ARow);邊空格for Loopindex := It o SpaccLcngth dobeginCellsColIndc

39、x, ARowk''4- CellsCollndex, ARow;空格end;end;end;end;/ / /設(shè)置指定行的最小右邊距/ / /procedure SctRowMinRightSpacc (ASGrid: TStringGrid; ARow, SpaccLcmgth:Integer); varCollndcx, Loopindex: Integer;with ASGrid dobeginfor Collndcx := Ot o ColCou nt - Ido beginCellsColIndcx, ARow := TrimRight(CellsCollndex,

40、 ARow);邊空格for Loopindex := It o SpaccLcngth dobeginCellsColIndcx, ARowk CellsCollndcx, ARow + ''空格end;end;end;end;/ / /設(shè)置指定行的最小邊距/ / /procedure SctRowMinSpaccWidth (ASGrid: TStringGrid; ARow, SpaccLcmgth:Integer);varColIndex, Loopindex: Integer;beginwith ASGrid dobeginfor Collndcx := Oto Col

41、Count -ldobeginCellsColIndcx, ARow := Trim (Cel Is Col Index, ARow);邊空格/去掉右/在右邊補(bǔ)/去掉兩for Loopindex := It o SpaccLcngth dobegin;/CellsColIndcx, ARow :二"+ CellsCollndex, ARow +在兩邊補(bǔ)空格end;end;end;/ /獲得當(dāng)前X坐標(biāo)所在的列/ /function GctColByCX(ASGrid: TStringGrid; AX: Integer): Integer; varColIndex: Integer;CurCcllRect: TRect; /當(dāng)前列的矩形區(qū)域beginwith ASGri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論